Преглед на файлове

Improved request_event wrapper
In this commit, the request_event wrapper can deal with receiving None (no events), a single dict (event), or a list of events. Your own handler that retrieves events now no longer needs to wrap the event in some outer dict and you don't need to return the message type.

Stan Janssen преди 4 години
родител
ревизия
c02fe0ba53
променени са 1 файла, в които са добавени 10 реда и са изтрити 12 реда
  1. 10 12
      openleadr/service/event_service.py

+ 10 - 12
openleadr/service/event_service.py

@@ -26,19 +26,17 @@ class EventService(VTNService):
         """
         The VEN requests us to send any events we have.
         """
-        try:
-            result = self.on_request_event(payload['ven_id'])
-            if iscoroutine(result):
-                result = await result
-        except OpenADRError as err:
-            response_type = 'oadrResponse'
-            response_payload = {'request_id': payload['request_id'],
-                                'response_code': err.status,
-                                'response_description': err.description,
-                                'ven_id': payload['ven_id']}
-            return response_type, response_payload
+        result = self.on_request_event(payload['ven_id'])
+        if iscoroutine(result):
+            result = await result
+        if result is None:
+            return 'oadrDistributeEvent', {'events': []}
+        if isinstance(result, dict):
+            return 'oadrDistributeEvent', {'events': [result]}
+        if isinstance(result, list):
+            return 'oadrDistributeEvent', {'events': result}
         else:
-            return result
+            raise TypeError("Event handler should return None, a dict or a list")
 
     @handler('oadrCreatedEvent')
     async def created_event(self, payload):