From c0758ad1a915943dd8da7d42619ddd0e677c6c05 Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Sun, 30 Aug 2020 15:49:00 -0700 Subject: [PATCH 1/6] initial changes --- .../azure/eventgrid/__init__.py | 4 +- .../azure/eventgrid/_consumer.py | 60 ++++++--- .../azure/eventgrid/_helpers.py | 14 +++ .../azure/eventgrid/_models.py | 56 --------- .../azure-eventgrid/tests/test_eg_consumer.py | 117 +++++++----------- 5 files changed, 104 insertions(+), 147 deletions(-) diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/__init__.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/__init__.py index 6637f8f6b70c..0b0357a1f50d 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/__init__.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/__init__.py @@ -7,11 +7,11 @@ from ._publisher_client import EventGridPublisherClient from ._consumer import EventGridConsumer from ._helpers import generate_shared_access_signature -from ._models import CloudEvent, CustomEvent, EventGridEvent, DeserializedEvent, StorageBlobCreatedEventData +from ._models import CloudEvent, CustomEvent, EventGridEvent, StorageBlobCreatedEventData from ._shared_access_signature_credential import EventGridSharedAccessSignatureCredential from ._version import VERSION __all__ = ['EventGridPublisherClient', 'EventGridConsumer', - 'CloudEvent', 'CustomEvent', 'DeserializedEvent', 'EventGridEvent', 'StorageBlobCreatedEventData', + 'CloudEvent', 'CustomEvent', 'EventGridEvent', 'StorageBlobCreatedEventData', 'generate_shared_access_signature', 'EventGridSharedAccessSignatureCredential'] __version__ = VERSION diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_consumer.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_consumer.py index 80cf18d9c859..126fb1381a69 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_consumer.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_consumer.py @@ -20,31 +20,57 @@ _LOGGER = logging.getLogger(__name__) -from ._models import DeserializedEvent +from ._models import CloudEvent, EventGridEvent +from ._helpers import _deserialize_data class EventGridConsumer(object): """ A consumer responsible for deserializing event handler messages, to allow for access to strongly typed Event objects. """ + def decode_cloud_event(self, cloud_event, **kwargs): + # type: (Union[str, dict, bytes], Any) -> CloudEvent + """Single event following CloudEvent schema will be parsed and returned as Deserialized Event. + :param cloud_event: The event to be deserialized. + :type cloud_event: Union[str, dict, bytes] + :rtype: CloudEvent - def deserialize_event(self, event, **kwargs): - # type: (Union[str, dict, bytes]) -> models.DeserializedEvent - """Single event following CloudEvent/EventGridEvent schema will be parsed and returned as DeserializedEvent. - :param event: The event to be deserialized. - :type event: Union[str, dict, bytes] - :keyword str encoding: The encoding that should be used. Defaults to 'utf-8' - :rtype: models.DeserializedEvent - :raises: :class:`ValueError`, when events do not follow CloudEvent or EventGridEvent schema. + :raise: :class:`ValueError`, when events do not follow CloudEvent schema. """ encode = kwargs.pop('encoding', 'utf-8') try: - if isinstance(event, six.binary_type): - event = json.loads(event.decode(encode)) - elif isinstance(event, six.string_types): - event = json.loads(event) - return DeserializedEvent(event) + if isinstance(cloud_event, six.binary_type): + cloud_event = json.loads(cloud_event.decode(encode)) + elif isinstance(cloud_event, six.string_types): + cloud_event = json.loads(cloud_event) + deserialized_event = CloudEvent.deserialize(cloud_event) + _deserialize_data(deserialized_event, deserialized_event.type) + return deserialized_event except Exception as err: - _LOGGER.error('Error: cannot deserialize event. Event does not have a valid format. Event must be a string, dict, or bytes following the CloudEvent/EventGridEvent schema.') - _LOGGER.error('Your event: {}'.format(event)) + _LOGGER.error('Error: cannot deserialize event. Event does not have a valid format. Event must be a string, dict, or bytes following the CloudEvent schema.') + _LOGGER.error('Your event: {}'.format(cloud_event)) _LOGGER.error(err) - raise ValueError('Error: cannot deserialize event. Event does not have a valid format. Event must be a string, dict, or bytes following the CloudEvent/EventGridEvent schema.') + raise ValueError('Error: cannot deserialize event. Event does not have a valid format. Event must be a string, dict, or bytes following the CloudEvent schema.') + + def decode_eventgrid_event(self, eventgrid_event, **kwargs): + # type: (Union[str, dict, bytes], Any) -> EventGridEvent + """Single event following EventGridEvent schema will be parsed and returned as Deserialized Event. + :param eventgrid_event: The event to be deserialized. + :type eventgrid_event: Union[str, dict, bytes] + :rtype: EventGridEvent + + :raise: :class:`ValueError`, when events do not follow EventGridEvent schema. + """ + encode = kwargs.pop('encoding', 'utf-8') + try: + if isinstance(eventgrid_event, six.binary_type): + eventgrid_event = json.loads(eventgrid_event.decode(encode)) + elif isinstance(eventgrid_event, six.string_types): + eventgrid_event = json.loads(eventgrid_event) + deserialized_event = EventGridEvent.deserialize(eventgrid_event) + _deserialize_data(deserialized_event, deserialized_event.event_type) + return deserialized_event + except Exception as err: + _LOGGER.error('Error: cannot deserialize event. Event does not have a valid format. Event must be a string, dict, or bytes following the CloudEvent schema.') + _LOGGER.error('Your event: {}'.format(eventgrid_event)) + _LOGGER.error(err) + raise ValueError('Error: cannot deserialize event. Event does not have a valid format. Event must be a string, dict, or bytes following the CloudEvent schema.') diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py index 454fe543a5fb..026e132939e9 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py @@ -12,6 +12,7 @@ from ._shared_access_signature_credential import EventGridSharedAccessSignatureCredential from ._signature_credential_policy import EventGridSharedAccessSignatureCredentialPolicy from . import _constants as constants +from ._event_mappings import _event_mappings def generate_shared_access_signature(topic_hostname, shared_access_key, expiration_date_utc, **kwargs): # type: (str, str, datetime.Datetime, Any) -> str @@ -78,3 +79,16 @@ def _is_cloud_event(event): return all([_ in event for _ in required]) and event['specversion'] == "1.0" except TypeError: return False + +def _deserialize_data(event, event_type): + """ + Sets the data of the desrialized event to strongly typed event object if event type exists in _event_mappings. + Otherwise, sets it to None. + + :param str event_type: The event_type of the EventGridEvent object or the type of the CloudEvent object. + """ + # if system event type defined, set event.data to system event object + try: + event.data = (_event_mappings[event_type]).deserialize(event.data) + except KeyError: # else, if custom event, then event.data is dict and should be set to None + event.data = None \ No newline at end of file diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py index 62d5ac7c1a29..77199336b09c 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py @@ -130,62 +130,6 @@ def __init__(self, subject, event_type, **kwargs): super(EventGridEvent, self).__init__(**kwargs) -class DeserializedEvent(): - """The container for the deserialized event model and mapping of event envelope properties. - :param dict event: dict - """ - - def __init__(self, event): - # type: (Any) -> None - self._model = None - self._event_dict = event - - def to_json(self): - # type: () -> dict - return self._event_dict - - @property - def model(self): - # type: () -> Union[CloudEvent, EventGridEvent] - """ - Returns strongly typed EventGridEvent/CloudEvent object defined by the format of the properties. - All properties of the model are strongly typed (ie. for an EventGridEvent, event_time property will return a datetime.datetime object). - - model.data: Returns a system event type(StorageBlobCreated, StorageBlobDeleted, etc.). If model.type/model.event_type is not defined in the - system registry, returns None. - - :raise: :class:`ValueError`, when events do not follow CloudEvent or EventGridEvent schema. - - :rtype: Union[CloudEvent, EventGridEvent] - """ - if not self._model: - try: - if 'specversion' in self._event_dict.keys(): - self._model = CloudEvent.deserialize(self._event_dict) - event_type = self._model.type - else: - self._model = EventGridEvent.deserialize(self._event_dict) - event_type = self._model.event_type - except: - raise ValueError("Event is not correctly formatted CloudEvent or EventGridEvent.") - - self._deserialize_data(event_type) - - return self._model - - def _deserialize_data(self, event_type): - """ - Sets self._model.data to strongly typed event object if event type exists in _event_mappings. - Otherwise, sets self._model.data to None. - - :param str event_type: The event_type of the EventGridEvent object or the type of the CloudEvent object. - """ - # if system event type defined, set model.data to system event object - try: - self._model.data = (_event_mappings[event_type]).deserialize(self._model.data) - except KeyError: # else, if custom event, then model.data is dict and should be set to None - self._model.data = None - class CustomEvent(DictMixin): """The wrapper class for a CustomEvent, to be used when publishing events. :param dict args: dict diff --git a/sdk/eventgrid/azure-eventgrid/tests/test_eg_consumer.py b/sdk/eventgrid/azure-eventgrid/tests/test_eg_consumer.py index 755a7e15df4b..344f5dd70634 100644 --- a/sdk/eventgrid/azure-eventgrid/tests/test_eg_consumer.py +++ b/sdk/eventgrid/azure-eventgrid/tests/test_eg_consumer.py @@ -32,111 +32,84 @@ class EventGridConsumerTests(AzureMgmtTestCase): # Cloud Event tests - @pytest.mark.liveTest def test_eg_consumer_cloud_storage_dict(self, **kwargs): client = EventGridConsumer() - deserialized_event = client.deserialize_event(cloud_storage_dict) - event_json = deserialized_event.to_json() - assert deserialized_event.model.__class__ == CloudEvent - assert deserialized_event.model.data.__class__ == StorageBlobCreatedEventData - assert event_json.__class__ == dict + deserialized_event = client.decode_cloud_event(cloud_storage_dict) + assert deserialized_event.__class__ == CloudEvent + assert deserialized_event.data.__class__ == StorageBlobCreatedEventData - @pytest.mark.liveTest def test_eg_consumer_cloud_storage_string(self, **kwargs): client = EventGridConsumer() - deserialized_event = client.deserialize_event(cloud_storage_string) - event_json = deserialized_event.to_json() - assert deserialized_event.model.__class__ == CloudEvent - assert deserialized_event.model.data.__class__ == StorageBlobCreatedEventData - assert event_json.__class__ == dict + deserialized_event = client.decode_cloud_event(cloud_storage_string) + assert deserialized_event.__class__ == CloudEvent + assert deserialized_event.data.__class__ == StorageBlobCreatedEventData - @pytest.mark.liveTest def test_eg_consumer_cloud_storage_bytes(self, **kwargs): client = EventGridConsumer() - deserialized_event = client.deserialize_event(cloud_storage_bytes) - event_json = deserialized_event.to_json() - assert deserialized_event.model.__class__ == CloudEvent - assert deserialized_event.model.data.__class__ == StorageBlobCreatedEventData - assert event_json.__class__ == dict + deserialized_event = client.decode_cloud_event(cloud_storage_bytes) + assert deserialized_event.__class__ == CloudEvent + assert deserialized_event.data.__class__ == StorageBlobCreatedEventData - @pytest.mark.liveTest + def test_eg_consumer_cloud_custom_dict(self, **kwargs): client = EventGridConsumer() - deserialized_event = client.deserialize_event(cloud_custom_dict) - event_json = deserialized_event.to_json() - assert deserialized_event.model.__class__ == CloudEvent - assert deserialized_event.model.data is None - assert event_json.__class__ == dict + deserialized_event = client.decode_cloud_event(cloud_custom_dict) + assert deserialized_event.__class__ == CloudEvent + assert deserialized_event.data is None + - @pytest.mark.liveTest def test_eg_consumer_cloud_custom_string(self, **kwargs): client = EventGridConsumer() - deserialized_event = client.deserialize_event(cloud_custom_string) - event_json = deserialized_event.to_json() - assert deserialized_event.model.__class__ == CloudEvent - assert deserialized_event.model.data is None - assert event_json.__class__ == dict + deserialized_event = client.decode_cloud_event(cloud_custom_string) + assert deserialized_event.__class__ == CloudEvent + assert deserialized_event.data is None + - @pytest.mark.liveTest def test_eg_consumer_cloud_custom_bytes(self, **kwargs): client = EventGridConsumer() - deserialized_event = client.deserialize_event(cloud_custom_bytes) - event_json = deserialized_event.to_json() - assert deserialized_event.model.__class__ == CloudEvent - assert deserialized_event.model.data is None - assert event_json.__class__ == dict + deserialized_event = client.decode_cloud_event(cloud_custom_bytes) + assert deserialized_event.__class__ == CloudEvent + assert deserialized_event.data is None # EG Event tests - @pytest.mark.liveTest + def test_eg_consumer_eg_storage_dict(self, **kwargs): client = EventGridConsumer() - deserialized_event = client.deserialize_event(eg_storage_dict) - event_json = deserialized_event.to_json() - assert deserialized_event.model.__class__ == EventGridEvent - assert deserialized_event.model.data.__class__ == StorageBlobCreatedEventData - assert event_json.__class__ == dict + deserialized_event = client.decode_eventgrid_event(eg_storage_dict) + assert deserialized_event.__class__ == EventGridEvent + assert deserialized_event.data.__class__ == StorageBlobCreatedEventData + - @pytest.mark.liveTest def test_eg_consumer_eg_storage_string(self, **kwargs): client = EventGridConsumer() - deserialized_event = client.deserialize_event(eg_storage_string) - event_json = deserialized_event.to_json() - assert deserialized_event.model.__class__ == EventGridEvent - assert deserialized_event.model.data.__class__ == StorageBlobCreatedEventData - assert event_json.__class__ == dict + deserialized_event = client.decode_eventgrid_event(eg_storage_string) + assert deserialized_event.__class__ == EventGridEvent + assert deserialized_event.data.__class__ == StorageBlobCreatedEventData + - @pytest.mark.liveTest def test_eg_consumer_eg_storage_bytes(self, **kwargs): client = EventGridConsumer() - deserialized_event = client.deserialize_event(eg_storage_bytes) - event_json = deserialized_event.to_json() - assert deserialized_event.model.__class__ == EventGridEvent - assert deserialized_event.model.data.__class__ == StorageBlobCreatedEventData - assert event_json.__class__ == dict + deserialized_event = client.decode_eventgrid_event(eg_storage_bytes) + assert deserialized_event.__class__ == EventGridEvent + assert deserialized_event.data.__class__ == StorageBlobCreatedEventData - @pytest.mark.liveTest + def test_eg_consumer_eg_custom_dict(self, **kwargs): client = EventGridConsumer() - deserialized_event = client.deserialize_event(eg_custom_dict) - event_json = deserialized_event.to_json() - assert deserialized_event.model.__class__ == EventGridEvent - assert deserialized_event.model.data is None - assert event_json.__class__ == dict + deserialized_event = client.decode_eventgrid_event(eg_custom_dict) + assert deserialized_event.__class__ == EventGridEvent + assert deserialized_event.data is None + - @pytest.mark.liveTest def test_eg_consumer_eg_custom_string(self, **kwargs): client = EventGridConsumer() - deserialized_event = client.deserialize_event(eg_custom_string) - event_json = deserialized_event.to_json() - assert deserialized_event.model.__class__ == EventGridEvent - assert deserialized_event.model.data is None - assert event_json.__class__ == dict + deserialized_event = client.decode_eventgrid_event(eg_custom_string) + assert deserialized_event.__class__ == EventGridEvent + assert deserialized_event.data is None + - @pytest.mark.liveTest def test_eg_consumer_eg_custom_bytes(self, **kwargs): client = EventGridConsumer() - deserialized_event = client.deserialize_event(eg_custom_bytes) - event_json = deserialized_event.to_json() - assert deserialized_event.model.__class__ == EventGridEvent - assert deserialized_event.model.data is None - assert event_json.__class__ == dict + deserialized_event = client.decode_eventgrid_event(eg_custom_bytes) + assert deserialized_event.__class__ == EventGridEvent + assert deserialized_event.data is None From 0ae3019e86d9e9a67a4d7209eb432a921c35a81f Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Wed, 2 Sep 2020 10:47:46 -0700 Subject: [PATCH 2/6] comments --- .../azure/eventgrid/_consumer.py | 15 ++------ .../azure/eventgrid/_models.py | 37 ++++++++++++++++++- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_consumer.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_consumer.py index 126fb1381a69..c9af9f8ffa46 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_consumer.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_consumer.py @@ -21,7 +21,6 @@ _LOGGER = logging.getLogger(__name__) from ._models import CloudEvent, EventGridEvent -from ._helpers import _deserialize_data class EventGridConsumer(object): """ @@ -38,12 +37,9 @@ def decode_cloud_event(self, cloud_event, **kwargs): """ encode = kwargs.pop('encoding', 'utf-8') try: - if isinstance(cloud_event, six.binary_type): - cloud_event = json.loads(cloud_event.decode(encode)) - elif isinstance(cloud_event, six.string_types): - cloud_event = json.loads(cloud_event) + cloud_event = CloudEvent._load(cloud_event, encode) deserialized_event = CloudEvent.deserialize(cloud_event) - _deserialize_data(deserialized_event, deserialized_event.type) + CloudEvent._deserialize_data(deserialized_event, deserialized_event.type) return deserialized_event except Exception as err: _LOGGER.error('Error: cannot deserialize event. Event does not have a valid format. Event must be a string, dict, or bytes following the CloudEvent schema.') @@ -62,12 +58,9 @@ def decode_eventgrid_event(self, eventgrid_event, **kwargs): """ encode = kwargs.pop('encoding', 'utf-8') try: - if isinstance(eventgrid_event, six.binary_type): - eventgrid_event = json.loads(eventgrid_event.decode(encode)) - elif isinstance(eventgrid_event, six.string_types): - eventgrid_event = json.loads(eventgrid_event) + eventgrid_event = EventGridEvent._load(eventgrid_event, encode) deserialized_event = EventGridEvent.deserialize(eventgrid_event) - _deserialize_data(deserialized_event, deserialized_event.event_type) + EventGridEvent._deserialize_data(deserialized_event, deserialized_event.event_type) return deserialized_event except Exception as err: _LOGGER.error('Error: cannot deserialize event. Event does not have a valid format. Event must be a string, dict, or bytes following the CloudEvent schema.') diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py index 77199336b09c..a1042a96681b 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py @@ -8,6 +8,7 @@ import datetime as dt import uuid import json +import six from ._generated import models from ._generated.models import StorageBlobCreatedEventData, \ EventGridEvent as InternalEventGridEvent, \ @@ -15,7 +16,39 @@ from ._shared.mixins import DictMixin from ._event_mappings import _event_mappings -class CloudEvent(InternalCloudEvent): #pylint:disable=too-many-instance-attributes + +class EventMixin(object): + """ + Mixin for the event models comprising of some helper methods. + """ + def _deserialize_data(event, event_type): + """ + Sets the data of the desrialized event to strongly typed event object if event type exists in _event_mappings. + Otherwise, sets it to None. + + :param str event_type: The event_type of the EventGridEvent object or the type of the CloudEvent object. + """ + # if system event type defined, set event.data to system event object + try: + event.data = (_event_mappings[event_type]).deserialize(event.data) + except KeyError: # else, if custom event, then event.data is dict and should be set to None + event.data = None + + def _load(event, encode): + """ + Load the event into the json + :param dict eventgrid_event: The event to be deserialized. + :type eventgrid_event: Union[str, dict, bytes] + :param str encode: The encoding to be used. + """ + if isinstance(event, six.binary_type): + event = json.loads(event.decode(encode)) + elif isinstance(event, six.string_types): + event = json.loads(event) + return event + + +class CloudEvent(InternalCloudEvent, EventMixin): #pylint:disable=too-many-instance-attributes """Properties of an event published to an Event Grid topic using the CloudEvent 1.0 Schema. All required parameters must be populated in order to send to Azure. @@ -71,7 +104,7 @@ def __init__(self, source, type, **kwargs): super(CloudEvent, self).__init__(**kwargs) -class EventGridEvent(InternalEventGridEvent): +class EventGridEvent(InternalEventGridEvent, EventMixin): """Properties of an event published to an Event Grid topic using the EventGrid Schema. Variables are only populated by the server, and will be ignored when sending a request. From ba342c48f109347aa690b611e791e69040705622 Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Wed, 2 Sep 2020 10:50:57 -0700 Subject: [PATCH 3/6] str --- sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py index a1042a96681b..1f47dbc8603c 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py @@ -39,7 +39,7 @@ def _load(event, encode): Load the event into the json :param dict eventgrid_event: The event to be deserialized. :type eventgrid_event: Union[str, dict, bytes] - :param str encode: The encoding to be used. + :param str encode: The encoding to be used. Defaults to 'utf-8' """ if isinstance(event, six.binary_type): event = json.loads(event.decode(encode)) From 064f81736195c4289f19e90db279867d034f91db Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Wed, 2 Sep 2020 11:18:56 -0700 Subject: [PATCH 4/6] static --- sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py index 1f47dbc8603c..b9f81a981b64 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py @@ -21,6 +21,7 @@ class EventMixin(object): """ Mixin for the event models comprising of some helper methods. """ + @staticmethod def _deserialize_data(event, event_type): """ Sets the data of the desrialized event to strongly typed event object if event type exists in _event_mappings. @@ -34,6 +35,7 @@ def _deserialize_data(event, event_type): except KeyError: # else, if custom event, then event.data is dict and should be set to None event.data = None + @staticmethod def _load(event, encode): """ Load the event into the json From 03185e284514ac4da7e91da59294f0ebcf263605 Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Wed, 2 Sep 2020 12:34:37 -0700 Subject: [PATCH 5/6] from_json --- sdk/eventgrid/azure-eventgrid/azure/eventgrid/_consumer.py | 4 ++-- sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_consumer.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_consumer.py index c9af9f8ffa46..8850bc0ab1e5 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_consumer.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_consumer.py @@ -37,7 +37,7 @@ def decode_cloud_event(self, cloud_event, **kwargs): """ encode = kwargs.pop('encoding', 'utf-8') try: - cloud_event = CloudEvent._load(cloud_event, encode) + cloud_event = CloudEvent._from_json(cloud_event, encode) deserialized_event = CloudEvent.deserialize(cloud_event) CloudEvent._deserialize_data(deserialized_event, deserialized_event.type) return deserialized_event @@ -58,7 +58,7 @@ def decode_eventgrid_event(self, eventgrid_event, **kwargs): """ encode = kwargs.pop('encoding', 'utf-8') try: - eventgrid_event = EventGridEvent._load(eventgrid_event, encode) + eventgrid_event = EventGridEvent._from_json(eventgrid_event, encode) deserialized_event = EventGridEvent.deserialize(eventgrid_event) EventGridEvent._deserialize_data(deserialized_event, deserialized_event.event_type) return deserialized_event diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py index b9f81a981b64..f894acff6da5 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_models.py @@ -36,7 +36,7 @@ def _deserialize_data(event, event_type): event.data = None @staticmethod - def _load(event, encode): + def _from_json(event, encode): """ Load the event into the json :param dict eventgrid_event: The event to be deserialized. From 8262d87d6fe5bb3def9edaa4c98875a777012c29 Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Wed, 2 Sep 2020 12:38:27 -0700 Subject: [PATCH 6/6] Update sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py --- .../azure-eventgrid/azure/eventgrid/_helpers.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py index 026e132939e9..9443f7e3f698 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py @@ -79,16 +79,3 @@ def _is_cloud_event(event): return all([_ in event for _ in required]) and event['specversion'] == "1.0" except TypeError: return False - -def _deserialize_data(event, event_type): - """ - Sets the data of the desrialized event to strongly typed event object if event type exists in _event_mappings. - Otherwise, sets it to None. - - :param str event_type: The event_type of the EventGridEvent object or the type of the CloudEvent object. - """ - # if system event type defined, set event.data to system event object - try: - event.data = (_event_mappings[event_type]).deserialize(event.data) - except KeyError: # else, if custom event, then event.data is dict and should be set to None - event.data = None \ No newline at end of file