diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/__init__.py b/sdk/storage/azure-storage-blob/azure/storage/blob/__init__.py index 8bc9c75842a2..a9777df8d17e 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/__init__.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/__init__.py @@ -93,7 +93,6 @@ def upload_blob_to_url( blob_url, # type: str data, # type: Union[Iterable[AnyStr], IO[AnyStr]] - overwrite=False, # type: bool max_concurrency=1, # type: int encoding='UTF-8', # type: str credential=None, # type: Any @@ -124,7 +123,6 @@ def upload_blob_to_url( return client.upload_blob( data=data, blob_type=BlobType.BlockBlob, - overwrite=overwrite, max_concurrency=max_concurrency, encoding=encoding, **kwargs) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/blob_client_async.py b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/blob_client_async.py index 9f2c3da5df35..4d53468973f3 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/blob_client_async.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/blob_client_async.py @@ -102,7 +102,6 @@ def __init__( blob=None, # type: Optional[Union[str, BlobProperties]] snapshot=None, # type: Optional[Union[str, Dict[str, Any]]] credential=None, # type: Optional[Any] - loop=None, # type: Any **kwargs # type: Any ): # type: (...) -> None @@ -113,10 +112,9 @@ def __init__( blob=blob, snapshot=snapshot, credential=credential, - loop=loop, **kwargs) - self._client = AzureBlobStorage(url=self.url, pipeline=self._pipeline, loop=loop) - self._loop = loop + self._client = AzureBlobStorage(url=self.url, pipeline=self._pipeline) + self._loop = kwargs.get('loop', None) @distributed_trace_async async def get_account_information(self, **kwargs): # type: ignore @@ -138,12 +136,8 @@ async def get_account_information(self, **kwargs): # type: ignore async def upload_blob( self, data, # type: Union[Iterable[AnyStr], IO[AnyStr]] blob_type=BlobType.BlockBlob, # type: Union[str, BlobType] - overwrite=False, # type: bool length=None, # type: Optional[int] metadata=None, # type: Optional[Dict[str, str]] - content_settings=None, # type: Optional[ContentSettings] - validate_content=False, # type: Optional[bool] - max_concurrency=1, # type: int **kwargs ): # type: (...) -> Any @@ -242,12 +236,8 @@ async def upload_blob( options = self._upload_blob_options( data, blob_type=blob_type, - overwrite=overwrite, length=length, metadata=metadata, - content_settings=content_settings, - validate_content=validate_content, - max_concurrency=max_concurrency, **kwargs) if blob_type == BlobType.BlockBlob: return await upload_block_blob(**options) @@ -256,8 +246,8 @@ async def upload_blob( return await upload_append_blob(**options) @distributed_trace_async - async def download_blob(self, offset=None, length=None, validate_content=False, **kwargs): - # type: (Optional[int], Optional[int], bool, Any) -> Iterable[bytes] + async def download_blob(self, offset=None, length=None, **kwargs): + # type: (Optional[int], Optional[int], Any) -> Iterable[bytes] """Downloads a blob to a stream with automatic chunking. :param int offset: @@ -324,7 +314,6 @@ async def download_blob(self, offset=None, length=None, validate_content=False, options = self._download_blob_options( offset=offset, length=length, - validate_content=validate_content, **kwargs) extra_properties = { 'name': self.blob_name, @@ -601,7 +590,6 @@ async def set_blob_metadata(self, metadata=None, **kwargs): async def create_page_blob( # type: ignore self, size, # type: int content_settings=None, # type: Optional[ContentSettings] - sequence_number=None, # type: Optional[int] metadata=None, # type: Optional[Dict[str, str]] premium_page_blob_tier=None, # type: Optional[Union[str, PremiumPageBlobTier]] **kwargs @@ -664,7 +652,6 @@ async def create_page_blob( # type: ignore options = self._create_page_blob_options( size, content_settings=content_settings, - sequence_number=sequence_number, metadata=metadata, premium_page_blob_tier=premium_page_blob_tier, **kwargs) @@ -1079,7 +1066,6 @@ async def stage_block( self, block_id, # type: str data, # type: Union[Iterable[AnyStr], IO[AnyStr]] length=None, # type: Optional[int] - validate_content=False, # type: Optional[bool] **kwargs ): # type: (...) -> None @@ -1119,7 +1105,6 @@ async def stage_block( block_id, data, length=length, - validate_content=validate_content, **kwargs) try: await self._client.block_blob.stage_block(**options) @@ -1212,7 +1197,6 @@ async def commit_block_list( # type: ignore self, block_list, # type: List[BlobBlock] content_settings=None, # type: Optional[ContentSettings] metadata=None, # type: Optional[Dict[str, str]] - validate_content=False, # type: Optional[bool] **kwargs ): # type: (...) -> Dict[str, Union[str, datetime]] @@ -1275,7 +1259,6 @@ async def commit_block_list( # type: ignore block_list, content_settings=content_settings, metadata=metadata, - validate_content=validate_content, **kwargs) try: return await self._client.block_blob.commit_block_list(**options) # type: ignore @@ -1498,7 +1481,6 @@ async def upload_page( # type: ignore start_range, # type: int end_range, # type: int length=None, # type: Optional[int] - validate_content=False, # type: Optional[bool] **kwargs ): # type: (...) -> Dict[str, Union[str, datetime]] @@ -1576,7 +1558,6 @@ async def upload_page( # type: ignore start_range=start_range, end_range=end_range, length=length, - validate_content=validate_content, **kwargs) try: return await self._client.page_blob.upload_pages(**options) # type: ignore @@ -1588,7 +1569,6 @@ async def upload_pages_from_url(self, source_url, # type: str range_start, # type: int range_end, # type: int source_range_start, # type: int - source_content_md5=None, # type: Optional[bytes] **kwargs ): # type: (...) -> Dict[str, Any] @@ -1680,7 +1660,6 @@ async def upload_pages_from_url(self, source_url, # type: str range_start=range_start, range_end=range_end, source_range_start=source_range_start, - source_content_md5=source_content_md5, **kwargs ) try: @@ -1756,9 +1735,6 @@ async def clear_page(self, start_range, end_range, **kwargs): async def append_block( # type: ignore self, data, # type: Union[AnyStr, Iterable[AnyStr], IO[AnyStr]] length=None, # type: Optional[int] - validate_content=False, # type: Optional[bool] - maxsize_condition=None, # type: Optional[int] - appendpos_condition=None, # type: Optional[int] **kwargs ): # type: (...) -> Dict[str, Union[str, datetime, int]] @@ -1827,9 +1803,6 @@ async def append_block( # type: ignore options = self._append_block_options( data, length=length, - validate_content=validate_content, - maxsize_condition=maxsize_condition, - appendpos_condition=appendpos_condition, **kwargs ) try: @@ -1841,9 +1814,6 @@ async def append_block( # type: ignore async def append_block_from_url(self, copy_source_url, # type: str source_range_start=None, # type Optional[int] source_range_end=None, # type Optional[int] - source_content_md5=None, # type: Optional[bytearray] - maxsize_condition=None, # type: Optional[int] - appendpos_condition=None, # type: Optional[int] **kwargs): # type: (...) -> Dict[str, Union[str, datetime, int]] """ @@ -1928,9 +1898,6 @@ async def append_block_from_url(self, copy_source_url, # type: str copy_source_url, source_range_start=source_range_start, source_range_end=source_range_end, - source_content_md5=source_content_md5, - maxsize_condition=maxsize_condition, - appendpos_condition=appendpos_condition, **kwargs ) try: diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/blob_service_client_async.py b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/blob_service_client_async.py index 78371f55a79a..35187ca3fab2 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/blob_service_client_async.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/blob_service_client_async.py @@ -100,7 +100,6 @@ class BlobServiceClient(AsyncStorageAccountHostsMixin, BlobServiceClientBase): def __init__( self, account_url, # type: str credential=None, # type: Optional[Any] - loop=None, # type: Any **kwargs # type: Any ): # type: (...) -> None @@ -108,15 +107,13 @@ def __init__( super(BlobServiceClient, self).__init__( account_url, credential=credential, - loop=loop, **kwargs) - self._client = AzureBlobStorage(url=self.url, pipeline=self._pipeline, loop=loop) - self._loop = loop + self._client = AzureBlobStorage(url=self.url, pipeline=self._pipeline) + self._loop = kwargs.get('loop', None) @distributed_trace_async async def get_user_delegation_key(self, key_start_time, # type: datetime key_expiry_time, # type: datetime - timeout=None, # type: Optional[int] **kwargs # type: Any ): # type: (datetime, datetime, Optional[int]) -> UserDelegationKey @@ -134,6 +131,7 @@ async def get_user_delegation_key(self, key_start_time, # type: datetime :rtype: ~azure.storage.blob._shared.models.UserDelegationKey """ key_info = KeyInfo(start=_to_utc_datetime(key_start_time), expiry=_to_utc_datetime(key_expiry_time)) + timeout = kwargs.pop('timeout', None) try: user_delegation_key = await self._client.service.get_user_delegation_key(key_info=key_info, timeout=timeout, @@ -169,8 +167,8 @@ async def get_account_information(self, **kwargs): # type: ignore process_storage_error(error) @distributed_trace_async - async def get_service_stats(self, timeout=None, **kwargs): # type: ignore - # type: (Optional[int], **Any) -> Dict[str, Any] + async def get_service_stats(self, **kwargs): # type: ignore + # type: (Any) -> Dict[str, Any] """Retrieves statistics related to replication for the Blob service. It is only available when read-access geo-redundant replication is enabled for @@ -203,6 +201,7 @@ async def get_service_stats(self, timeout=None, **kwargs): # type: ignore :dedent: 8 :caption: Getting service stats for the blob service. """ + timeout = kwargs.pop('timeout', None) try: return await self._client.service.get_statistics( # type: ignore timeout=timeout, use_location=LocationMode.SECONDARY, **kwargs) @@ -210,8 +209,8 @@ async def get_service_stats(self, timeout=None, **kwargs): # type: ignore process_storage_error(error) @distributed_trace_async - async def get_service_properties(self, timeout=None, **kwargs): - # type: (Optional[int], Any) -> Dict[str, Any] + async def get_service_properties(self, **kwargs): + # type: (Any) -> Dict[str, Any] """Gets the properties of a storage account's Blob service, including Azure Storage Analytics. @@ -228,6 +227,7 @@ async def get_service_properties(self, timeout=None, **kwargs): :dedent: 8 :caption: Getting service properties for the blob service. """ + timeout = kwargs.pop('timeout', None) try: return await self._client.service.get_properties(timeout=timeout, **kwargs) except StorageErrorException as error: @@ -242,7 +242,6 @@ async def set_service_properties( target_version=None, # type: Optional[str] delete_retention_policy=None, # type: Optional[RetentionPolicy] static_website=None, # type: Optional[StaticWebsite] - timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> None @@ -306,6 +305,7 @@ async def set_service_properties( delete_retention_policy=delete_retention_policy, static_website=static_website ) + timeout = kwargs.pop('timeout', None) try: await self._client.service.set_properties(props, timeout=timeout, **kwargs) except StorageErrorException as error: @@ -315,8 +315,6 @@ async def set_service_properties( def list_containers( self, name_starts_with=None, # type: Optional[str] include_metadata=False, # type: Optional[bool] - results_per_page=None, # type: Optional[int] - timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> AsyncItemPaged[ContainerProperties] @@ -349,6 +347,8 @@ def list_containers( :caption: Listing the containers in the blob service. """ include = 'metadata' if include_metadata else None + timeout = kwargs.pop('timeout', None) + results_per_page = kwargs.pop('results_per_page', None) command = functools.partial( self._client.service.list_containers_segment, prefix=name_starts_with, @@ -367,7 +367,6 @@ async def create_container( self, name, # type: str metadata=None, # type: Optional[Dict[str, str]] public_access=None, # type: Optional[Union[PublicAccess, str]] - timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> ContainerClient @@ -399,6 +398,7 @@ async def create_container( :caption: Creating a container in the blob service. """ container = self.get_container_client(name) + timeout = kwargs.pop('timeout', None) kwargs.setdefault('merge_span', True) await container.create_container( metadata=metadata, public_access=public_access, timeout=timeout, **kwargs) @@ -408,7 +408,6 @@ async def create_container( async def delete_container( self, container, # type: Union[ContainerProperties, str] lease=None, # type: Optional[Union[LeaseClient, str]] - timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> None @@ -461,6 +460,7 @@ async def delete_container( """ container = self.get_container_client(container) # type: ignore kwargs.setdefault('merge_span', True) + timeout = kwargs.pop('timeout', None) await container.delete_container( # type: ignore lease=lease, timeout=timeout, diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/container_client_async.py b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/container_client_async.py index 2c91c0357d9a..d225dc76f9cb 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/container_client_async.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/container_client_async.py @@ -105,7 +105,6 @@ def __init__( self, container_url, # type: str container=None, # type: Optional[Union[ContainerProperties, str]] credential=None, # type: Optional[Any] - loop=None, # type: Any **kwargs # type: Any ): # type: (...) -> None @@ -114,14 +113,13 @@ def __init__( container_url, container=container, credential=credential, - loop=loop, **kwargs) - self._client = AzureBlobStorage(url=self.url, pipeline=self._pipeline, loop=loop) - self._loop = loop + self._client = AzureBlobStorage(url=self.url, pipeline=self._pipeline) + self._loop = kwargs.get('loop', None) @distributed_trace_async - async def create_container(self, metadata=None, public_access=None, timeout=None, **kwargs): - # type: (Optional[Dict[str, str]], Optional[Union[PublicAccess, str]], Optional[int], **Any) -> None + async def create_container(self, metadata=None, public_access=None, **kwargs): + # type: (Optional[Dict[str, str]], Optional[Union[PublicAccess, str]], **Any) -> None """ Creates a new container under the specified account. If the container with the same name already exists, the operation fails. @@ -147,6 +145,7 @@ async def create_container(self, metadata=None, public_access=None, timeout=None """ headers = kwargs.pop('headers', {}) headers.update(add_metadata_headers(metadata)) # type: ignore + timeout = kwargs.pop('timeout', None) try: return await self._client.container.create( # type: ignore timeout=timeout, @@ -159,11 +158,8 @@ async def create_container(self, metadata=None, public_access=None, timeout=None @distributed_trace_async async def delete_container( - self, lease=None, # type: Optional[Union[LeaseClient, str]] - timeout=None, # type: Optional[int] - **kwargs - ): - # type: (...) -> None + self, **kwargs): + # type: (Any) -> None """ Marks the specified container for deletion. The container and any blobs contained within it are later deleted during garbage collection. @@ -206,12 +202,14 @@ async def delete_container( :dedent: 12 :caption: Delete a container. """ + lease = kwargs.pop('lease', None) access_conditions = get_access_conditions(lease) mod_conditions = ModifiedAccessConditions( if_modified_since=kwargs.pop('if_modified_since', None), if_unmodified_since=kwargs.pop('if_unmodified_since', None), if_match=kwargs.pop('if_match', None), if_none_match=kwargs.pop('if_none_match', None)) + timeout = kwargs.pop('timeout', None) try: await self._client.container.delete( timeout=timeout, @@ -225,7 +223,6 @@ async def delete_container( async def acquire_lease( self, lease_duration=-1, # type: int lease_id=None, # type: Optional[str] - timeout=None, # type: Optional[int] **kwargs): # type: (...) -> LeaseClient """ @@ -278,6 +275,7 @@ async def acquire_lease( """ lease = LeaseClient(self, lease_id=lease_id) # type: ignore kwargs.setdefault('merge_span', True) + timeout = kwargs.pop('timeout', None) await lease.acquire(lease_duration=lease_duration, timeout=timeout, **kwargs) return lease @@ -298,8 +296,8 @@ async def get_account_information(self, **kwargs): # type: ignore process_storage_error(error) @distributed_trace_async - async def get_container_properties(self, lease=None, timeout=None, **kwargs): - # type: (Optional[Union[LeaseClient, str]], Optional[int], **Any) -> ContainerProperties + async def get_container_properties(self, **kwargs): + # type: (**Any) -> ContainerProperties """Returns all user-defined metadata and system properties for the specified container. The data returned does not include the container's list of blobs. @@ -320,7 +318,9 @@ async def get_container_properties(self, lease=None, timeout=None, **kwargs): :dedent: 12 :caption: Getting properties on the container. """ + lease = kwargs.pop('lease', None) access_conditions = get_access_conditions(lease) + timeout = kwargs.pop('timeout', None) try: response = await self._client.container.get_properties( timeout=timeout, @@ -335,8 +335,6 @@ async def get_container_properties(self, lease=None, timeout=None, **kwargs): @distributed_trace_async async def set_container_metadata( # type: ignore self, metadata=None, # type: Optional[Dict[str, str]] - lease=None, # type: Optional[Union[str, LeaseClient]] - timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> Dict[str, Union[str, datetime]] @@ -373,8 +371,10 @@ async def set_container_metadata( # type: ignore """ headers = kwargs.pop('headers', {}) headers.update(add_metadata_headers(metadata)) + lease = kwargs.pop('lease', None) access_conditions = get_access_conditions(lease) mod_conditions = ModifiedAccessConditions(if_modified_since=kwargs.pop('if_modified_since', None)) + timeout = kwargs.pop('timeout', None) try: return await self._client.container.set_metadata( # type: ignore timeout=timeout, @@ -387,8 +387,8 @@ async def set_container_metadata( # type: ignore process_storage_error(error) @distributed_trace_async - async def get_container_access_policy(self, lease=None, timeout=None, **kwargs): - # type: (Optional[Union[LeaseClient, str]], Optional[int], **Any) -> Dict[str, Any] + async def get_container_access_policy(self, **kwargs): + # type: (Any) -> Dict[str, Any] """Gets the permissions for the specified container. The permissions indicate whether container data may be accessed publicly. @@ -409,7 +409,9 @@ async def get_container_access_policy(self, lease=None, timeout=None, **kwargs): :dedent: 12 :caption: Getting the access policy on the container. """ + lease = kwargs.pop('lease', None) access_conditions = get_access_conditions(lease) + timeout = kwargs.pop('timeout', None) try: response, identifiers = await self._client.container.get_access_policy( timeout=timeout, @@ -427,8 +429,6 @@ async def get_container_access_policy(self, lease=None, timeout=None, **kwargs): async def set_container_access_policy( self, signed_identifiers=None, # type: Optional[Dict[str, Optional[AccessPolicy]]] public_access=None, # type: Optional[Union[str, PublicAccess]] - lease=None, # type: Optional[Union[str, LeaseClient]] - timeout=None, # type: Optional[int] **kwargs # type: Any ): # type: (...) -> Dict[str, Union[str, datetime]] """Sets the permissions for the specified container or stored access @@ -471,6 +471,8 @@ async def set_container_access_policy( :dedent: 12 :caption: Setting access policy on the container. """ + timeout = kwargs.pop('timeout', None) + lease = kwargs.pop('lease', None) if signed_identifiers: if len(signed_identifiers) > 5: raise ValueError( @@ -501,8 +503,8 @@ async def set_container_access_policy( process_storage_error(error) @distributed_trace - def list_blobs(self, name_starts_with=None, include=None, timeout=None, **kwargs): - # type: (Optional[str], Optional[Any], Optional[int], **Any) -> AsyncItemPaged[BlobProperties] + def list_blobs(self, name_starts_with=None, include=None, **kwargs): + # type: (Optional[str], Optional[Any], **Any) -> AsyncItemPaged[BlobProperties] """Returns a generator to list the blobs under the specified container. The generator will lazily follow the continuation tokens returned by the service. @@ -531,6 +533,7 @@ def list_blobs(self, name_starts_with=None, include=None, timeout=None, **kwargs include = [include] results_per_page = kwargs.pop('results_per_page', None) + timeout = kwargs.pop('timeout', None) command = functools.partial( self._client.container.list_blob_flat_segment, include=include, @@ -548,7 +551,6 @@ def walk_blobs( self, name_starts_with=None, # type: Optional[str] include=None, # type: Optional[Any] delimiter="/", # type: str - timeout=None, # type: Optional[int] **kwargs # type: Optional[Any] ): # type: (...) -> AsyncItemPaged[BlobProperties] @@ -577,6 +579,7 @@ def walk_blobs( include = [include] results_per_page = kwargs.pop('results_per_page', None) + timeout = kwargs.pop('timeout', None) command = functools.partial( self._client.container.list_blob_hierarchy_segment, delimiter=delimiter, @@ -594,14 +597,8 @@ async def upload_blob( self, name, # type: Union[str, BlobProperties] data, # type: Union[Iterable[AnyStr], IO[AnyStr]] blob_type=BlobType.BlockBlob, # type: Union[str, BlobType] - overwrite=False, # type: bool length=None, # type: Optional[int] metadata=None, # type: Optional[Dict[str, str]] - content_settings=None, # type: Optional[ContentSettings] - validate_content=False, # type: Optional[bool] - lease=None, # type: Optional[Union[LeaseClient, str]] - timeout=None, # type: Optional[int] - max_concurrency=1, # type: int encoding='UTF-8', # type: str **kwargs ): @@ -702,17 +699,13 @@ async def upload_blob( """ blob = self.get_blob_client(name) kwargs.setdefault('merge_span', True) + timeout = kwargs.pop('timeout', None) await blob.upload_blob( data, blob_type=blob_type, - overwrite=overwrite, length=length, metadata=metadata, - content_settings=content_settings, - validate_content=validate_content, - lease=lease, timeout=timeout, - max_concurrency=max_concurrency, encoding=encoding, **kwargs ) @@ -722,8 +715,6 @@ async def upload_blob( async def delete_blob( self, blob, # type: Union[str, BlobProperties] delete_snapshots=None, # type: Optional[str] - lease=None, # type: Optional[Union[str, LeaseClient]] - timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> None @@ -782,9 +773,9 @@ async def delete_blob( """ blob = self.get_blob_client(blob) # type: ignore kwargs.setdefault('merge_span', True) + timeout = kwargs.pop('timeout', None) await blob.delete_blob( # type: ignore delete_snapshots=delete_snapshots, - lease=lease, timeout=timeout, **kwargs) @@ -793,7 +784,6 @@ async def delete_blobs( # pylint: disable=arguments-differ self, *blobs: Union[str, BlobProperties], delete_snapshots: Optional[str] = None, lease: Optional[Union[str, LeaseClient]] = None, - timeout: Optional[int] = None, **kwargs ) -> AsyncIterator[AsyncHttpResponse]: """Marks the specified blobs or snapshots for deletion. @@ -850,6 +840,7 @@ async def delete_blobs( # pylint: disable=arguments-differ :return: An async iterator of responses, one for each blob in order :rtype: asynciterator[~azure.core.pipeline.transport.AsyncHttpResponse] """ + timeout = kwargs.pop('timeout', None) options = BlobClient._generic_delete_blob_options( # pylint: disable=protected-access delete_snapshots=delete_snapshots, lease=lease, diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/lease_async.py b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/lease_async.py index c372eb045b94..9119982351b3 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/lease_async.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/lease_async.py @@ -62,8 +62,8 @@ async def __aexit__(self, *args): await self.release() @distributed_trace_async - async def acquire(self, lease_duration=-1, timeout=None, **kwargs): - # type: (int, Optional[int], Any) -> None + async def acquire(self, lease_duration=-1, **kwargs): + # type: (int, Any) -> None """Requests a new lease. If the container does not have an active lease, the Blob service creates a @@ -106,7 +106,7 @@ async def acquire(self, lease_duration=-1, timeout=None, **kwargs): if_none_match=kwargs.pop('if_none_match', None)) try: response = await self._client.acquire_lease( - timeout=timeout, + timeout=kwargs.pop('timeout', None), duration=lease_duration, proposed_lease_id=self.id, modified_access_conditions=mod_conditions, @@ -119,8 +119,8 @@ async def acquire(self, lease_duration=-1, timeout=None, **kwargs): self.etag = kwargs.get('etag') # type: str @distributed_trace_async - async def renew(self, timeout=None, **kwargs): - # type: (Optional[int], Any) -> None + async def renew(self, **kwargs): + # type: (Any) -> None """Renews the lease. The lease can be renewed if the lease ID specified in the @@ -162,7 +162,7 @@ async def renew(self, timeout=None, **kwargs): try: response = await self._client.renew_lease( lease_id=self.id, - timeout=timeout, + timeout=kwargs.pop('timeout', None), modified_access_conditions=mod_conditions, cls=return_response_headers, **kwargs) @@ -173,8 +173,8 @@ async def renew(self, timeout=None, **kwargs): self.last_modified = response.get('last_modified') # type: datetime @distributed_trace_async - async def release(self, timeout=None, **kwargs): - # type: (Optional[int], Any) -> None + async def release(self, **kwargs): + # type: (Any) -> None """Release the lease. The lease may be released if the client lease id specified matches @@ -214,7 +214,7 @@ async def release(self, timeout=None, **kwargs): try: response = await self._client.release_lease( lease_id=self.id, - timeout=timeout, + timeout=kwargs.pop('timeout', None), modified_access_conditions=mod_conditions, cls=return_response_headers, **kwargs) @@ -225,8 +225,8 @@ async def release(self, timeout=None, **kwargs): self.last_modified = response.get('last_modified') # type: datetime @distributed_trace_async - async def change(self, proposed_lease_id, timeout=None, **kwargs): - # type: (str, Optional[int], Any) -> None + async def change(self, proposed_lease_id, **kwargs): + # type: (str, Any) -> None """Change the lease ID of an active lease. :param str proposed_lease_id: @@ -266,7 +266,7 @@ async def change(self, proposed_lease_id, timeout=None, **kwargs): response = await self._client.change_lease( lease_id=self.id, proposed_lease_id=proposed_lease_id, - timeout=timeout, + timeout=kwargs.pop('timeout', None), modified_access_conditions=mod_conditions, cls=return_response_headers, **kwargs) @@ -277,8 +277,8 @@ async def change(self, proposed_lease_id, timeout=None, **kwargs): self.last_modified = response.get('last_modified') # type: datetime @distributed_trace_async - async def break_lease(self, lease_break_period=None, timeout=None, **kwargs): - # type: (Optional[int], Optional[int], Any) -> int + async def break_lease(self, lease_break_period=None, **kwargs): + # type: (Optional[int], Any) -> int """Break the lease, if the container or blob has an active lease. Once a lease is broken, it cannot be renewed. Any authorized request can break the lease; @@ -320,7 +320,7 @@ async def break_lease(self, lease_break_period=None, timeout=None, **kwargs): if_unmodified_since=kwargs.pop('if_unmodified_since', None)) try: response = await self._client.break_lease( - timeout=timeout, + timeout=kwargs.pop('timeout', None), break_period=lease_break_period, modified_access_conditions=mod_conditions, cls=return_response_headers, diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/blob_client.py b/sdk/storage/azure-storage-blob/azure/storage/blob/blob_client.py index d7264815f545..e1fb1d50a5c4 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/blob_client.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/blob_client.py @@ -232,14 +232,8 @@ def generate_shared_access_signature( start=None, # type: Optional[Union[datetime, str]] policy_id=None, # type: Optional[str] ip=None, # type: Optional[str] - protocol=None, # type: Optional[str] - account_name=None, # type: Optional[str] - cache_control=None, # type: Optional[str] - content_disposition=None, # type: Optional[str] - content_encoding=None, # type: Optional[str] - content_language=None, # type: Optional[str] - content_type=None, # type: Optional[str] - user_delegation_key=None # type: Optional[UserDelegationKey] + user_delegation_key=None, # type: Optional[UserDelegationKey] + **kwargs # type: Any ): # type: (...) -> Any """ @@ -307,6 +301,14 @@ def generate_shared_access_signature( :return: A Shared Access Signature (sas) token. :rtype: str """ + protocol = kwargs.pop('protocol', None) + account_name = kwargs.pop('account_name', None) + cache_control = kwargs.pop('cache_control', None) + content_disposition = kwargs.pop('content_disposition', None) + content_encoding = kwargs.pop('content_encoding', None) + content_language = kwargs.pop('content_language', None) + content_type = kwargs.pop('content_type', None) + if user_delegation_key is not None: if not hasattr(self.credential, 'account_name') and not account_name: raise ValueError("No account_name available. Please provide account_name parameter.") @@ -353,12 +355,8 @@ def get_account_information(self, **kwargs): # type: ignore def _upload_blob_options( # pylint:disable=too-many-statements self, data, # type: Union[Iterable[AnyStr], IO[AnyStr]] blob_type=BlobType.BlockBlob, # type: Union[str, BlobType] - overwrite=False, # type: bool length=None, # type: Optional[int] metadata=None, # type: Optional[Dict[str, str]] - content_settings=None, # type: Optional[ContentSettings] - validate_content=False, # type: Optional[bool] - max_concurrency=1, # type: int **kwargs ): # type: (...) -> Dict[str, Any] @@ -392,6 +390,10 @@ def _upload_blob_options( # pylint:disable=too-many-statements else: raise TypeError("Unsupported data type: {}".format(type(data))) + validate_content = kwargs.pop('validate_content', False) + content_settings = kwargs.pop('content_settings', None) + overwrite = kwargs.pop('overwrite', False) + max_concurrency = kwargs.pop('max_concurrency', 1) cpk = kwargs.pop('cpk', None) cpk_info = None if cpk: @@ -443,12 +445,8 @@ def _upload_blob_options( # pylint:disable=too-many-statements def upload_blob( # pylint: disable=too-many-locals self, data, # type: Union[Iterable[AnyStr], IO[AnyStr]] blob_type=BlobType.BlockBlob, # type: Union[str, BlobType] - overwrite=False, # type: bool length=None, # type: Optional[int] metadata=None, # type: Optional[Dict[str, str]] - content_settings=None, # type: Optional[ContentSettings] - validate_content=False, # type: Optional[bool] - max_concurrency=1, # type: int **kwargs ): # type: (...) -> Any @@ -547,12 +545,8 @@ def upload_blob( # pylint: disable=too-many-locals options = self._upload_blob_options( data, blob_type=blob_type, - overwrite=overwrite, length=length, metadata=metadata, - content_settings=content_settings, - validate_content=validate_content, - max_concurrency=max_concurrency, **kwargs) if blob_type == BlobType.BlockBlob: return upload_block_blob(**options) @@ -560,13 +554,14 @@ def upload_blob( # pylint: disable=too-many-locals return upload_page_blob(**options) return upload_append_blob(**options) - def _download_blob_options(self, offset=None, length=None, validate_content=False, **kwargs): + def _download_blob_options(self, offset=None, length=None, **kwargs): # type: (Optional[int], Optional[int], bool, **Any) -> Dict[str, Any] if self.require_encryption and not self.key_encryption_key: raise ValueError("Encryption required but no key was provided.") if length is not None and offset is None: raise ValueError("Offset value must not be None if length is set.") + validate_content = kwargs.pop('validate_content', False) access_conditions = get_access_conditions(kwargs.pop('lease', None)) mod_conditions = ModifiedAccessConditions( if_modified_since=kwargs.pop('if_modified_since', None), @@ -601,7 +596,7 @@ def _download_blob_options(self, offset=None, length=None, validate_content=Fals return options @distributed_trace - def download_blob(self, offset=None, length=None, validate_content=False, **kwargs): + def download_blob(self, offset=None, length=None, **kwargs): # type: (Optional[int], Optional[int], bool, **Any) -> Iterable[bytes] """Downloads a blob to a stream with automatic chunking. @@ -669,7 +664,6 @@ def download_blob(self, offset=None, length=None, validate_content=False, **kwar options = self._download_blob_options( offset=offset, length=length, - validate_content=validate_content, **kwargs) extra_properties = { 'name': self.blob_name, @@ -1026,7 +1020,6 @@ def set_blob_metadata(self, metadata=None, **kwargs): def _create_page_blob_options( # type: ignore self, size, # type: int content_settings=None, # type: Optional[ContentSettings] - sequence_number=None, # type: Optional[int] metadata=None, # type: Optional[Dict[str, str]] premium_page_blob_tier=None, # type: Optional[Union[str, PremiumPageBlobTier]] **kwargs @@ -1053,6 +1046,7 @@ def _create_page_blob_options( # type: ignore blob_content_disposition=content_settings.content_disposition ) + sequence_number = kwargs.pop('sequence_number', None) cpk = kwargs.pop('cpk', None) cpk_info = None if cpk: @@ -1084,7 +1078,6 @@ def _create_page_blob_options( # type: ignore def create_page_blob( # type: ignore self, size, # type: int content_settings=None, # type: Optional[ContentSettings] - sequence_number=None, # type: Optional[int] metadata=None, # type: Optional[Dict[str, str]] premium_page_blob_tier=None, # type: Optional[Union[str, PremiumPageBlobTier]] **kwargs @@ -1147,7 +1140,6 @@ def create_page_blob( # type: ignore options = self._create_page_blob_options( size, content_settings=content_settings, - sequence_number=sequence_number, metadata=metadata, premium_page_blob_tier=premium_page_blob_tier, **kwargs) @@ -1692,7 +1684,6 @@ def _stage_block_options( self, block_id, # type: str data, # type: Union[Iterable[AnyStr], IO[AnyStr]] length=None, # type: Optional[int] - validate_content=False, # type: Optional[bool] **kwargs ): # type: (...) -> Dict[str, Any] @@ -1709,6 +1700,7 @@ def _stage_block_options( if isinstance(data, bytes): data = data[:length] + validate_content = kwargs.pop('validate_content', False) cpk = kwargs.pop('cpk', None) cpk_info = None if cpk: @@ -1735,7 +1727,6 @@ def stage_block( self, block_id, # type: str data, # type: Union[Iterable[AnyStr], IO[AnyStr]] length=None, # type: Optional[int] - validate_content=False, # type: Optional[bool] **kwargs ): # type: (...) -> None @@ -1775,7 +1766,6 @@ def stage_block( block_id, data, length=length, - validate_content=validate_content, **kwargs) try: self._client.block_blob.stage_block(**options) @@ -1915,7 +1905,6 @@ def _commit_block_list_options( # type: ignore self, block_list, # type: List[BlobBlock] content_settings=None, # type: Optional[ContentSettings] metadata=None, # type: Optional[Dict[str, str]] - validate_content=False, # type: Optional[bool] **kwargs ): # type: (...) -> Dict[str, Any] @@ -1951,6 +1940,7 @@ def _commit_block_list_options( # type: ignore blob_content_disposition=content_settings.content_disposition ) + validate_content = kwargs.pop('validate_content', False) cpk = kwargs.pop('cpk', None) cpk_info = None if cpk: @@ -1980,7 +1970,6 @@ def commit_block_list( # type: ignore self, block_list, # type: List[BlobBlock] content_settings=None, # type: Optional[ContentSettings] metadata=None, # type: Optional[Dict[str, str]] - validate_content=False, # type: Optional[bool] **kwargs ): # type: (...) -> Dict[str, Union[str, datetime]] @@ -2043,7 +2032,6 @@ def commit_block_list( # type: ignore block_list, content_settings=content_settings, metadata=metadata, - validate_content=validate_content, **kwargs) try: return self._client.block_blob.commit_block_list(**options) # type: ignore @@ -2344,7 +2332,6 @@ def _upload_page_options( # type: ignore start_range, # type: int end_range, # type: int length=None, # type: Optional[int] - validate_content=False, # type: Optional[bool] **kwargs ): # type: (...) -> Dict[str, Any] @@ -2374,6 +2361,7 @@ def _upload_page_options( # type: ignore if_match=kwargs.pop('if_match', None), if_none_match=kwargs.pop('if_none_match', None)) + validate_content = kwargs.pop('validate_content', False) cpk = kwargs.pop('cpk', None) cpk_info = None if cpk: @@ -2402,7 +2390,6 @@ def upload_page( # type: ignore start_range, # type: int end_range, # type: int length=None, # type: Optional[int] - validate_content=False, # type: Optional[bool] **kwargs ): # type: (...) -> Dict[str, Union[str, datetime]] @@ -2480,7 +2467,6 @@ def upload_page( # type: ignore start_range=start_range, end_range=end_range, length=length, - validate_content=validate_content, **kwargs) try: return self._client.page_blob.upload_pages(**options) # type: ignore @@ -2492,7 +2478,6 @@ def _upload_pages_from_url_options( # type: ignore range_start, # type: int range_end, # type: int source_range_start, # type: int - source_content_md5=None, # type: Optional[bytes] **kwargs ): # type: (...) -> Dict[str, Any] @@ -2528,6 +2513,7 @@ def _upload_pages_from_url_options( # type: ignore source_if_match=kwargs.pop('source_if_match', None), source_if_none_match=kwargs.pop('source_if_none_match', None)) + source_content_md5 = kwargs.pop('source_content_md5', None) cpk = kwargs.pop('cpk', None) cpk_info = None if cpk: @@ -2557,7 +2543,6 @@ def upload_pages_from_url(self, source_url, # type: str range_start, # type: int range_end, # type: int source_range_start, # type: int - source_content_md5=None, # type: Optional[bytes] **kwargs ): # type: (...) -> Dict[str, Any] @@ -2649,7 +2634,6 @@ def upload_pages_from_url(self, source_url, # type: str range_start=range_start, range_end=range_end, source_range_start=source_range_start, - source_content_md5=source_content_md5, **kwargs ) try: @@ -2767,9 +2751,6 @@ def clear_page(self, start_range, end_range, **kwargs): def _append_block_options( # type: ignore self, data, # type: Union[AnyStr, Iterable[AnyStr], IO[AnyStr]] length=None, # type: Optional[int] - validate_content=False, # type: Optional[bool] - maxsize_condition=None, # type: Optional[int] - appendpos_condition=None, # type: Optional[int] **kwargs ): # type: (...) -> Dict[str, Any] @@ -2787,6 +2768,9 @@ def _append_block_options( # type: ignore if isinstance(data, bytes): data = data[:length] + appendpos_condition = kwargs.pop('appendpos_condition', None) + maxsize_condition = kwargs.pop('maxsize_condition', None) + validate_content = kwargs.pop('validate_content', False) append_conditions = None if maxsize_condition or appendpos_condition is not None: append_conditions = AppendPositionAccessConditions( @@ -2825,9 +2809,6 @@ def _append_block_options( # type: ignore def append_block( # type: ignore self, data, # type: Union[AnyStr, Iterable[AnyStr], IO[AnyStr]] length=None, # type: Optional[int] - validate_content=False, # type: Optional[bool] - maxsize_condition=None, # type: Optional[int] - appendpos_condition=None, # type: Optional[int] **kwargs ): # type: (...) -> Dict[str, Union[str, datetime, int]] @@ -2896,9 +2877,6 @@ def append_block( # type: ignore options = self._append_block_options( data, length=length, - validate_content=validate_content, - maxsize_condition=maxsize_condition, - appendpos_condition=appendpos_condition, **kwargs ) try: @@ -2910,9 +2888,6 @@ def _append_block_from_url_options( # type: ignore self, copy_source_url, # type: str source_range_start=None, # type Optional[int] source_range_end=None, # type Optional[int] - source_content_md5=None, # type: Optional[bytearray] - maxsize_condition=None, # type: Optional[int] - appendpos_condition=None, # type: Optional[int] **kwargs ): # type: (...) -> Dict[str, Any] @@ -2929,6 +2904,9 @@ def _append_block_from_url_options( # type: ignore elif source_range_start is not None: source_range = "bytes={0}-".format(source_range_start) + appendpos_condition = kwargs.pop('appendpos_condition', None) + maxsize_condition = kwargs.pop('maxsize_condition', None) + source_content_md5 = kwargs.pop('source_content_md5', None) append_conditions = None if maxsize_condition or appendpos_condition is not None: append_conditions = AppendPositionAccessConditions( @@ -2975,9 +2953,6 @@ def _append_block_from_url_options( # type: ignore def append_block_from_url(self, copy_source_url, # type: str source_range_start=None, # type Optional[int] source_range_end=None, # type Optional[int] - source_content_md5=None, # type: Optional[bytearray] - maxsize_condition=None, # type: Optional[int] - appendpos_condition=None, # type: Optional[int] **kwargs): # type: (...) -> Dict[str, Union[str, datetime, int]] """ @@ -3062,9 +3037,6 @@ def append_block_from_url(self, copy_source_url, # type: str copy_source_url, source_range_start=source_range_start, source_range_end=source_range_end, - source_content_md5=source_content_md5, - maxsize_condition=maxsize_condition, - appendpos_condition=appendpos_condition, **kwargs ) try: diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/blob_service_client.py b/sdk/storage/azure-storage-blob/azure/storage/blob/blob_service_client.py index 6301a6c77b22..99336c74416f 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/blob_service_client.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/blob_service_client.py @@ -163,7 +163,7 @@ def generate_shared_access_signature( expiry, # type: Optional[Union[datetime, str]] start=None, # type: Optional[Union[datetime, str]] ip=None, # type: Optional[str] - protocol=None # type: Optional[str] + **kwargs # type: Any ): # type: (...) -> str """Generates a shared access signature for the blob service. @@ -215,6 +215,7 @@ def generate_shared_access_signature( :dedent: 8 :caption: Generating a shared access signature. """ + protocol = kwargs.pop('protocol', None) if not hasattr(self.credential, 'account_key') and not self.credential.account_key: raise ValueError("No account SAS key available.") @@ -232,7 +233,6 @@ def generate_shared_access_signature( @distributed_trace def get_user_delegation_key(self, key_start_time, # type: datetime key_expiry_time, # type: datetime - timeout=None, # type: Optional[int] **kwargs # type: Any ): # type: (datetime, datetime, Optional[int]) -> UserDelegationKey @@ -250,6 +250,7 @@ def get_user_delegation_key(self, key_start_time, # type: datetime :rtype: ~azure.storage.blob._shared.models.UserDelegationKey """ key_info = KeyInfo(start=_to_utc_datetime(key_start_time), expiry=_to_utc_datetime(key_expiry_time)) + timeout = kwargs.pop('timeout', None) try: user_delegation_key = self._client.service.get_user_delegation_key(key_info=key_info, timeout=timeout, @@ -285,8 +286,8 @@ def get_account_information(self, **kwargs): # type: ignore process_storage_error(error) @distributed_trace - def get_service_stats(self, timeout=None, **kwargs): # type: ignore - # type: (Optional[int], **Any) -> Dict[str, Any] + def get_service_stats(self, **kwargs): # type: ignore + # type: (**Any) -> Dict[str, Any] """Retrieves statistics related to replication for the Blob service. It is only available when read-access geo-redundant replication is enabled for @@ -319,6 +320,7 @@ def get_service_stats(self, timeout=None, **kwargs): # type: ignore :dedent: 8 :caption: Getting service stats for the blob service. """ + timeout = kwargs.pop('timeout', None) try: return self._client.service.get_statistics( # type: ignore timeout=timeout, use_location=LocationMode.SECONDARY, **kwargs) @@ -326,8 +328,8 @@ def get_service_stats(self, timeout=None, **kwargs): # type: ignore process_storage_error(error) @distributed_trace - def get_service_properties(self, timeout=None, **kwargs): - # type: (Optional[int], Any) -> Dict[str, Any] + def get_service_properties(self, **kwargs): + # type: (Any) -> Dict[str, Any] """Gets the properties of a storage account's Blob service, including Azure Storage Analytics. @@ -344,6 +346,7 @@ def get_service_properties(self, timeout=None, **kwargs): :dedent: 8 :caption: Getting service properties for the blob service. """ + timeout = kwargs.pop('timeout', None) try: return self._client.service.get_properties(timeout=timeout, **kwargs) except StorageErrorException as error: @@ -358,7 +361,6 @@ def set_service_properties( target_version=None, # type: Optional[str] delete_retention_policy=None, # type: Optional[RetentionPolicy] static_website=None, # type: Optional[StaticWebsite] - timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> None @@ -422,6 +424,7 @@ def set_service_properties( delete_retention_policy=delete_retention_policy, static_website=static_website ) + timeout = kwargs.pop('timeout', None) try: self._client.service.set_properties(props, timeout=timeout, **kwargs) except StorageErrorException as error: @@ -431,8 +434,6 @@ def set_service_properties( def list_containers( self, name_starts_with=None, # type: Optional[str] include_metadata=False, # type: Optional[bool] - results_per_page=None, # type: Optional[int] - timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> ItemPaged[ContainerProperties] @@ -465,6 +466,8 @@ def list_containers( :caption: Listing the containers in the blob service. """ include = 'metadata' if include_metadata else None + timeout = kwargs.pop('timeout', None) + results_per_page = kwargs.pop('results_per_page', None) command = functools.partial( self._client.service.list_containers_segment, prefix=name_starts_with, @@ -483,7 +486,6 @@ def create_container( self, name, # type: str metadata=None, # type: Optional[Dict[str, str]] public_access=None, # type: Optional[Union[PublicAccess, str]] - timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> ContainerClient @@ -516,6 +518,7 @@ def create_container( """ container = self.get_container_client(name) kwargs.setdefault('merge_span', True) + timeout = kwargs.pop('timeout', None) container.create_container( metadata=metadata, public_access=public_access, timeout=timeout, **kwargs) return container @@ -524,7 +527,6 @@ def create_container( def delete_container( self, container, # type: Union[ContainerProperties, str] lease=None, # type: Optional[Union[LeaseClient, str]] - timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> None @@ -577,6 +579,7 @@ def delete_container( """ container = self.get_container_client(container) # type: ignore kwargs.setdefault('merge_span', True) + timeout = kwargs.pop('timeout', None) container.delete_container( # type: ignore lease=lease, timeout=timeout, diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/container_client.py b/sdk/storage/azure-storage-blob/azure/storage/blob/container_client.py index d54ee5172d61..c8dbaaa5d93d 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/container_client.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/container_client.py @@ -192,14 +192,8 @@ def generate_shared_access_signature( start=None, # type: Optional[Union[datetime, str]] policy_id=None, # type: Optional[str] ip=None, # type: Optional[str] - protocol=None, # type: Optional[str] - account_name=None, # type: Optional[str] - cache_control=None, # type: Optional[str] - content_disposition=None, # type: Optional[str] - content_encoding=None, # type: Optional[str] - content_language=None, # type: Optional[str] - content_type=None, # type: Optional[str] - user_delegation_key=None # type Optional[] + user_delegation_key=None, # type: Optional[Any] + **kwargs # type: Any ): # type: (...) -> Any """Generates a shared access signature for the container. @@ -274,6 +268,13 @@ def generate_shared_access_signature( :dedent: 12 :caption: Generating a sas token. """ + protocol = kwargs.pop('protocol', None) + account_name = kwargs.pop('account_name', None) + cache_control = kwargs.pop('cache_control', None) + content_disposition = kwargs.pop('content_disposition', None) + content_encoding = kwargs.pop('content_encoding', None) + content_language = kwargs.pop('content_language', None) + content_type = kwargs.pop('content_type', None) if user_delegation_key is not None: if not hasattr(self.credential, 'account_name') and not account_name: raise ValueError("No account_name available. Please provide account_name parameter.") @@ -300,8 +301,8 @@ def generate_shared_access_signature( ) @distributed_trace - def create_container(self, metadata=None, public_access=None, timeout=None, **kwargs): - # type: (Optional[Dict[str, str]], Optional[Union[PublicAccess, str]], Optional[int], **Any) -> None + def create_container(self, metadata=None, public_access=None, **kwargs): + # type: (Optional[Dict[str, str]], Optional[Union[PublicAccess, str]], **Any) -> None """ Creates a new container under the specified account. If the container with the same name already exists, the operation fails. @@ -326,6 +327,7 @@ def create_container(self, metadata=None, public_access=None, timeout=None, **kw :caption: Creating a container to store blobs. """ headers = kwargs.pop('headers', {}) + timeout = kwargs.pop('timeout', None) headers.update(add_metadata_headers(metadata)) # type: ignore try: return self._client.container.create( # type: ignore @@ -339,11 +341,8 @@ def create_container(self, metadata=None, public_access=None, timeout=None, **kw @distributed_trace def delete_container( - self, lease=None, # type: Optional[Union[LeaseClient, str]] - timeout=None, # type: Optional[int] - **kwargs - ): - # type: (...) -> None + self, **kwargs): + # type: (Any) -> None """ Marks the specified container for deletion. The container and any blobs contained within it are later deleted during garbage collection. @@ -386,12 +385,14 @@ def delete_container( :dedent: 12 :caption: Delete a container. """ + lease = kwargs.pop('lease', None) access_conditions = get_access_conditions(lease) mod_conditions = ModifiedAccessConditions( if_modified_since=kwargs.pop('if_modified_since', None), if_unmodified_since=kwargs.pop('if_unmodified_since', None), if_match=kwargs.pop('if_match', None), if_none_match=kwargs.pop('if_none_match', None)) + timeout = kwargs.pop('timeout', None) try: self._client.container.delete( timeout=timeout, @@ -405,7 +406,6 @@ def delete_container( def acquire_lease( self, lease_duration=-1, # type: int lease_id=None, # type: Optional[str] - timeout=None, # type: Optional[int] **kwargs): # type: (...) -> LeaseClient """ @@ -458,6 +458,7 @@ def acquire_lease( """ lease = LeaseClient(self, lease_id=lease_id) # type: ignore kwargs.setdefault('merge_span', True) + timeout = kwargs.pop('timeout', None) lease.acquire(lease_duration=lease_duration, timeout=timeout, **kwargs) return lease @@ -478,8 +479,8 @@ def get_account_information(self, **kwargs): # type: ignore process_storage_error(error) @distributed_trace - def get_container_properties(self, lease=None, timeout=None, **kwargs): - # type: (Optional[Union[LeaseClient, str]], Optional[int], **Any) -> ContainerProperties + def get_container_properties(self, **kwargs): + # type: (Any) -> ContainerProperties """Returns all user-defined metadata and system properties for the specified container. The data returned does not include the container's list of blobs. @@ -500,7 +501,9 @@ def get_container_properties(self, lease=None, timeout=None, **kwargs): :dedent: 12 :caption: Getting properties on the container. """ + lease = kwargs.pop('lease', None) access_conditions = get_access_conditions(lease) + timeout = kwargs.pop('timeout', None) try: response = self._client.container.get_properties( timeout=timeout, @@ -515,8 +518,6 @@ def get_container_properties(self, lease=None, timeout=None, **kwargs): @distributed_trace def set_container_metadata( # type: ignore self, metadata=None, # type: Optional[Dict[str, str]] - lease=None, # type: Optional[Union[str, LeaseClient]] - timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> Dict[str, Union[str, datetime]] @@ -553,8 +554,10 @@ def set_container_metadata( # type: ignore """ headers = kwargs.pop('headers', {}) headers.update(add_metadata_headers(metadata)) + lease = kwargs.pop('lease', None) access_conditions = get_access_conditions(lease) mod_conditions = ModifiedAccessConditions(if_modified_since=kwargs.pop('if_modified_since', None)) + timeout = kwargs.pop('timeout', None) try: return self._client.container.set_metadata( # type: ignore timeout=timeout, @@ -567,8 +570,8 @@ def set_container_metadata( # type: ignore process_storage_error(error) @distributed_trace - def get_container_access_policy(self, lease=None, timeout=None, **kwargs): - # type: (Optional[Union[LeaseClient, str]], Optional[int], **Any) -> Dict[str, Any] + def get_container_access_policy(self, **kwargs): + # type: (Any) -> Dict[str, Any] """Gets the permissions for the specified container. The permissions indicate whether container data may be accessed publicly. @@ -589,7 +592,9 @@ def get_container_access_policy(self, lease=None, timeout=None, **kwargs): :dedent: 12 :caption: Getting the access policy on the container. """ + lease = kwargs.pop('lease', None) access_conditions = get_access_conditions(lease) + timeout = kwargs.pop('timeout', None) try: response, identifiers = self._client.container.get_access_policy( timeout=timeout, @@ -607,8 +612,6 @@ def get_container_access_policy(self, lease=None, timeout=None, **kwargs): def set_container_access_policy( self, signed_identifiers=None, # type: Optional[Dict[str, Optional[AccessPolicy]]] public_access=None, # type: Optional[Union[str, PublicAccess]] - lease=None, # type: Optional[Union[str, LeaseClient]] - timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> Dict[str, Union[str, datetime]] """Sets the permissions for the specified container or stored access @@ -663,11 +666,12 @@ def set_container_access_policy( value.expiry = serialize_iso(value.expiry) identifiers.append(SignedIdentifier(id=key, access_policy=value)) # type: ignore signed_identifiers = identifiers # type: ignore - + lease = kwargs.pop('lease', None) mod_conditions = ModifiedAccessConditions( if_modified_since=kwargs.pop('if_modified_since', None), if_unmodified_since=kwargs.pop('if_unmodified_since', None)) access_conditions = get_access_conditions(lease) + timeout = kwargs.pop('timeout', None) try: return self._client.container.set_access_policy( container_acl=signed_identifiers or None, @@ -681,8 +685,8 @@ def set_container_access_policy( process_storage_error(error) @distributed_trace - def list_blobs(self, name_starts_with=None, include=None, timeout=None, **kwargs): - # type: (Optional[str], Optional[Any], Optional[int], **Any) -> ItemPaged[BlobProperties] + def list_blobs(self, name_starts_with=None, include=None, **kwargs): + # type: (Optional[str], Optional[Any], **Any) -> ItemPaged[BlobProperties] """Returns a generator to list the blobs under the specified container. The generator will lazily follow the continuation tokens returned by the service. @@ -711,6 +715,7 @@ def list_blobs(self, name_starts_with=None, include=None, timeout=None, **kwargs include = [include] results_per_page = kwargs.pop('results_per_page', None) + timeout = kwargs.pop('timeout', None) command = functools.partial( self._client.container.list_blob_flat_segment, include=include, @@ -725,7 +730,6 @@ def walk_blobs( self, name_starts_with=None, # type: Optional[str] include=None, # type: Optional[Any] delimiter="/", # type: str - timeout=None, # type: Optional[int] **kwargs # type: Optional[Any] ): # type: (...) -> ItemPaged[BlobProperties] @@ -754,6 +758,7 @@ def walk_blobs( include = [include] results_per_page = kwargs.pop('results_per_page', None) + timeout = kwargs.pop('timeout', None) command = functools.partial( self._client.container.list_blob_hierarchy_segment, delimiter=delimiter, @@ -771,14 +776,8 @@ def upload_blob( self, name, # type: Union[str, BlobProperties] data, # type: Union[Iterable[AnyStr], IO[AnyStr]] blob_type=BlobType.BlockBlob, # type: Union[str, BlobType] - overwrite=False, # type: bool length=None, # type: Optional[int] metadata=None, # type: Optional[Dict[str, str]] - content_settings=None, # type: Optional[ContentSettings] - validate_content=False, # type: Optional[bool] - lease=None, # type: Optional[Union[LeaseClient, str]] - timeout=None, # type: Optional[int] - max_concurrency=1, # type: int encoding='UTF-8', # type: str **kwargs ): @@ -879,17 +878,13 @@ def upload_blob( """ blob = self.get_blob_client(name) kwargs.setdefault('merge_span', True) + timeout = kwargs.pop('timeout', None) blob.upload_blob( data, blob_type=blob_type, - overwrite=overwrite, length=length, metadata=metadata, - content_settings=content_settings, - validate_content=validate_content, - lease=lease, timeout=timeout, - max_concurrency=max_concurrency, encoding=encoding, **kwargs ) @@ -899,8 +894,6 @@ def upload_blob( def delete_blob( self, blob, # type: Union[str, BlobProperties] delete_snapshots=None, # type: Optional[str] - lease=None, # type: Optional[Union[str, LeaseClient]] - timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> None @@ -959,19 +952,19 @@ def delete_blob( """ blob = self.get_blob_client(blob) # type: ignore kwargs.setdefault('merge_span', True) + timeout = kwargs.pop('timeout', None) blob.delete_blob( # type: ignore delete_snapshots=delete_snapshots, - lease=lease, timeout=timeout, **kwargs) def _generate_delete_blobs_options( self, snapshot=None, - timeout=None, delete_snapshots=None, request_id=None, lease_access_conditions=None, - modified_access_conditions=None + modified_access_conditions=None, + **kwargs ): """This code is a copy from _generated. @@ -994,6 +987,7 @@ def _generate_delete_blobs_options( if_none_match = modified_access_conditions.if_none_match # Construct parameters + timeout = kwargs.pop('timeout', None) query_parameters = {} if snapshot is not None: query_parameters['snapshot'] = self._client._serialize.query("snapshot", snapshot, 'str') # pylint: disable=protected-access @@ -1104,7 +1098,7 @@ def delete_blobs(self, *blobs, **kwargs): return self._batch_send(*reqs, **options) def _generate_set_tier_options( - self, tier, timeout=None, rehydrate_priority=None, request_id=None, lease_access_conditions=None + self, tier, rehydrate_priority=None, request_id=None, lease_access_conditions=None, **kwargs ): """This code is a copy from _generated. @@ -1115,7 +1109,7 @@ def _generate_set_tier_options( lease_id = lease_access_conditions.lease_id comp = "tier" - + timeout = kwargs.pop('timeout', None) # Construct parameters query_parameters = {} if timeout is not None: diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/lease.py b/sdk/storage/azure-storage-blob/azure/storage/blob/lease.py index f4c5b227ded0..c4300d4d7a87 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/lease.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/lease.py @@ -79,7 +79,7 @@ def __exit__(self, *args): self.release() @distributed_trace - def acquire(self, lease_duration=-1, timeout=None, **kwargs): + def acquire(self, lease_duration=-1, **kwargs): # type: (int, Optional[int], **Any) -> None """Requests a new lease. @@ -123,7 +123,7 @@ def acquire(self, lease_duration=-1, timeout=None, **kwargs): if_none_match=kwargs.pop('if_none_match', None)) try: response = self._client.acquire_lease( - timeout=timeout, + timeout=kwargs.pop('timeout', None), duration=lease_duration, proposed_lease_id=self.id, modified_access_conditions=mod_conditions, @@ -136,8 +136,8 @@ def acquire(self, lease_duration=-1, timeout=None, **kwargs): self.etag = kwargs.get('etag') # type: str @distributed_trace - def renew(self, timeout=None, **kwargs): - # type: (Optional[int], Any) -> None + def renew(self, **kwargs): + # type: (Any) -> None """Renews the lease. The lease can be renewed if the lease ID specified in the @@ -179,7 +179,7 @@ def renew(self, timeout=None, **kwargs): try: response = self._client.renew_lease( lease_id=self.id, - timeout=timeout, + timeout=kwargs.pop('timeout', None), modified_access_conditions=mod_conditions, cls=return_response_headers, **kwargs) @@ -190,8 +190,8 @@ def renew(self, timeout=None, **kwargs): self.last_modified = response.get('last_modified') # type: datetime @distributed_trace - def release(self, timeout=None, **kwargs): - # type: (Optional[int], Any) -> None + def release(self, **kwargs): + # type: (Any) -> None """Release the lease. The lease may be released if the client lease id specified matches @@ -231,7 +231,7 @@ def release(self, timeout=None, **kwargs): try: response = self._client.release_lease( lease_id=self.id, - timeout=timeout, + timeout=kwargs.pop('timeout', None), modified_access_conditions=mod_conditions, cls=return_response_headers, **kwargs) @@ -242,8 +242,8 @@ def release(self, timeout=None, **kwargs): self.last_modified = response.get('last_modified') # type: datetime @distributed_trace - def change(self, proposed_lease_id, timeout=None, **kwargs): - # type: (str, Optional[int], Any) -> None + def change(self, proposed_lease_id, **kwargs): + # type: (str, Any) -> None """Change the lease ID of an active lease. :param str proposed_lease_id: @@ -283,7 +283,7 @@ def change(self, proposed_lease_id, timeout=None, **kwargs): response = self._client.change_lease( lease_id=self.id, proposed_lease_id=proposed_lease_id, - timeout=timeout, + timeout=kwargs.pop('timeout', None), modified_access_conditions=mod_conditions, cls=return_response_headers, **kwargs) @@ -294,8 +294,8 @@ def change(self, proposed_lease_id, timeout=None, **kwargs): self.last_modified = response.get('last_modified') # type: datetime @distributed_trace - def break_lease(self, lease_break_period=None, timeout=None, **kwargs): - # type: (Optional[int], Optional[int], Any) -> int + def break_lease(self, lease_break_period=None, **kwargs): + # type: (Optional[int], Any) -> int """Break the lease, if the container or blob has an active lease. Once a lease is broken, it cannot be renewed. Any authorized request can break the lease; @@ -337,7 +337,7 @@ def break_lease(self, lease_break_period=None, timeout=None, **kwargs): if_unmodified_since=kwargs.pop('if_unmodified_since', None)) try: response = self._client.break_lease( - timeout=timeout, + timeout=kwargs.pop('timeout', None), break_period=lease_break_period, modified_access_conditions=mod_conditions, cls=return_response_headers, diff --git a/sdk/storage/azure-storage-blob/tests/test_container.py b/sdk/storage/azure-storage-blob/tests/test_container.py index a9a148d43019..e57d3ddf61dc 100644 --- a/sdk/storage/azure-storage-blob/tests/test_container.py +++ b/sdk/storage/azure-storage-blob/tests/test_container.py @@ -300,7 +300,7 @@ def test_set_container_metadata_with_lease_id(self): lease_id = container.acquire_lease() # Act - container.set_container_metadata(metadata, lease_id) + container.set_container_metadata(metadata, lease=lease_id) # Assert md = container.get_container_properties().metadata @@ -340,7 +340,7 @@ def test_get_container_metadata_with_lease_id(self): lease_id = container.acquire_lease() # Act - md = container.get_container_properties(lease_id).metadata + md = container.get_container_properties(lease=lease_id).metadata # Assert self.assertDictEqual(md, metadata) @@ -374,7 +374,7 @@ def test_get_container_properties_with_lease_id(self): lease_id = container.acquire_lease() # Act - props = container.get_container_properties(lease_id) + props = container.get_container_properties(lease=lease_id) lease_id.break_lease() # Assert @@ -404,7 +404,7 @@ def test_get_container_acl_with_lease_id(self): lease_id = container.acquire_lease() # Act - acl = container.get_container_access_policy(lease_id) + acl = container.get_container_access_policy(lease=lease_id) # Assert self.assertIsNotNone(acl) diff --git a/sdk/storage/azure-storage-blob/tests/test_container_async.py b/sdk/storage/azure-storage-blob/tests/test_container_async.py index 8c3d11dcb98b..03a4a28bc788 100644 --- a/sdk/storage/azure-storage-blob/tests/test_container_async.py +++ b/sdk/storage/azure-storage-blob/tests/test_container_async.py @@ -385,7 +385,7 @@ async def _test_set_container_metadata_with_lease_id(self): lease_id = await container.acquire_lease() # Act - await container.set_container_metadata(metadata, lease_id) + await container.set_container_metadata(metadata, lease=lease_id) # Assert md = await container.get_container_properties() @@ -439,7 +439,7 @@ async def _test_get_container_metadata_with_lease_id(self): lease_id = await container.acquire_lease() # Act - md = await container.get_container_properties(lease_id) + md = await container.get_container_properties(lease=lease_id) md = md.metadata # Assert @@ -482,7 +482,7 @@ async def _test_get_container_properties_with_lease_id(self): lease_id = await container.acquire_lease() # Act - props = await container.get_container_properties(lease_id) + props = await container.get_container_properties(lease=lease_id) await lease_id.break_lease() # Assert @@ -520,7 +520,7 @@ async def _test_get_container_acl_with_lease_id(self): lease_id = await container.acquire_lease() # Act - acl = await container.get_container_access_policy(lease_id) + acl = await container.get_container_access_policy(lease=lease_id) # Assert self.assertIsNotNone(acl)