Browse Source

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 năm trước cách đây
mục cha
commit
c02fe0ba53
1 tập tin đã thay đổi với 10 bổ sung12 xóa
  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):