From 0d07d774949a08cb83fde3a31796d0a50c1973e3 Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Wed, 13 Jan 2021 14:16:52 -0800 Subject: [PATCH 1/8] AzureSasCred --- .../azure/eventgrid/__init__.py | 5 ++- .../azure/eventgrid/_helpers.py | 10 +++--- .../azure/eventgrid/_publisher_client.py | 9 +++-- .../_shared_access_signature_credential.py | 33 ------------------ .../eventgrid/_signature_credential_policy.py | 34 ------------------- .../eventgrid/aio/_publisher_client_async.py | 9 +++-- ...custom_events_to_a_topic_with_signature.py | 6 ++-- ...ish_with_shared_access_signature_sample.py | 6 ++-- .../tests/test_eg_publisher_client.py | 6 ++-- .../tests/test_eg_publisher_client_async.py | 6 ++-- 10 files changed, 26 insertions(+), 98 deletions(-) delete mode 100644 sdk/eventgrid/azure-eventgrid/azure/eventgrid/_shared_access_signature_credential.py delete mode 100644 sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/__init__.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/__init__.py index 3c4ee3a3aa72..1f3eff192bc2 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/__init__.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/__init__.py @@ -8,10 +8,9 @@ from ._consumer import EventGridConsumer from ._helpers import generate_shared_access_signature from ._models import CloudEvent, CustomEvent, EventGridEvent -from ._shared_access_signature_credential import EventGridSharedAccessSignatureCredential from ._version import VERSION __all__ = ['EventGridPublisherClient', 'EventGridConsumer', - 'CloudEvent', 'CustomEvent', 'EventGridEvent', 'generate_shared_access_signature', - 'EventGridSharedAccessSignatureCredential'] + 'CloudEvent', 'CustomEvent', 'EventGridEvent', 'generate_shared_access_signature' + ] __version__ = VERSION diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py index 126d5fcf6c27..d52a4e9fc9f2 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py @@ -12,10 +12,8 @@ except ImportError: from urllib2 import quote # type: ignore -from azure.core.pipeline.policies import AzureKeyCredentialPolicy -from azure.core.credentials import AzureKeyCredential -from ._shared_access_signature_credential import EventGridSharedAccessSignatureCredential -from ._signature_credential_policy import EventGridSharedAccessSignatureCredentialPolicy +from azure.core.pipeline.policies import AzureKeyCredentialPolicy, AzureSasCredentialPolicy +from azure.core.credentials import AzureKeyCredential, AzureSasCredential from . import _constants as constants if TYPE_CHECKING: @@ -79,8 +77,8 @@ def _get_authentication_policy(credential): raise ValueError("Parameter 'self._credential' must not be None.") if isinstance(credential, AzureKeyCredential): authentication_policy = AzureKeyCredentialPolicy(credential=credential, name=constants.EVENTGRID_KEY_HEADER) - if isinstance(credential, EventGridSharedAccessSignatureCredential): - authentication_policy = EventGridSharedAccessSignatureCredentialPolicy( + if isinstance(credential, AzureSasCredential): + authentication_policy = AzureSasCredentialPolicy( credential=credential, name=constants.EVENTGRID_TOKEN_HEADER ) diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_publisher_client.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_publisher_client.py index 82ab27da599f..7fe316f8f8e9 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_publisher_client.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_publisher_client.py @@ -36,8 +36,7 @@ if TYPE_CHECKING: # pylint: disable=unused-import,ungrouped-imports - from azure.core.credentials import AzureKeyCredential - from ._shared_access_signature_credential import EventGridSharedAccessSignatureCredential + from azure.core.credentials import AzureKeyCredential, AzureSasCredential SendType = Union[ CloudEvent, EventGridEvent, @@ -63,11 +62,11 @@ class EventGridPublisherClient(object): :param str topic_hostname: The topic endpoint to send the events to. :param credential: The credential object used for authentication which implements SAS key authentication or SAS token authentication. - :type credential: ~azure.core.credentials.AzureKeyCredential or EventGridSharedAccessSignatureCredential + :type credential: ~azure.core.credentials.AzureKeyCredential or AzureSasCredential """ def __init__(self, topic_hostname, credential, **kwargs): - # type: (str, Union[AzureKeyCredential, EventGridSharedAccessSignatureCredential], Any) -> None + # type: (str, Union[AzureKeyCredential, AzureSasCredential], Any) -> None topic_hostname = _get_topic_hostname_only_fqdn(topic_hostname) self._topic_hostname = topic_hostname @@ -78,7 +77,7 @@ def __init__(self, topic_hostname, credential, **kwargs): @staticmethod def _policies(credential, **kwargs): - # type: (Union[AzureKeyCredential, EventGridSharedAccessSignatureCredential], Any) -> List[Any] + # type: (Union[AzureKeyCredential, AzureSasCredential], Any) -> List[Any] auth_policy = _get_authentication_policy(credential) sdk_moniker = 'eventgrid/{}'.format(VERSION) policies = [ diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_shared_access_signature_credential.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_shared_access_signature_credential.py deleted file mode 100644 index 7c3a178c96eb..000000000000 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_shared_access_signature_credential.py +++ /dev/null @@ -1,33 +0,0 @@ -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See LICENSE.txt in the project root for -# license information. -# ------------------------------------------------------------------------- - -class EventGridSharedAccessSignatureCredential(object): - """Creates an instance of an EventGridSharedAccessSignatureCredential for use with a service client. - :param str signature: Signature to use in authentication. - """ - - def __init__(self, signature): - # type: (str) -> None - self._signature = signature - - @property - def signature(self): - # type: () -> str - """ - The value of the signature to be used in authentication. - - :rtype: str - """ - return self._signature - - def update(self, signature): - # type: (str) -> None - """ - Updates the key property value of the signature to be used in authentication. - - :param str signature: Signature to use in authentication. - """ - self._signature = signature diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py deleted file mode 100644 index d210fe70b626..000000000000 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py +++ /dev/null @@ -1,34 +0,0 @@ -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See LICENSE.txt in the project root for -# license information. -# ------------------------------------------------------------------------- - -from typing import Any, TYPE_CHECKING -import six - -from azure.core.pipeline.policies import SansIOHTTPPolicy - -if TYPE_CHECKING: - from ._shared_access_signature_credential import EventGridSharedAccessSignatureCredential - - -class EventGridSharedAccessSignatureCredentialPolicy(SansIOHTTPPolicy): - """Adds a token header for the provided credential. - :param credential: The credential used to authenticate requests. - :type credential: ~azure.eventgrid.EventGridSharedAccessSignatureCredential - :param str name: The name of the token header used for the credential. - :raises: ValueError or TypeError - """ - def __init__(self, credential, name, **kwargs): # pylint: disable=unused-argument - # type: (EventGridSharedAccessSignatureCredential, str, Any) -> None - super(EventGridSharedAccessSignatureCredentialPolicy, self).__init__() - self._credential = credential - if not name: - raise ValueError("name can not be None or empty") - if not isinstance(name, six.string_types): - raise TypeError("name must be a string.") - self._name = name - - def on_request(self, request): - request.http_request.headers[self._name] = self._credential.signature diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/aio/_publisher_client_async.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/aio/_publisher_client_async.py index 688b5ad8ef57..3c8225f52f12 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/aio/_publisher_client_async.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/aio/_publisher_client_async.py @@ -7,7 +7,7 @@ # -------------------------------------------------------------------------- from typing import Any, Union, List, Dict, cast -from azure.core.credentials import AzureKeyCredential +from azure.core.credentials import AzureKeyCredential, AzureSasCredential from azure.core.tracing.decorator_async import distributed_trace_async from azure.core.pipeline.policies import ( RequestIdPolicy, @@ -32,7 +32,6 @@ ) from .._generated.aio import EventGridPublisherClient as EventGridPublisherClientAsync from .._generated.models import CloudEvent as InternalCloudEvent, EventGridEvent as InternalEventGridEvent -from .._shared_access_signature_credential import EventGridSharedAccessSignatureCredential from .._version import VERSION SendType = Union[ @@ -59,13 +58,13 @@ class EventGridPublisherClient(): :param str topic_hostname: The topic endpoint to send the events to. :param credential: The credential object used for authentication which implements SAS key authentication or SAS token authentication. - :type credential: ~azure.core.credentials.AzureKeyCredential or EventGridSharedAccessSignatureCredential + :type credential: ~azure.core.credentials.AzureKeyCredential or AzureSasCredential """ def __init__( self, topic_hostname: str, - credential: Union[AzureKeyCredential, EventGridSharedAccessSignatureCredential], + credential: Union[AzureKeyCredential, AzureSasCredential], **kwargs: Any) -> None: self._client = EventGridPublisherClientAsync( policies=EventGridPublisherClient._policies(credential, **kwargs), @@ -76,7 +75,7 @@ def __init__( @staticmethod def _policies( - credential: Union[AzureKeyCredential, EventGridSharedAccessSignatureCredential], + credential: Union[AzureKeyCredential, AzureSasCredential], **kwargs: Any ) -> List[Any]: auth_policy = _get_authentication_policy(credential) diff --git a/sdk/eventgrid/azure-eventgrid/samples/champion_scenarios/cs1b_publish_custom_events_to_a_topic_with_signature.py b/sdk/eventgrid/azure-eventgrid/samples/champion_scenarios/cs1b_publish_custom_events_to_a_topic_with_signature.py index 6394f9458c2f..2b9844b0e82f 100644 --- a/sdk/eventgrid/azure-eventgrid/samples/champion_scenarios/cs1b_publish_custom_events_to_a_topic_with_signature.py +++ b/sdk/eventgrid/azure-eventgrid/samples/champion_scenarios/cs1b_publish_custom_events_to_a_topic_with_signature.py @@ -15,8 +15,8 @@ "..eventgrid.azure.net". """ import os -from azure.eventgrid import EventGridPublisherClient, EventGridEvent, generate_shared_access_signature, EventGridSharedAccessSignatureCredential -from azure.core.credentials import AzureKeyCredential +from azure.eventgrid import EventGridPublisherClient, EventGridEvent, generate_shared_access_signature +from azure.core.credentials import AzureKeyCredential, AzureSasCredential from datetime import datetime, timedelta topic_key = os.environ["EG_ACCESS_KEY"] @@ -24,7 +24,7 @@ expiration_date_utc = datetime.utcnow() + timedelta(hours=1) signature = generate_shared_access_signature(topic_hostname, topic_key, expiration_date_utc) -credential = EventGridSharedAccessSignatureCredential(signature) +credential = AzureSasCredential(signature) client = EventGridPublisherClient(topic_hostname, credential) client.send([ diff --git a/sdk/eventgrid/azure-eventgrid/samples/publish_samples/publish_with_shared_access_signature_sample.py b/sdk/eventgrid/azure-eventgrid/samples/publish_samples/publish_with_shared_access_signature_sample.py index e02bd9d60e99..9d276e33dfeb 100644 --- a/sdk/eventgrid/azure-eventgrid/samples/publish_samples/publish_with_shared_access_signature_sample.py +++ b/sdk/eventgrid/azure-eventgrid/samples/publish_samples/publish_with_shared_access_signature_sample.py @@ -20,8 +20,8 @@ import time from datetime import datetime, timedelta - -from azure.eventgrid import EventGridPublisherClient, CloudEvent, generate_shared_access_signature, EventGridSharedAccessSignatureCredential +from azure.core import AzureSasCredential +from azure.eventgrid import EventGridPublisherClient, CloudEvent, generate_shared_access_signature key = os.environ["CLOUD_ACCESS_KEY"] topic_hostname = os.environ["CLOUD_TOPIC_HOSTNAME"] @@ -30,7 +30,7 @@ signature = generate_shared_access_signature(topic_hostname, key, expiration_date_utc) # authenticate client -credential = EventGridSharedAccessSignatureCredential(signature) +credential = AzureSasCredential(signature) client = EventGridPublisherClient(topic_hostname, credential) team_members = ["Josh", "Kerri", "Kieran", "Laurent", "Lily", "Matt", "Soren", "Srikanta", "Swathi"] # possible values for data field diff --git a/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client.py b/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client.py index c78edc6f4f62..ec8012e9719f 100644 --- a/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client.py +++ b/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client.py @@ -15,8 +15,8 @@ from devtools_testutils import AzureMgmtTestCase, CachedResourceGroupPreparer from azure_devtools.scenario_tests import ReplayableTest -from azure.core.credentials import AzureKeyCredential -from azure.eventgrid import EventGridPublisherClient, CloudEvent, EventGridEvent, CustomEvent ,EventGridSharedAccessSignatureCredential, generate_shared_access_signature +from azure.core.credentials import AzureKeyCredential, AzureSasCredential +from azure.eventgrid import EventGridPublisherClient, CloudEvent, EventGridEvent, CustomEvent, generate_shared_access_signature from eventgrid_preparer import ( CachedEventGridTopicPreparer @@ -185,7 +185,7 @@ def test_send_cloud_event_dict(self, resource_group, eventgrid_topic, eventgrid_ def test_send_signature_credential(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): expiration_date_utc = dt.datetime.now(UTC()) + timedelta(hours=1) signature = generate_shared_access_signature(eventgrid_topic_endpoint, eventgrid_topic_primary_key, expiration_date_utc) - credential = EventGridSharedAccessSignatureCredential(signature) + credential = AzureSasCredential(signature) client = EventGridPublisherClient(eventgrid_topic_endpoint, credential) eg_event = EventGridEvent( subject="sample", diff --git a/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client_async.py b/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client_async.py index a5fff76ada95..3e482f1ad5e0 100644 --- a/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client_async.py +++ b/sdk/eventgrid/azure-eventgrid/tests/test_eg_publisher_client_async.py @@ -16,8 +16,8 @@ from devtools_testutils import AzureMgmtTestCase, CachedResourceGroupPreparer from azure_devtools.scenario_tests import ReplayableTest -from azure.core.credentials import AzureKeyCredential -from azure.eventgrid import CloudEvent, EventGridEvent, CustomEvent ,EventGridSharedAccessSignatureCredential, generate_shared_access_signature +from azure.core.credentials import AzureKeyCredential, AzureSasCredential +from azure.eventgrid import CloudEvent, EventGridEvent, CustomEvent, generate_shared_access_signature from azure.eventgrid.aio import EventGridPublisherClient from eventgrid_preparer import ( @@ -205,7 +205,7 @@ async def test_send_cloud_event_dict(self, resource_group, eventgrid_topic, even async def test_send_signature_credential(self, resource_group, eventgrid_topic, eventgrid_topic_primary_key, eventgrid_topic_endpoint): expiration_date_utc = dt.datetime.now(UTC()) + timedelta(hours=1) signature = generate_shared_access_signature(eventgrid_topic_endpoint, eventgrid_topic_primary_key, expiration_date_utc) - credential = EventGridSharedAccessSignatureCredential(signature) + credential = AzureSasCredential(signature) client = EventGridPublisherClient(eventgrid_topic_endpoint, credential) eg_event = EventGridEvent( subject="sample", From 9fb29d9e304ea5c0c1053747c6c91f19087dca7b Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Thu, 14 Jan 2021 23:39:47 -0800 Subject: [PATCH 2/8] fix --- .../azure/eventgrid/_helpers.py | 5 +-- .../eventgrid/_signature_credential_policy.py | 35 +++++++++++++++++++ .../tests/eventgrid_preparer.py | 5 ++- ...client.test_send_signature_credential.yaml | 10 +++--- 4 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py index d52a4e9fc9f2..8833791dca2e 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_helpers.py @@ -12,8 +12,9 @@ except ImportError: from urllib2 import quote # type: ignore -from azure.core.pipeline.policies import AzureKeyCredentialPolicy, AzureSasCredentialPolicy +from azure.core.pipeline.policies import AzureKeyCredentialPolicy from azure.core.credentials import AzureKeyCredential, AzureSasCredential +from ._signature_credential_policy import EventGridSasCredentialPolicy from . import _constants as constants if TYPE_CHECKING: @@ -78,7 +79,7 @@ def _get_authentication_policy(credential): if isinstance(credential, AzureKeyCredential): authentication_policy = AzureKeyCredentialPolicy(credential=credential, name=constants.EVENTGRID_KEY_HEADER) if isinstance(credential, AzureSasCredential): - authentication_policy = AzureSasCredentialPolicy( + authentication_policy = EventGridSasCredentialPolicy( credential=credential, name=constants.EVENTGRID_TOKEN_HEADER ) diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py new file mode 100644 index 000000000000..0aebb27fddb1 --- /dev/null +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See LICENSE.txt in the project root for +# license information. +# ------------------------------------------------------------------------- + +from typing import Any, TYPE_CHECKING +import six + +from azure.core.pipeline.policies import SansIOHTTPPolicy + +if TYPE_CHECKING: + from azure.core.credentials import AzureSasCredential + + +class EventGridSasCredentialPolicy(SansIOHTTPPolicy): + """Adds a token header for the provided credential. + :param credential: The credential used to authenticate requests. + :type credential: ~azure.core.credentials.AzureSasCredential + :param str name: The name of the token header used for the credential. + :raises: ValueError or TypeError + """ + def __init__(self, credential, name, **kwargs): # pylint: disable=unused-argument + # type: (AzureSasCredential, str, Any) -> None + super(EventGridSasCredentialPolicy, self).__init__() + self._credential = credential + if not name: + raise ValueError("name can not be None or empty") + if not isinstance(name, six.string_types): + raise TypeError("name must be a string.") + self._name = name + + def on_request(self, request): + # Request must contain one of the following authorization signature: aeg-sas-token, aeg-sas-key + request.http_request.headers[self._name] = self._credential.signature diff --git a/sdk/eventgrid/azure-eventgrid/tests/eventgrid_preparer.py b/sdk/eventgrid/azure-eventgrid/tests/eventgrid_preparer.py index d56af2bcebca..52bb4ac64dd2 100644 --- a/sdk/eventgrid/azure-eventgrid/tests/eventgrid_preparer.py +++ b/sdk/eventgrid/azure-eventgrid/tests/eventgrid_preparer.py @@ -62,11 +62,10 @@ def create_resource(self, name, **kwargs): topic = Topic(location=self.parameter_location, tags=None, input_schema=CUSTOM_EVENT_SCHEMA, input_schema_mapping=CUSTOM_JSON_INPUT_SCHEMA_MAPPING) else: topic = Topic(location=self.parameter_location) - topic_operation = self.client.topics.create_or_update( + topic_operation = self.client.topics.begin_create_or_update( group.name, name, topic, - {} ) self.resource = topic_operation.result() key = self.client.topics.list_shared_access_keys(group.name, name) @@ -85,7 +84,7 @@ def create_resource(self, name, **kwargs): def remove_resource(self, name, **kwargs): if self.is_live: group = self._get_resource_group(**kwargs) - self.client.topics.delete(group.name, name, polling=False) + self.client.topics.begin_delete(group.name, name, polling=False) def _get_resource_group(self, **kwargs): try: diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_signature_credential.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_signature_credential.yaml index 2d22bedbdf7d..f4fa8a34d62f 100644 --- a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_signature_credential.yaml +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client.test_send_signature_credential.yaml @@ -1,8 +1,8 @@ interactions: - request: - body: '[{"id": "af14b28c-d479-4533-beb9-83c990482f29", "subject": "sample", "data": + body: '[{"id": "af4a62e7-c39a-4d15-809b-ff39e30e9919", "subject": "sample", "data": {"sample": "eventgridevent"}, "eventType": "Sample.EventGrid.Event", "eventTime": - "2020-10-01T23:05:33.235276Z", "dataVersion": "2.0"}]' + "2021-01-15T07:36:18.684481Z", "dataVersion": "2.0"}]' headers: Accept: - '*/*' @@ -15,9 +15,9 @@ interactions: Content-Type: - application/json; charset=utf-8 User-Agent: - - azsdk-python-eventgrid/2.0.0b1 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-eventgrid/2.0.0b5 Python/3.7.3 (Windows-10-10.0.18362-SP0) aeg-sas-token: - - r=https%3A%2F%2Feventgridtestdjwda35y4hv.westus-1.eventgrid.azure.net%2Fapi%2Fevents%3FapiVersion%3D2018-01-01&e=2020-10-02%2000%3A05%3A33.233284%2B00%3A00&s=0B7T2a3eV56nQhuNXp6VyBbV6vo7bD%2BAyJWAQcVy%2BGE%3D + - r=https%3A%2F%2Feventgridtestxxgaujwsgkd.westus-1.eventgrid.azure.net%2Fapi%2Fevents%3FapiVersion%3D2018-01-01&e=2021-01-15%2008%3A36%3A18.682541%2B00%3A00&s=uWcUItHS%2F%2B6URmVXHNZl9GL6nX%2FkBdELT71nXMqw4Qo%3D method: POST uri: https://eventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 response: @@ -29,7 +29,7 @@ interactions: content-length: - '0' date: - - Thu, 01 Oct 2020 23:05:33 GMT + - Fri, 15 Jan 2021 07:36:18 GMT server: - Microsoft-HTTPAPI/2.0 strict-transport-security: From 4e8e6a847add5adbedb3ebdb11e8658defd4f833 Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Thu, 14 Jan 2021 23:40:38 -0800 Subject: [PATCH 3/8] Update sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py --- .../azure/eventgrid/_signature_credential_policy.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py index 0aebb27fddb1..84a1f32bb409 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py @@ -1,8 +1,8 @@ -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See LICENSE.txt in the project root for -# license information. -# ------------------------------------------------------------------------- +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See LICENSE.txt in the project root for +# license information. +# ------------------------------------------------------------------------- from typing import Any, TYPE_CHECKING import six From bf436b7cc34a0822f9befb11c4a17b9012a05701 Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Thu, 14 Jan 2021 23:41:16 -0800 Subject: [PATCH 4/8] Update sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py --- .../azure/eventgrid/_signature_credential_policy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py index 84a1f32bb409..d3d7e33d4046 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_signature_credential_policy.py @@ -15,7 +15,7 @@ class EventGridSasCredentialPolicy(SansIOHTTPPolicy): """Adds a token header for the provided credential. - :param credential: The credential used to authenticate requests. + :param credential: The credential used to authenticate requests. :type credential: ~azure.core.credentials.AzureSasCredential :param str name: The name of the token header used for the credential. :raises: ValueError or TypeError From d9b6e772d2992948667e91c0521120f81c2adfc3 Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Fri, 15 Jan 2021 00:00:36 -0800 Subject: [PATCH 5/8] sample --- .../publish_with_shared_access_signature_sample.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/eventgrid/azure-eventgrid/samples/publish_samples/publish_with_shared_access_signature_sample.py b/sdk/eventgrid/azure-eventgrid/samples/publish_samples/publish_with_shared_access_signature_sample.py index 9d276e33dfeb..7e5ef234dfb1 100644 --- a/sdk/eventgrid/azure-eventgrid/samples/publish_samples/publish_with_shared_access_signature_sample.py +++ b/sdk/eventgrid/azure-eventgrid/samples/publish_samples/publish_with_shared_access_signature_sample.py @@ -20,7 +20,7 @@ import time from datetime import datetime, timedelta -from azure.core import AzureSasCredential +from azure.core.credentials import AzureSasCredential from azure.eventgrid import EventGridPublisherClient, CloudEvent, generate_shared_access_signature key = os.environ["CLOUD_ACCESS_KEY"] From cfeedf27f01b60d905970f71e6c7948ade26a5c2 Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Fri, 15 Jan 2021 07:57:01 -0800 Subject: [PATCH 6/8] changelog --- sdk/eventgrid/azure-eventgrid/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdk/eventgrid/azure-eventgrid/CHANGELOG.md b/sdk/eventgrid/azure-eventgrid/CHANGELOG.md index c5221b486c2f..a91286a9a598 100644 --- a/sdk/eventgrid/azure-eventgrid/CHANGELOG.md +++ b/sdk/eventgrid/azure-eventgrid/CHANGELOG.md @@ -2,6 +2,8 @@ ## 2.0.0b5 (Unreleased) + **Breaking Changes** + - `EventGridSharedAccessSignatureCredential` is deprecated in favor of `AzureSasCredential`. ## 2.0.0b4 (2020-11-11) From 4994c7f925a5ddd4d4ab23e8e60cb3e7b49702c4 Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Fri, 15 Jan 2021 09:31:11 -0800 Subject: [PATCH 7/8] test async --- ..._client_async.test_send_signature_credential.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_signature_credential.yaml b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_signature_credential.yaml index d1b95226cd01..5b3c5d0e1578 100644 --- a/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_signature_credential.yaml +++ b/sdk/eventgrid/azure-eventgrid/tests/recordings/test_eg_publisher_client_async.test_send_signature_credential.yaml @@ -1,17 +1,17 @@ interactions: - request: - body: '[{"id": "691b8784-90c3-4cd3-80b4-b1499e82db82", "subject": "sample", "data": + body: '[{"id": "852194a9-498e-4920-a46e-cccc21dca163", "subject": "sample", "data": {"sample": "eventgridevent"}, "eventType": "Sample.EventGrid.Event", "eventTime": - "2020-10-01T23:05:36.183371Z", "dataVersion": "2.0"}]' + "2021-01-15T17:30:11.435617Z", "dataVersion": "2.0"}]' headers: Content-Length: - '212' Content-Type: - application/json; charset=utf-8 User-Agent: - - azsdk-python-eventgridpublisherclient/2.0.0b1 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-eventgridpublisherclient/2.0.0b5 Python/3.7.3 (Windows-10-10.0.18362-SP0) aeg-sas-token: - - r=https%3A%2F%2Feventgridtestdjwda35y4hv.westus-1.eventgrid.azure.net%2Fapi%2Fevents%3FapiVersion%3D2018-01-01&e=2020-10-02%2000%3A05%3A36.182370%2B00%3A00&s=gI2ARl%2FpgFAcat%2BP3QnjbXGlrNxRdgDmzE%2Fjrq6zz9o%3D + - r=https%3A%2F%2Feventgridtestp6pvx54pxmb.westus-1.eventgrid.azure.net%2Fapi%2Fevents%3FapiVersion%3D2018-01-01&e=2021-01-15%2018%3A30%3A11.425606%2B00%3A00&s=mjb0sR0USJRQ%2BBqahbe6IXftmps%2Fxa0vZjkczyF4jMk%3D method: POST uri: https://eventgridtestegtopic.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 response: @@ -20,11 +20,11 @@ interactions: headers: api-supported-versions: '2018-01-01' content-length: '0' - date: Thu, 01 Oct 2020 23:05:36 GMT + date: Fri, 15 Jan 2021 17:30:11 GMT server: Microsoft-HTTPAPI/2.0 strict-transport-security: max-age=31536000; includeSubDomains status: code: 200 message: OK - url: https://eventgridtestdjwda35y4hv.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 + url: https://eventgridtestp6pvx54pxmb.westus-1.eventgrid.azure.net/api/events?api-version=2018-01-01 version: 1 From 1739bc15e9fa18e23339308e7543e0acf75c727d Mon Sep 17 00:00:00 2001 From: Rakshith Bhyravabhotla Date: Fri, 15 Jan 2021 09:33:00 -0800 Subject: [PATCH 8/8] Apply suggestions from code review --- .../azure-eventgrid/azure/eventgrid/_publisher_client.py | 2 +- .../azure/eventgrid/aio/_publisher_client_async.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_publisher_client.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_publisher_client.py index 7fe316f8f8e9..a6dd8f2d452a 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_publisher_client.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/_publisher_client.py @@ -62,7 +62,7 @@ class EventGridPublisherClient(object): :param str topic_hostname: The topic endpoint to send the events to. :param credential: The credential object used for authentication which implements SAS key authentication or SAS token authentication. - :type credential: ~azure.core.credentials.AzureKeyCredential or AzureSasCredential + :type credential: ~azure.core.credentials.AzureKeyCredential or ~azure.core.credentials.AzureSasCredential """ def __init__(self, topic_hostname, credential, **kwargs): diff --git a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/aio/_publisher_client_async.py b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/aio/_publisher_client_async.py index 3c8225f52f12..40974812c365 100644 --- a/sdk/eventgrid/azure-eventgrid/azure/eventgrid/aio/_publisher_client_async.py +++ b/sdk/eventgrid/azure-eventgrid/azure/eventgrid/aio/_publisher_client_async.py @@ -58,7 +58,7 @@ class EventGridPublisherClient(): :param str topic_hostname: The topic endpoint to send the events to. :param credential: The credential object used for authentication which implements SAS key authentication or SAS token authentication. - :type credential: ~azure.core.credentials.AzureKeyCredential or AzureSasCredential + :type credential: ~azure.core.credentials.AzureKeyCredential or ~azure.core.credentials.AzureSasCredential """ def __init__(