diff --git a/sdk/communication/azure-communication-administration/azure/communication/administration/__init__.py b/sdk/communication/azure-communication-administration/azure/communication/administration/__init__.py index ecd289cb703f..2864e79e5e5e 100644 --- a/sdk/communication/azure-communication-administration/azure/communication/administration/__init__.py +++ b/sdk/communication/azure-communication-administration/azure/communication/administration/__init__.py @@ -6,7 +6,6 @@ from ._communication_identity_client import CommunicationIdentityClient from ._phone_number_administration_client import PhoneNumberAdministrationClient -from ._polling import PhoneNumberPolling from ._identity._generated.models import ( CommunicationTokenRequest, @@ -17,7 +16,6 @@ AcquiredPhoneNumber, AcquiredPhoneNumbers, AreaCodes, - CreateSearchOptions, CreateSearchResponse, LocationOptionsQuery, LocationOptionsResponse, @@ -33,7 +31,7 @@ ReleaseResponse, UpdateNumberCapabilitiesResponse, UpdatePhoneNumberCapabilitiesResponse, - SearchStatus + CreateSearchOptions ) from ._shared.models import ( @@ -45,7 +43,6 @@ __all__ = [ 'CommunicationIdentityClient', 'PhoneNumberAdministrationClient', - 'PhoneNumberPolling', # from _identity 'CommunicationTokenRequest', @@ -55,7 +52,6 @@ 'AcquiredPhoneNumber', 'AcquiredPhoneNumbers', 'AreaCodes', - 'CreateSearchOptions', 'CreateSearchResponse', 'LocationOptionsQuery', 'LocationOptionsResponse', @@ -63,15 +59,15 @@ 'NumberUpdateCapabilities', 'PhoneNumberCountries', 'PhoneNumberEntities', - 'PhoneNumberSearch', 'PhoneNumberRelease', + 'PhoneNumberSearch', 'PhonePlanGroups', 'PhonePlansResponse', 'PstnConfiguration', 'ReleaseResponse', - 'SearchStatus', 'UpdateNumberCapabilitiesResponse', 'UpdatePhoneNumberCapabilitiesResponse', + 'CreateSearchOptions', # from _shared 'CommunicationUser', diff --git a/sdk/communication/azure-communication-administration/azure/communication/administration/_phone_number_administration_client.py b/sdk/communication/azure-communication-administration/azure/communication/administration/_phone_number_administration_client.py index ee393fac84ae..edc0a5657235 100644 --- a/sdk/communication/azure-communication-administration/azure/communication/administration/_phone_number_administration_client.py +++ b/sdk/communication/azure-communication-administration/azure/communication/administration/_phone_number_administration_client.py @@ -6,8 +6,6 @@ # ------------------------------------ from azure.core.tracing.decorator import distributed_trace from azure.core.paging import ItemPaged -from azure.core.polling import LROPoller -from ._polling import PhoneNumberPolling from ._phonenumber._generated._phone_number_administration_service\ import PhoneNumberAdministrationService as PhoneNumberAdministrationClientGen @@ -15,6 +13,7 @@ from ._phonenumber._generated.models import ( AcquiredPhoneNumbers, AreaCodes, + CreateSearchResponse, LocationOptionsResponse, NumberConfigurationResponse, NumberUpdateCapabilities, @@ -26,7 +25,6 @@ PhonePlansResponse, PstnConfiguration, ReleaseResponse, - SearchStatus, UpdateNumberCapabilitiesResponse, UpdatePhoneNumberCapabilitiesResponse ) @@ -407,53 +405,21 @@ def get_search_by_id( ) @distributed_trace - def begin_create_search( + def create_search( self, **kwargs # type: Any ): - # type: (...) -> LROPoller - """Begins creating a phone number search. - Caller must provide either body, or continuation_token keywords to use the method. - If both body and continuation_token are specified, only continuation_token will be used to - restart a poller from a saved state, and keyword body will be ignored. + # type: (...) -> CreateSearchResponse + """Creates a phone number search. :keyword azure.communication.administration.CreateSearchOptions body: - A parameter for defining the search options. - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :rtype: ~azure.core.polling.LROPoller[~azure.communication.administration.PhoneNumberSearch] + An optional parameter for defining the search options. + The default is None. + :rtype: ~azure.communication.administration.CreateSearchResponse """ - cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] - - search_polling = PhoneNumberPolling( - is_terminated=lambda status: status in [ - SearchStatus.Reserved, - SearchStatus.Expired, - SearchStatus.Success, - SearchStatus.Cancelled, - SearchStatus.Error - ] - ) - - if cont_token is not None: - return LROPoller.from_continuation_token( - polling_method=search_polling, - continuation_token=cont_token, - client=self._phone_number_administration_client.phone_number_administration - ) - - if "body" not in kwargs: - raise ValueError("Either kwarg 'body' or 'continuation_token' needs to be specified") - - create_search_response = self._phone_number_administration_client.phone_number_administration.create_search( + return self._phone_number_administration_client.phone_number_administration.create_search( **kwargs ) - initial_state = self._phone_number_administration_client.phone_number_administration.get_search_by_id( - search_id=create_search_response.search_id - ) - return LROPoller(client=self._phone_number_administration_client.phone_number_administration, - initial_response=initial_state, - deserialization_callback=None, - polling_method=search_polling) @distributed_trace def list_all_searches( @@ -474,96 +440,37 @@ def list_all_searches( ) @distributed_trace - def begin_cancel_search( + def cancel_search( self, + search_id, # type: str **kwargs # type: Any ): - # type: (...) -> LROPoller - """Begins the phone number search cancellation. - Caller must provide either search_id, or continuation_token keywords to use the method. - If both body and continuation_token are specified, only continuation_token will be used to - restart a poller from a saved state, and keyword search_id will be ignored. - - :keyword str search_id: The search id to be canceled. - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :rtype: ~azure.core.polling.LROPoller[~azure.communication.administration.PhoneNumberSearch] - """ - cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] - - search_polling = PhoneNumberPolling( - is_terminated=lambda status: status in [ - SearchStatus.Expired, - SearchStatus.Cancelled, - SearchStatus.Error - ] - ) - - if cont_token is not None: - return LROPoller.from_continuation_token( - polling_method=search_polling, - continuation_token=cont_token, - client=self._phone_number_administration_client.phone_number_administration - ) - - search_id = kwargs.pop('search_id', None) # type: str - if search_id is None: - raise ValueError("Either kwarg 'search_id' or 'continuation_token' needs to be specified") + # type: (...) -> None + """Cancels the search. This means existing numbers in the search will be made available. - self._phone_number_administration_client.phone_number_administration.cancel_search( + :param search_id: The search id to be canceled. + :type search_id: str + :rtype: None + """ + return self._phone_number_administration_client.phone_number_administration.cancel_search( search_id, **kwargs ) - initial_state = self._phone_number_administration_client.phone_number_administration.get_search_by_id( - search_id=search_id - ) - return LROPoller(client=self._phone_number_administration_client.phone_number_administration, - initial_response=initial_state, - deserialization_callback=None, - polling_method=search_polling) @distributed_trace - def begin_purchase_search( - self, - **kwargs # type: Any + def purchase_search( + self, + search_id, # type: str + **kwargs # type: Any ): - # type: (...) -> LROPoller - """Begins the phone number search purchase. - Caller must provide either search_id, or continuation_token keywords to use the method. - If both body and continuation_token are specified, only continuation_token will be used to - restart a poller from a saved state, and keyword search_id will be ignored. - - :keyword str search_id: The search id to be purchased. - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :rtype: ~azure.core.polling.LROPoller[~azure.communication.administration.PhoneNumberSearch] - """ - cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] - - search_polling = PhoneNumberPolling( - is_terminated=lambda status: status in [ - SearchStatus.Success, - SearchStatus.Expired, - SearchStatus.Cancelled, - SearchStatus.Error - ] - ) - - if cont_token is not None: - return LROPoller.from_continuation_token( - polling_method=search_polling, - continuation_token=cont_token, - client=self._phone_number_administration_client.phone_number_administration - ) - - search_id = kwargs.pop('search_id') # type: str + # type: (...) -> None + """Purchases the phone number search. - self._phone_number_administration_client.phone_number_administration.purchase_search( + :param search_id: The search id to be purchased. + :type search_id: str + :rtype: None + """ + return self._phone_number_administration_client.phone_number_administration.purchase_search( search_id, **kwargs ) - initial_state = self._phone_number_administration_client.phone_number_administration.get_search_by_id( - search_id=search_id - ) - return LROPoller(client=self._phone_number_administration_client.phone_number_administration, - initial_response=initial_state, - deserialization_callback=None, - polling_method=search_polling) diff --git a/sdk/communication/azure-communication-administration/azure/communication/administration/_polling.py b/sdk/communication/azure-communication-administration/azure/communication/administration/_polling.py deleted file mode 100644 index 05555abc171e..000000000000 --- a/sdk/communication/azure-communication-administration/azure/communication/administration/_polling.py +++ /dev/null @@ -1,76 +0,0 @@ -# pylint: disable=W0231 -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -------------------------------------------------------------------------- -import base64 -import time -from typing import Union -from functools import partial -import pickle - -from azure.core.polling import ( - PollingMethod -) -from ._phonenumber._generated.models import ( - PhoneNumberSearch, - PhoneNumberRelease -) - -class PhoneNumberPolling(PollingMethod): - def __init__(self, is_terminated, interval=5): - self._response = None - self._client = None - self._query_status = None - self._is_terminated = is_terminated - self._polling_interval = interval - - def _update_status(self): - # type: () -> None - if self._query_status is None: - raise Exception("this poller has not been initialized") - self._response = self._query_status() - - def initialize(self, client, initial_response, _): - # type: (Any, Any, Callable) -> None - self._client = client - self._response = initial_response - self._query_status = partial(self._client.get_search_by_id, search_id=initial_response.search_id) - - def run(self): - # type: () -> None - while not self.finished(): - self._update_status() - if not self.finished(): - time.sleep(self._polling_interval) - - def finished(self): - # type: () -> bool - if self._response.status is None: - return False - return self._is_terminated(self._response.status) - - def resource(self): - # type: () -> Union[PhoneNumberSearch, PhoneNumberRelease] - if not self.finished(): - return None - return self._response - - def status(self): - # type: () -> str - return self._response.status - - def get_continuation_token(self): - # type() -> str - return base64.b64encode(pickle.dumps(self._response)).decode('ascii') - - @classmethod - def from_continuation_token(cls, continuation_token, **kwargs): - # type(str, Any) -> Tuple - try: - client = kwargs["client"] - except KeyError: - raise ValueError("Kwarg 'client' needs to be specified") - initial_response = pickle.loads(base64.b64decode(continuation_token)) # nosec - return client, initial_response, None diff --git a/sdk/communication/azure-communication-administration/azure/communication/administration/aio/__init__.py b/sdk/communication/azure-communication-administration/azure/communication/administration/aio/__init__.py index dc793b7fa747..f647dfa8f506 100644 --- a/sdk/communication/azure-communication-administration/azure/communication/administration/aio/__init__.py +++ b/sdk/communication/azure-communication-administration/azure/communication/administration/aio/__init__.py @@ -1,9 +1,7 @@ from ._communication_identity_client_async import CommunicationIdentityClient from ._phone_number_administration_client_async import PhoneNumberAdministrationClient -from ._polling_async import PhoneNumberPollingAsync __all__ = [ 'CommunicationIdentityClient', - 'PhoneNumberAdministrationClient', - 'PhoneNumberPollingAsync' + 'PhoneNumberAdministrationClient' ] diff --git a/sdk/communication/azure-communication-administration/azure/communication/administration/aio/_phone_number_administration_client_async.py b/sdk/communication/azure-communication-administration/azure/communication/administration/aio/_phone_number_administration_client_async.py index 8cfd19cb7a0f..50637b8ce729 100644 --- a/sdk/communication/azure-communication-administration/azure/communication/administration/aio/_phone_number_administration_client_async.py +++ b/sdk/communication/azure-communication-administration/azure/communication/administration/aio/_phone_number_administration_client_async.py @@ -5,14 +5,10 @@ # Licensed under the MIT License. # ------------------------------------ from typing import Dict, List - from azure.core.async_paging import AsyncItemPaged from azure.core.tracing.decorator import distributed_trace from azure.core.tracing.decorator_async import distributed_trace_async -from azure.core.polling import AsyncLROPoller - from .._version import SDK_MONIKER -from ._polling_async import PhoneNumberPollingAsync from .._phonenumber._generated.aio._phone_number_administration_service_async\ import PhoneNumberAdministrationService as PhoneNumberAdministrationClientGen @@ -20,6 +16,7 @@ from .._phonenumber._generated.models import ( AcquiredPhoneNumbers, AreaCodes, + CreateSearchResponse, LocationOptionsResponse, NumberConfigurationResponse, NumberUpdateCapabilities, @@ -31,7 +28,6 @@ PhonePlansResponse, PstnConfiguration, ReleaseResponse, - SearchStatus, UpdateNumberCapabilitiesResponse, UpdatePhoneNumberCapabilitiesResponse ) @@ -416,54 +412,21 @@ async def get_search_by_id( ) @distributed_trace_async - async def begin_create_search( + async def create_search( self, **kwargs # type: Any ): - # type: (...) -> AsyncLROPoller - """Begins creating a phone number search. - Caller must provide either body, or continuation_token keywords to use the method. - If both body and continuation_token are specified, only continuation_token will be used to - restart a poller from a saved state, and keyword body will be ignored. + # type: (...) -> CreateSearchResponse + """Creates a phone number search. :keyword azure.communication.administration.CreateSearchOptions body: - A parameter for defining the search options. - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.communication.administration.PhoneNumberSearch] + An optional parameter for defining the search options. + The default is None. + :rtype: ~azure.communication.administration.CreateSearchResponse """ - cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] - - search_polling = PhoneNumberPollingAsync( - is_terminated=lambda status: status in [ - SearchStatus.Reserved, - SearchStatus.Expired, - SearchStatus.Success, - SearchStatus.Cancelled, - SearchStatus.Error - ] - ) - - if cont_token is not None: - return AsyncLROPoller.from_continuation_token( - polling_method=search_polling, - continuation_token=cont_token, - client=self._phone_number_administration_client.phone_number_administration - ) - - if "body" not in kwargs: - raise ValueError("Either kwarg 'body' or 'continuation_token' needs to be specified") - - create_search_response = await self._phone_number_administration_client.\ - phone_number_administration.create_search( - **kwargs - ) - initial_state = await self._phone_number_administration_client.phone_number_administration.get_search_by_id( - search_id=create_search_response.search_id + return await self._phone_number_administration_client.phone_number_administration.create_search( + **kwargs ) - return AsyncLROPoller(client=self._phone_number_administration_client.phone_number_administration, - initial_response=initial_state, - deserialization_callback=None, - polling_method=search_polling) @distributed_trace def list_all_searches( @@ -484,102 +447,40 @@ def list_all_searches( ) @distributed_trace_async - async def begin_cancel_search( + async def cancel_search( self, + search_id, # type: str **kwargs # type: Any ): - # type: (...) -> AsyncLROPoller - """Begins the phone number search cancellation. - Caller must provide either search_id, or continuation_token keywords to use the method. - If both body and continuation_token are specified, only continuation_token will be used to - restart a poller from a saved state, and keyword search_id will be ignored. - - :keyword str search_id: The search id to be canceled. - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.communication.administration.PhoneNumberSearch] - """ - cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] - - search_polling = PhoneNumberPollingAsync( - is_terminated=lambda status: status in [ - SearchStatus.Expired, - SearchStatus.Cancelled, - SearchStatus.Error - ] - ) - - if cont_token is not None: - return AsyncLROPoller.from_continuation_token( - polling_method=search_polling, - continuation_token=cont_token, - client=self._phone_number_administration_client.phone_number_administration - ) - - search_id = kwargs.pop('search_id', None) # type: str - if search_id is None: - raise ValueError("Either kwarg 'search_id' or 'continuation_token' needs to be specified") + # type: (...) -> None + """Cancels the search. This means existing numbers in the search will be made available. - await self._phone_number_administration_client.phone_number_administration.cancel_search( + :param search_id: The search id to be canceled. + :type search_id: str + :rtype: None + """ + return await self._phone_number_administration_client.phone_number_administration.cancel_search( search_id, **kwargs ) - initial_state = await self._phone_number_administration_client.phone_number_administration.get_search_by_id( - search_id=search_id - ) - return AsyncLROPoller(client=self._phone_number_administration_client.phone_number_administration, - initial_response=initial_state, - deserialization_callback=None, - polling_method=search_polling) @distributed_trace_async - async def begin_purchase_search( + async def purchase_search( self, + search_id, # type: str **kwargs # type: Any ): + # type: (...) -> None + """Purchases the phone number search. - # type: (...) -> AsyncLROPoller - """Begins the phone number search purchase. - Caller must provide either search_id, or continuation_token keywords to use the method. - If both body and continuation_token are specified, only continuation_token will be used to - restart a poller from a saved state, and keyword search_id will be ignored. - - :keyword str search_id: The search id to be purchased. - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.communication.administration.PhoneNumberSearch] + :param search_id: The search id to be purchased. + :type search_id: str + :rtype: None """ - cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] - - search_polling = PhoneNumberPollingAsync( - is_terminated=lambda status: status in [ - SearchStatus.Success, - SearchStatus.Expired, - SearchStatus.Cancelled, - SearchStatus.Error - ] - ) - - if cont_token is not None: - return AsyncLROPoller.from_continuation_token( - polling_method=search_polling, - continuation_token=cont_token, - client=self._phone_number_administration_client.phone_number_administration - ) - - search_id = kwargs.pop('search_id', None) # type: str - if search_id is None: - raise ValueError("Either kwarg 'search_id' or 'continuation_token' needs to be specified") - - await self._phone_number_administration_client.phone_number_administration.purchase_search( + return await self._phone_number_administration_client.phone_number_administration.purchase_search( search_id, **kwargs ) - initial_state = await self._phone_number_administration_client.phone_number_administration.get_search_by_id( - search_id=search_id - ) - return AsyncLROPoller(client=self._phone_number_administration_client.phone_number_administration, - initial_response=initial_state, - deserialization_callback=None, - polling_method=search_polling) async def __aenter__(self) -> "PhoneNumberAdministrationClient": await self._phone_number_administration_client.__aenter__() diff --git a/sdk/communication/azure-communication-administration/azure/communication/administration/aio/_polling_async.py b/sdk/communication/azure-communication-administration/azure/communication/administration/aio/_polling_async.py deleted file mode 100644 index 06000f10040b..000000000000 --- a/sdk/communication/azure-communication-administration/azure/communication/administration/aio/_polling_async.py +++ /dev/null @@ -1,76 +0,0 @@ -# pylint: disable=W0231 -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -------------------------------------------------------------------------- -import asyncio -from typing import Union -import base64 -from functools import partial - -from azure.core.polling import AsyncPollingMethod - -from .._phonenumber._generated.models import ( - PhoneNumberSearch, - PhoneNumberRelease -) - -class PhoneNumberPollingAsync(AsyncPollingMethod): - def __init__(self, is_terminated, interval=5): - self._response = None - self._client = None - self._query_status = None - self._is_terminated = is_terminated - self._polling_interval = interval - - async def _update_status(self): - # type: () -> None - if self._query_status is None: - raise Exception("this poller has not been initialized") - self._response = await self._query_status() - - def initialize(self, client, initial_response, _): - # type: (Any, Any, Callable) -> None - self._client = client - self._response = initial_response - self._query_status = partial(self._client.get_search_by_id, search_id=initial_response.search_id) - - async def run(self): - # type: () -> None - while not self.finished(): - await self._update_status() - if not self.finished(): - await asyncio.sleep(self._polling_interval) - - def finished(self): - # type: () -> bool - if self._response.status is None: - return False - return self._is_terminated(self._response.status) - - def resource(self): - # type: () -> Union[PhoneNumberSearch, PhoneNumberRelease] - if not self.finished(): - return None - return self._response - - def status(self): - # type: () -> str - return self._response.status - - def get_continuation_token(self): - # type() -> str - import pickle - return base64.b64encode(pickle.dumps(self._response)).decode('ascii') - - @classmethod - def from_continuation_token(cls, continuation_token, **kwargs): - # type(str, Any) -> Tuple - try: - client = kwargs["client"] - except KeyError: - raise ValueError("Kwarg 'client' needs to be specified") - import pickle - initial_response = pickle.loads(base64.b64decode(continuation_token)) # nosec - return client, initial_response, None