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 f952370aecb3..7be757dac0ab 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/__init__.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/__init__.py @@ -26,7 +26,7 @@ UserDelegationKey, Services ) -from ._generated.models import RehydratePriority +from ._generated.azure.storage.blobs.models import RehydratePriority from ._models import ( BlobType, BlockState, 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 54abb33c80a1..866903e6f8ee 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 @@ -58,8 +58,8 @@ ) from ._download import StorageStreamDownloader from ._encryption import StorageEncryptionMixin, _ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION -from ._generated import AzureBlobStorage -from ._generated.models import CpkInfo +from ._generated.azure.storage.blobs import CombinedBlobClient as AzureBlobStorage +from ._generated.azure.storage.blobs.models import CpkInfo from ._lease import BlobLeaseClient from ._models import BlobBlock, BlobProperties, BlobQueryError, BlobType, PageRange, PageRangePaged from ._quick_query_helper import BlobQueryReader @@ -68,6 +68,7 @@ from ._serialize import ( get_access_conditions, get_api_version, + get_cpk_info, get_modify_conditions, get_version_id ) @@ -870,7 +871,7 @@ def query_blob(self, query_expression: str, **kwargs: Any) -> BlobQueryReader: raise ValueError("Customer provided encryption key must be used over HTTPS.") options, delimiter = _quick_query_options(self.snapshot, query_expression, **kwargs) try: - headers, raw_response_body = self._client.blob.query(**options) + headers, raw_response_body = self._client.block_blob.query(**options) except HttpResponseError as error: process_storage_error(error) return BlobQueryReader( @@ -1115,12 +1116,9 @@ def get_blob_properties(self, **kwargs: Any) -> BlobProperties: mod_conditions = get_modify_conditions(kwargs) version_id = get_version_id(self.version_id, kwargs) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - if self.scheme.lower() != 'https': - raise ValueError("Customer provided encryption key must be used over HTTPS.") - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) + cpk_info = get_cpk_info(cpk) + if cpk and self.scheme.lower() != 'https': + raise ValueError("Customer provided encryption key must be used over HTTPS.") try: cls_method = kwargs.pop('cls', None) if cls_method: @@ -1129,10 +1127,10 @@ def get_blob_properties(self, **kwargs: Any) -> BlobProperties: timeout=kwargs.pop('timeout', None), version_id=version_id, snapshot=self.snapshot, - lease_access_conditions=access_conditions, - modified_access_conditions=mod_conditions, + lease_id=access_conditions, + **mod_conditions, cls=kwargs.pop('cls', None) or deserialize_blob_properties, - cpk_info=cpk_info, + **cpk_info, **kwargs)) except HttpResponseError as error: process_storage_error(error) @@ -1258,7 +1256,7 @@ def set_blob_metadata( raise ValueError("Customer provided encryption key must be used over HTTPS.") options = _set_blob_metadata_options(metadata=metadata, **kwargs) try: - return cast(Dict[str, Union[str, datetime]], self._client.blob.set_metadata(**options)) + return cast(Dict[str, Union[str, datetime]], self._client.blob.set_metadata(metadata=metadata, **options)) except HttpResponseError as error: process_storage_error(error) @@ -1292,10 +1290,12 @@ def set_immutability_policy( """ version_id = get_version_id(self.version_id, kwargs) - kwargs['immutability_policy_expiry'] = immutability_policy.expiry_time - kwargs['immutability_policy_mode'] = immutability_policy.policy_mode return cast(Dict[str, str], self._client.blob.set_immutability_policy( - cls=return_response_headers, version_id=version_id, **kwargs)) + expiry=immutability_policy.expiry_time, + immutability_policy_mode=immutability_policy.policy_mode, + version_id=version_id, + cls=return_response_headers, + **kwargs)) @distributed_trace def delete_immutability_policy(self, **kwargs: Any) -> None: @@ -1344,7 +1344,7 @@ def set_legal_hold(self, legal_hold: bool, **kwargs: Any) -> Dict[str, Union[str version_id = get_version_id(self.version_id, kwargs) return cast(Dict[str, Union[str, datetime, bool]], self._client.blob.set_legal_hold( - legal_hold, version_id=version_id, cls=return_response_headers, **kwargs)) + legal_hold=legal_hold, version_id=version_id, cls=return_response_headers, **kwargs)) @distributed_trace def create_page_blob( @@ -1449,7 +1449,7 @@ def create_page_blob( premium_page_blob_tier=premium_page_blob_tier, **kwargs) try: - return cast(Dict[str, Any], self._client.page_blob.create(**options)) + return cast(Dict[str, Any], self._client.page_blob.create(size=size, **options)) except HttpResponseError as error: process_storage_error(error) @@ -1983,8 +1983,8 @@ def set_standard_blob_tier(self, standard_blob_tier: Union[str, "StandardBlobTie tier=standard_blob_tier, snapshot=self.snapshot, timeout=kwargs.pop('timeout', None), - modified_access_conditions=mod_conditions, - lease_access_conditions=access_conditions, + **mod_conditions, + lease_id=access_conditions, version_id=version_id, **kwargs) except HttpResponseError as error: @@ -2176,8 +2176,8 @@ def get_block_list( list_type=block_list_type, snapshot=self.snapshot, timeout=kwargs.pop('timeout', None), - lease_access_conditions=access_conditions, - modified_access_conditions=mod_conditions, + lease_id=access_conditions, + **mod_conditions, **kwargs) except HttpResponseError as error: process_storage_error(error) @@ -2331,8 +2331,8 @@ def set_premium_page_blob_tier(self, premium_page_blob_tier: "PremiumPageBlobTie self._client.blob.set_tier( tier=premium_page_blob_tier, timeout=kwargs.pop('timeout', None), - lease_access_conditions=access_conditions, - modified_access_conditions=mod_conditions, + lease_id=access_conditions, + **mod_conditions, **kwargs) except HttpResponseError as error: process_storage_error(error) @@ -2819,7 +2819,7 @@ def resize_blob(self, size: int, **kwargs: Any) -> Dict[str, Union[str, datetime raise ValueError("Customer provided encryption key must be used over HTTPS.") options = _resize_blob_options(size=size, **kwargs) try: - return cast(Dict[str, Any], self._client.page_blob.resize(**options)) + return cast(Dict[str, Any], self._client.page_blob.resize(size=size, **options)) except HttpResponseError as error: process_storage_error(error) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_client.pyi b/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_client.pyi index 3f74b8b211ad..1c3daf09380f 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_client.pyi +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_client.pyi @@ -30,7 +30,7 @@ from azure.core.tracing.decorator import distributed_trace from ._container_client import ContainerClient from ._download import StorageStreamDownloader from ._encryption import StorageEncryptionMixin -from ._generated.models import RehydratePriority +from ._generated.azure.storage.blobs.models import RehydratePriority from ._lease import BlobLeaseClient from ._models import ( ArrowDialect, diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_client_helpers.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_client_helpers.py index 52a6a57ca5ed..ac3b4a18a07c 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_client_helpers.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_client_helpers.py @@ -15,16 +15,15 @@ from ._deserialize import deserialize_blob_stream from ._encryption import modify_user_agent_for_encryption, _ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION -from ._generated.models import ( +from ._upload_helpers import _get_blob_http_headers_dict +from ._generated.azure.storage.blobs.models import ( AppendPositionAccessConditions, BlobHTTPHeaders, BlockList, BlockLookupList, CpkInfo, DeleteSnapshotsOptionType, - ModifiedAccessConditions, QueryRequest, - SequenceNumberAccessConditions, SourceCpkInfo ) from ._models import ( @@ -38,10 +37,14 @@ ) from ._serialize import ( get_access_conditions, + get_append_conditions, get_blob_modify_conditions, + get_cpk_info, get_cpk_scope_info, get_modify_conditions, + get_sequence_conditions, get_source_conditions, + get_source_cpk_info, serialize_blob_tags_header, serialize_blob_tags, serialize_query_format @@ -61,7 +64,7 @@ if TYPE_CHECKING: from urllib.parse import ParseResult - from ._generated import AzureBlobStorage + from ._generated.azure.storage.blobs import CombinedBlobClient as AzureBlobStorage from ._models import ContentSettings from ._shared.models import StorageConfiguration @@ -139,17 +142,13 @@ def _upload_blob_options( # pylint:disable=too-many-statements overwrite = kwargs.pop('overwrite', False) max_concurrency = kwargs.pop('max_concurrency', 1) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) - kwargs['cpk_info'] = cpk_info + kwargs.update(get_cpk_info(cpk)) headers = kwargs.pop('headers', {}) headers.update(add_metadata_headers(metadata)) - kwargs['lease_access_conditions'] = get_access_conditions(kwargs.pop('lease', None)) - kwargs['modified_access_conditions'] = get_modify_conditions(kwargs) - kwargs['cpk_scope_info'] = get_cpk_scope_info(kwargs) + kwargs['lease_id'] = get_access_conditions(kwargs.pop('lease', None)) + kwargs.update(get_modify_conditions(kwargs)) + kwargs.update(get_cpk_scope_info(kwargs)) if content_settings: kwargs['blob_headers'] = BlobHTTPHeaders( blob_cache_control=content_settings.cache_control, @@ -202,27 +201,13 @@ def _upload_blob_from_url_options(source_url: str, **kwargs: Any) -> Dict[str, A source_authorization = kwargs.pop('source_authorization', None) source_token_intent = kwargs.pop('source_token_intent', None) if content_settings: - kwargs['blob_http_headers'] = BlobHTTPHeaders( - blob_cache_control=content_settings.cache_control, - blob_content_type=content_settings.content_type, - blob_content_md5=None, - blob_content_encoding=content_settings.content_encoding, - blob_content_language=content_settings.content_language, - blob_content_disposition=content_settings.content_disposition - ) + kwargs['blob_cache_control'] = content_settings.cache_control + kwargs['blob_content_type'] = content_settings.content_type + kwargs['blob_content_encoding'] = content_settings.content_encoding + kwargs['blob_content_language'] = content_settings.content_language + kwargs['blob_content_disposition'] = content_settings.content_disposition cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) source_cpk = kwargs.pop('source_cpk', None) - source_cpk_info = None - if source_cpk: - source_cpk_info = SourceCpkInfo( - source_encryption_key=source_cpk.key_value, - source_encryption_key_sha256=source_cpk.key_hash, - source_encryption_algorithm=source_cpk.algorithm - ) options = { 'copy_source_authorization': source_authorization, @@ -231,20 +216,20 @@ def _upload_blob_from_url_options(source_url: str, **kwargs: Any) -> Dict[str, A 'copy_source_blob_properties': kwargs.pop('include_source_blob_properties', True), 'source_content_md5': kwargs.pop('source_content_md5', None), 'copy_source': source_url, - 'modified_access_conditions': get_modify_conditions(kwargs), + **get_modify_conditions(kwargs), 'blob_tags_string': serialize_blob_tags_header(kwargs.pop('tags', None)), 'cls': return_response_headers, - 'lease_access_conditions': get_access_conditions(kwargs.pop('destination_lease', None)), + 'lease_id': get_access_conditions(kwargs.pop('destination_lease', None)), 'tier': tier.value if tier else None, - 'source_modified_access_conditions': get_source_conditions(kwargs), - 'cpk_info': cpk_info, - 'cpk_scope_info': get_cpk_scope_info(kwargs), - 'source_cpk_info': source_cpk_info, + **get_source_conditions(kwargs), + **get_cpk_info(cpk), + **get_cpk_scope_info(kwargs), + **get_source_cpk_info(source_cpk), 'headers': headers, } options.update(kwargs) if not overwrite and not _any_conditions(**options): - options['modified_access_conditions'].if_none_match = '*' + options['if_none_match'] = '*' return options def _download_blob_options( @@ -295,10 +280,6 @@ def _download_blob_options( mod_conditions = get_modify_conditions(kwargs) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) # Add feature flag to user agent for encryption if encryption_options['key'] or encryption_options['resolver']: @@ -319,9 +300,9 @@ def _download_blob_options( 'required': encryption_options['required'], 'key': encryption_options['key'], 'resolver': encryption_options['resolver']}, - 'lease_access_conditions': access_conditions, - 'modified_access_conditions': mod_conditions, - 'cpk_info': cpk_info, + 'lease_id': access_conditions, + **mod_conditions, + **get_cpk_info(cpk), 'download_cls': kwargs.pop('cls', None) or deserialize_blob_stream, 'max_concurrency':kwargs.pop('max_concurrency', 1), 'encoding': encoding, @@ -366,6 +347,7 @@ def _quick_query_options(snapshot: Optional[str], query_expression: str, **kwarg else: output_format = input_format if not input_parquet_format else None query_request = QueryRequest( + query_type="SQL", expression=query_expression, input_serialization=serialize_query_format(input_format), output_serialization=serialize_query_format(output_format) @@ -374,18 +356,11 @@ def _quick_query_options(snapshot: Optional[str], query_expression: str, **kwarg mod_conditions = get_modify_conditions(kwargs) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo( - encryption_key=cpk.key_value, - encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm - ) options = { 'query_request': query_request, - 'lease_access_conditions': access_conditions, - 'modified_access_conditions': mod_conditions, - 'cpk_info': cpk_info, + 'lease_id': access_conditions, + **mod_conditions, + **get_cpk_info(cpk), 'snapshot': snapshot, 'timeout': kwargs.pop('timeout', None), 'cls': return_headers_and_deserialized, @@ -402,8 +377,8 @@ def _generic_delete_blob_options(delete_snapshots: Optional[str] = None, **kwarg 'timeout': kwargs.pop('timeout', None), 'snapshot': kwargs.pop('snapshot', None), # this is added for delete_blobs 'delete_snapshots': delete_snapshots or None, - 'lease_access_conditions': access_conditions, - 'modified_access_conditions': mod_conditions + 'lease_id': access_conditions, + **mod_conditions } options.update(kwargs) return options @@ -437,9 +412,9 @@ def _set_http_headers_options(content_settings: Optional["ContentSettings"] = No ) options = { 'timeout': kwargs.pop('timeout', None), - 'blob_http_headers': blob_headers, - 'lease_access_conditions': access_conditions, - 'modified_access_conditions': mod_conditions, + **_get_blob_http_headers_dict(blob_headers), + 'lease_id': access_conditions, + **mod_conditions, 'cls': return_response_headers} options.update(kwargs) return options @@ -449,19 +424,15 @@ def _set_blob_metadata_options(metadata: Optional[Dict[str, str]] = None, **kwar headers.update(add_metadata_headers(metadata)) access_conditions = get_access_conditions(kwargs.pop('lease', None)) mod_conditions = get_modify_conditions(kwargs) - cpk_scope_info = get_cpk_scope_info(kwargs) + cpk_scope = get_cpk_scope_info(kwargs) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) options = { 'timeout': kwargs.pop('timeout', None), - 'lease_access_conditions': access_conditions, - 'modified_access_conditions': mod_conditions, - 'cpk_scope_info': cpk_scope_info, - 'cpk_info': cpk_info, + 'lease_id': access_conditions, + **mod_conditions, + **cpk_scope, + **get_cpk_info(cpk), 'cls': return_response_headers, 'headers': headers} options.update(kwargs) @@ -478,7 +449,7 @@ def _create_page_blob_options( headers.update(add_metadata_headers(metadata)) access_conditions = get_access_conditions(kwargs.pop('lease', None)) mod_conditions = get_modify_conditions(kwargs) - cpk_scope_info = get_cpk_scope_info(kwargs) + cpk_scope = get_cpk_scope_info(kwargs) blob_headers = None if content_settings: blob_headers = BlobHTTPHeaders( @@ -492,10 +463,6 @@ def _create_page_blob_options( sequence_number = kwargs.pop('sequence_number', None) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) immutability_policy = kwargs.pop('immutability_policy', None) if immutability_policy: @@ -515,12 +482,12 @@ def _create_page_blob_options( 'content_length': 0, 'blob_content_length': size, 'blob_sequence_number': sequence_number, - 'blob_http_headers': blob_headers, + **_get_blob_http_headers_dict(blob_headers), 'timeout': kwargs.pop('timeout', None), - 'lease_access_conditions': access_conditions, - 'modified_access_conditions': mod_conditions, - 'cpk_scope_info': cpk_scope_info, - 'cpk_info': cpk_info, + 'lease_id': access_conditions, + **mod_conditions, + **cpk_scope, + **get_cpk_info(cpk), 'blob_tags_string': blob_tags_string, 'cls': return_response_headers, "tier": tier, @@ -537,7 +504,7 @@ def _create_append_blob_options( headers.update(add_metadata_headers(metadata)) access_conditions = get_access_conditions(kwargs.pop('lease', None)) mod_conditions = get_modify_conditions(kwargs) - cpk_scope_info = get_cpk_scope_info(kwargs) + cpk_scope = get_cpk_scope_info(kwargs) blob_headers = None if content_settings: blob_headers = BlobHTTPHeaders( @@ -550,10 +517,6 @@ def _create_append_blob_options( ) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) immutability_policy = kwargs.pop('immutability_policy', None) if immutability_policy: @@ -564,12 +527,12 @@ def _create_append_blob_options( options = { 'content_length': 0, - 'blob_http_headers': blob_headers, + **_get_blob_http_headers_dict(blob_headers), 'timeout': kwargs.pop('timeout', None), - 'lease_access_conditions': access_conditions, - 'modified_access_conditions': mod_conditions, - 'cpk_scope_info': cpk_scope_info, - 'cpk_info': cpk_info, + 'lease_id': access_conditions, + **mod_conditions, + **cpk_scope, + **get_cpk_info(cpk), 'blob_tags_string': blob_tags_string, 'cls': return_response_headers, 'headers': headers} @@ -581,19 +544,15 @@ def _create_snapshot_options(metadata: Optional[Dict[str, str]] = None, **kwargs headers.update(add_metadata_headers(metadata)) access_conditions = get_access_conditions(kwargs.pop('lease', None)) mod_conditions = get_modify_conditions(kwargs) - cpk_scope_info = get_cpk_scope_info(kwargs) + cpk_scope = get_cpk_scope_info(kwargs) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) options = { 'timeout': kwargs.pop('timeout', None), - 'lease_access_conditions': access_conditions, - 'modified_access_conditions': mod_conditions, - 'cpk_scope_info': cpk_scope_info, - 'cpk_info': cpk_info, + 'lease_id': access_conditions, + **mod_conditions, + **cpk_scope, + **get_cpk_info(cpk), 'cls': return_response_headers, 'headers': headers} options.update(kwargs) @@ -672,7 +631,7 @@ def _start_copy_from_url_options( # pylint:disable=too-many-statements options = { 'copy_source': source_url, 'timeout': timeout, - 'modified_access_conditions': dest_mod_conditions, + **dest_mod_conditions, 'headers': headers, 'cls': return_response_headers, } @@ -680,8 +639,8 @@ def _start_copy_from_url_options( # pylint:disable=too-many-statements if not incremental_copy: source_mod_conditions = get_source_conditions(kwargs) dest_access_conditions = get_access_conditions(kwargs.pop('destination_lease', None)) - options['source_modified_access_conditions'] = source_mod_conditions - options['lease_access_conditions'] = dest_access_conditions + options.update(source_mod_conditions) + options['lease_id'] = dest_access_conditions options['tier'] = tier.value if tier else None options['seal_blob'] = kwargs.pop('seal_destination_blob', None) options['blob_tags_string'] = blob_tags_string @@ -696,7 +655,7 @@ def _abort_copy_options(copy_id: Union[str, Dict[str, Any], BlobProperties], **k copy_id = copy_id['copy_id'] options = { 'copy_id': copy_id, - 'lease_access_conditions': access_conditions, + 'lease_id': access_conditions, 'timeout': kwargs.pop('timeout', None)} options.update(kwargs) return options @@ -719,12 +678,8 @@ def _stage_block_options( data = data[:length] validate_content = kwargs.pop('validate_content', False) - cpk_scope_info = get_cpk_scope_info(kwargs) + cpk_scope = get_cpk_scope_info(kwargs) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) options = { 'block_id': block_id, @@ -732,10 +687,10 @@ def _stage_block_options( 'body': data, 'transactional_content_md5': None, 'timeout': kwargs.pop('timeout', None), - 'lease_access_conditions': access_conditions, + 'lease_id': access_conditions, 'validate_content': validate_content, - 'cpk_scope_info': cpk_scope_info, - 'cpk_info': cpk_info, + **cpk_scope, + **get_cpk_info(cpk), 'cls': return_response_headers, } options.update(kwargs) @@ -762,20 +717,9 @@ def _stage_block_from_url_options( if source_offset is not None: range_header, _ = validate_and_format_range_headers(source_offset, source_length) - cpk_scope_info = get_cpk_scope_info(kwargs) + cpk_scope = get_cpk_scope_info(kwargs) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) source_cpk = kwargs.pop('source_cpk', None) - source_cpk_info = None - if source_cpk: - source_cpk_info = SourceCpkInfo( - source_encryption_key=source_cpk.key_value, - source_encryption_key_sha256=source_cpk.key_hash, - source_encryption_algorithm=source_cpk.algorithm - ) options = { 'copy_source_authorization': source_authorization, @@ -786,10 +730,10 @@ def _stage_block_from_url_options( 'source_range': range_header, 'source_content_md5': bytearray(source_content_md5) if source_content_md5 else None, 'timeout': kwargs.pop('timeout', None), - 'lease_access_conditions': access_conditions, - 'cpk_scope_info': cpk_scope_info, - 'cpk_info': cpk_info, - 'source_cpk_info': source_cpk_info, + 'lease_id': access_conditions, + **cpk_scope, + **get_cpk_info(cpk), + **get_source_cpk_info(source_cpk), 'cls': return_response_headers, } options.update(kwargs) @@ -837,12 +781,8 @@ def _commit_block_list_options( ) validate_content = kwargs.pop('validate_content', False) - cpk_scope_info = get_cpk_scope_info(kwargs) + cpk_scope = get_cpk_scope_info(kwargs) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) immutability_policy = kwargs.pop('immutability_policy', None) if immutability_policy: @@ -854,14 +794,14 @@ def _commit_block_list_options( options = { 'blocks': block_lookup, - 'blob_http_headers': blob_headers, - 'lease_access_conditions': access_conditions, + **_get_blob_http_headers_dict(blob_headers), + 'lease_id': access_conditions, 'timeout': kwargs.pop('timeout', None), - 'modified_access_conditions': mod_conditions, + **mod_conditions, 'cls': return_response_headers, 'validate_content': validate_content, - 'cpk_scope_info': cpk_scope_info, - 'cpk_info': cpk_info, + **cpk_scope, + **get_cpk_info(cpk), 'tier': tier.value if tier else None, 'blob_tags_string': blob_tags_string, 'headers': headers @@ -876,13 +816,13 @@ def _set_blob_tags_options( )-> Dict[str, Any]: serialized_tags = serialize_blob_tags(tags) access_conditions = get_access_conditions(kwargs.pop('lease', None)) - mod_conditions = ModifiedAccessConditions(if_tags=kwargs.pop('if_tags_match_condition', None)) + mod_conditions = {'if_tags': kwargs.pop('if_tags_match_condition', None)} blob_mod_conditions = get_blob_modify_conditions(kwargs) options = { 'tags': serialized_tags, - 'lease_access_conditions': access_conditions, - 'modified_access_conditions': mod_conditions, + 'lease_id': access_conditions, + **mod_conditions, 'blob_modified_access_conditions': blob_mod_conditions, 'version_id': version_id, 'cls': return_response_headers @@ -892,14 +832,14 @@ def _set_blob_tags_options( def _get_blob_tags_options(version_id: Optional[str], snapshot: Optional[str], **kwargs: Any) -> Dict[str, Any]: access_conditions = get_access_conditions(kwargs.pop('lease', None)) - mod_conditions = ModifiedAccessConditions(if_tags=kwargs.pop('if_tags_match_condition', None)) + mod_conditions = {'if_tags': kwargs.pop('if_tags_match_condition', None)} blob_mod_conditions = get_blob_modify_conditions(kwargs) options = { 'version_id': version_id, 'snapshot': snapshot, - 'lease_access_conditions': access_conditions, - 'modified_access_conditions': mod_conditions, + 'lease_id': access_conditions, + **mod_conditions, 'blob_modified_access_conditions': blob_mod_conditions, 'timeout': kwargs.pop('timeout', None), 'cls': return_headers_and_deserialized @@ -924,8 +864,8 @@ def _get_page_ranges_options( ) options = { 'snapshot': snapshot, - 'lease_access_conditions': access_conditions, - 'modified_access_conditions': mod_conditions, + 'lease_id': access_conditions, + **mod_conditions, 'timeout': kwargs.pop('timeout', None), 'range': page_range} if previous_snapshot_diff: @@ -952,8 +892,8 @@ def _set_sequence_number_options( 'sequence_number_action': sequence_number_action, 'timeout': kwargs.pop('timeout', None), 'blob_sequence_number': sequence_number, - 'lease_access_conditions': access_conditions, - 'modified_access_conditions': mod_conditions, + 'lease_id': access_conditions, + **mod_conditions, 'cls': return_response_headers} options.update(kwargs) return options @@ -965,16 +905,12 @@ def _resize_blob_options(size: int, **kwargs: Any) -> Dict[str, Any]: raise ValueError("A content length must be specified for a Page Blob.") cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) options = { 'blob_content_length': size, 'timeout': kwargs.pop('timeout', None), - 'lease_access_conditions': access_conditions, - 'modified_access_conditions': mod_conditions, - 'cpk_info': cpk_info, + 'lease_id': access_conditions, + **mod_conditions, + **get_cpk_info(cpk), 'cls': return_response_headers} options.update(kwargs) return options @@ -994,31 +930,23 @@ def _upload_page_options( end_range = offset + length - 1 # Reformat to an inclusive range index content_range = f'bytes={offset}-{end_range}' # type: ignore access_conditions = get_access_conditions(kwargs.pop('lease', None)) - seq_conditions = SequenceNumberAccessConditions( - if_sequence_number_less_than_or_equal_to=kwargs.pop('if_sequence_number_lte', None), - if_sequence_number_less_than=kwargs.pop('if_sequence_number_lt', None), - if_sequence_number_equal_to=kwargs.pop('if_sequence_number_eq', None) - ) + seq_conditions = get_sequence_conditions(kwargs) mod_conditions = get_modify_conditions(kwargs) - cpk_scope_info = get_cpk_scope_info(kwargs) + cpk_scope = get_cpk_scope_info(kwargs) validate_content = kwargs.pop('validate_content', False) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) options = { 'body': page[:length], 'content_length': length, 'transactional_content_md5': None, 'timeout': kwargs.pop('timeout', None), 'range': content_range, - 'lease_access_conditions': access_conditions, - 'sequence_number_access_conditions': seq_conditions, - 'modified_access_conditions': mod_conditions, + 'lease_id': access_conditions, + **seq_conditions, + **mod_conditions, 'validate_content': validate_content, - 'cpk_scope_info': cpk_scope_info, - 'cpk_info': cpk_info, + **cpk_scope, + **get_cpk_info(cpk), 'cls': return_response_headers} options.update(kwargs) return options @@ -1044,31 +972,16 @@ def _upload_pages_from_url_options( destination_range = f'bytes={offset}-{end_range}' source_range = f'bytes={source_offset}-{source_offset + length - 1}' # should subtract 1 here? - seq_conditions = SequenceNumberAccessConditions( - if_sequence_number_less_than_or_equal_to=kwargs.pop('if_sequence_number_lte', None), - if_sequence_number_less_than=kwargs.pop('if_sequence_number_lt', None), - if_sequence_number_equal_to=kwargs.pop('if_sequence_number_eq', None) - ) + seq_conditions = get_sequence_conditions(kwargs) source_authorization = kwargs.pop('source_authorization', None) source_token_intent = kwargs.pop('source_token_intent', None) access_conditions = get_access_conditions(kwargs.pop('lease', None)) mod_conditions = get_modify_conditions(kwargs) source_mod_conditions = get_source_conditions(kwargs) - cpk_scope_info = get_cpk_scope_info(kwargs) + cpk_scope = get_cpk_scope_info(kwargs) source_content_md5 = kwargs.pop('source_content_md5', None) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) source_cpk = kwargs.pop('source_cpk', None) - source_cpk_info = None - if source_cpk: - source_cpk_info = SourceCpkInfo( - source_encryption_key=source_cpk.key_value, - source_encryption_key_sha256=source_cpk.key_hash, - source_encryption_algorithm=source_cpk.algorithm - ) options = { 'copy_source_authorization': source_authorization, @@ -1079,13 +992,13 @@ def _upload_pages_from_url_options( 'range': destination_range, 'source_content_md5': bytearray(source_content_md5) if source_content_md5 else None, 'timeout': kwargs.pop('timeout', None), - 'lease_access_conditions': access_conditions, - 'sequence_number_access_conditions': seq_conditions, - 'modified_access_conditions': mod_conditions, - 'source_modified_access_conditions': source_mod_conditions, - 'cpk_scope_info': cpk_scope_info, - 'cpk_info': cpk_info, - 'source_cpk_info': source_cpk_info, + 'lease_id': access_conditions, + **seq_conditions, + **mod_conditions, + **source_mod_conditions, + **cpk_scope, + **get_cpk_info(cpk), + **get_source_cpk_info(source_cpk), 'cls': return_response_headers } options.update(kwargs) @@ -1097,11 +1010,7 @@ def _clear_page_options( **kwargs: Any ) -> Dict[str, Any]: access_conditions = get_access_conditions(kwargs.pop('lease', None)) - seq_conditions = SequenceNumberAccessConditions( - if_sequence_number_less_than_or_equal_to=kwargs.pop('if_sequence_number_lte', None), - if_sequence_number_less_than=kwargs.pop('if_sequence_number_lt', None), - if_sequence_number_equal_to=kwargs.pop('if_sequence_number_eq', None) - ) + seq_conditions = get_sequence_conditions(kwargs) mod_conditions = get_modify_conditions(kwargs) if offset is None or offset % 512 != 0: raise ValueError("offset must be an integer that aligns with 512 page size") @@ -1111,19 +1020,15 @@ def _clear_page_options( content_range = f'bytes={offset}-{end_range}' cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) options = { 'content_length': 0, 'timeout': kwargs.pop('timeout', None), 'range': content_range, - 'lease_access_conditions': access_conditions, - 'sequence_number_access_conditions': seq_conditions, - 'modified_access_conditions': mod_conditions, - 'cpk_info': cpk_info, + 'lease_id': access_conditions, + **seq_conditions, + **mod_conditions, + **get_cpk_info(cpk), 'cls': return_response_headers} options.update(kwargs) return options @@ -1144,34 +1049,23 @@ def _append_block_options( 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( - max_size=maxsize_condition, - append_position=appendpos_condition - ) + append_conditions = get_append_conditions(kwargs) access_conditions = get_access_conditions(kwargs.pop('lease', None)) mod_conditions = get_modify_conditions(kwargs) - cpk_scope_info = get_cpk_scope_info(kwargs) + cpk_scope = get_cpk_scope_info(kwargs) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) options = { 'body': data, 'content_length': length, 'timeout': kwargs.pop('timeout', None), 'transactional_content_md5': None, - 'lease_access_conditions': access_conditions, - 'append_position_access_conditions': append_conditions, - 'modified_access_conditions': mod_conditions, + 'lease_id': access_conditions, + **append_conditions, + **mod_conditions, 'validate_content': validate_content, - 'cpk_scope_info': cpk_scope_info, - 'cpk_info': cpk_info, + **cpk_scope, + **get_cpk_info(cpk), 'cls': return_response_headers} options.update(kwargs) return options @@ -1194,37 +1088,16 @@ def _append_block_from_url_options( elif source_offset is not None: source_range = f"bytes={source_offset}-" - 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( - max_size=maxsize_condition, - append_position=appendpos_condition - ) + append_conditions = get_append_conditions(kwargs) source_authorization = kwargs.pop('source_authorization', None) source_token_intent = kwargs.pop('source_token_intent', None) access_conditions = get_access_conditions(kwargs.pop('lease', None)) mod_conditions = get_modify_conditions(kwargs) source_mod_conditions = get_source_conditions(kwargs) - cpk_scope_info = get_cpk_scope_info(kwargs) + cpk_scope = get_cpk_scope_info(kwargs) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - cpk_info = CpkInfo( - encryption_key=cpk.key_value, - encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm - ) source_cpk = kwargs.pop('source_cpk', None) - source_cpk_info = None - if source_cpk: - source_cpk_info = SourceCpkInfo( - source_encryption_key=source_cpk.key_value, - source_encryption_key_sha256=source_cpk.key_hash, - source_encryption_algorithm=source_cpk.algorithm - ) options = { 'copy_source_authorization': source_authorization, @@ -1234,13 +1107,13 @@ def _append_block_from_url_options( 'source_range': source_range, 'source_content_md5': source_content_md5, 'transactional_content_md5': None, - 'lease_access_conditions': access_conditions, - 'append_position_access_conditions': append_conditions, - 'modified_access_conditions': mod_conditions, - 'source_modified_access_conditions': source_mod_conditions, - 'cpk_scope_info': cpk_scope_info, - 'cpk_info': cpk_info, - 'source_cpk_info': source_cpk_info, + 'lease_id': access_conditions, + **append_conditions, + **mod_conditions, + **source_mod_conditions, + **cpk_scope, + **get_cpk_info(cpk), + **get_source_cpk_info(source_cpk), 'cls': return_response_headers, 'timeout': kwargs.pop('timeout', None) } @@ -1248,20 +1121,15 @@ def _append_block_from_url_options( return options def _seal_append_blob_options(**kwargs: Any) -> Dict[str, Any]: - appendpos_condition = kwargs.pop('appendpos_condition', None) - append_conditions = None - if appendpos_condition is not None: - append_conditions = AppendPositionAccessConditions( - append_position=appendpos_condition - ) + append_conditions = get_append_conditions(kwargs) access_conditions = get_access_conditions(kwargs.pop('lease', None)) mod_conditions = get_modify_conditions(kwargs) options = { 'timeout': kwargs.pop('timeout', None), - 'lease_access_conditions': access_conditions, - 'append_position_access_conditions': append_conditions, - 'modified_access_conditions': mod_conditions, + 'lease_id': access_conditions, + **append_conditions, + **mod_conditions, 'cls': return_response_headers} options.update(kwargs) return options @@ -1311,3 +1179,4 @@ def _from_blob_url( else: path_snapshot = snapshot return (account_url, container_name, blob_name, path_snapshot) + 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 2333d9558d11..3bcc0e4fac11 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 @@ -22,8 +22,8 @@ from ._container_client import ContainerClient from ._deserialize import service_properties_deserialize, service_stats_deserialize from ._encryption import StorageEncryptionMixin -from ._generated import AzureBlobStorage -from ._generated.models import KeyInfo, StorageServiceProperties +from ._generated.azure.storage.blobs import CombinedBlobClient as AzureBlobStorage +from ._generated.azure.storage.blobs.models import KeyInfo, BlobServiceProperties as StorageServiceProperties from ._list_blobs_helper import FilteredBlobPaged from ._models import BlobProperties, ContainerProperties, ContainerPropertiesPaged, CorsRule from ._serialize import get_api_version @@ -694,7 +694,7 @@ def _rename_container(self, name: str, new_name: str, **kwargs: Any) -> Containe except AttributeError: kwargs['source_lease_id'] = lease try: - renamed_container._client.container.rename(name, **kwargs) # pylint: disable = protected-access + renamed_container._client.container.rename(source_container_name=name, **kwargs) # pylint: disable = protected-access return renamed_container except HttpResponseError as error: process_storage_error(error) 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 0415b58cec0d..bba31178ace6 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 @@ -29,8 +29,8 @@ from ._deserialize import deserialize_container_properties from ._download import StorageStreamDownloader from ._encryption import StorageEncryptionMixin -from ._generated import AzureBlobStorage -from ._generated.models import SignedIdentifier +from ._generated.azure.storage.blobs import CombinedBlobClient as AzureBlobStorage +from ._generated.azure.storage.blobs.models import SignedIdentifier from ._lease import BlobLeaseClient from ._list_blobs_helper import ( BlobNamesPaged, @@ -327,9 +327,9 @@ def create_container( return self._client.container.create( # type: ignore timeout=timeout, access=public_access, - container_cpk_scope_info=container_cpk_scope_info, cls=return_response_headers, headers=headers, + **container_cpk_scope_info, **kwargs) except HttpResponseError as error: process_storage_error(error) @@ -367,7 +367,7 @@ def _rename_container(self, new_name: str, **kwargs: Any) -> "ContainerClient": _pipeline=self._pipeline, _location_mode=self._location_mode, _hosts=self._hosts, require_encryption=self.require_encryption, encryption_version=self.encryption_version, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function) - renamed_container._client.container.rename(self.container_name, **kwargs) # pylint: disable = protected-access + renamed_container._client.container.rename(source_container_name=self.container_name, **kwargs) # pylint: disable = protected-access return renamed_container except HttpResponseError as error: process_storage_error(error) @@ -425,8 +425,8 @@ def delete_container(self, **kwargs: Any) -> None: try: self._client.container.delete( timeout=timeout, - lease_access_conditions=access_conditions, - modified_access_conditions=mod_conditions, + lease_id=access_conditions, + **mod_conditions, **kwargs) except HttpResponseError as error: process_storage_error(error) @@ -539,7 +539,7 @@ def get_container_properties(self, **kwargs: Any) -> ContainerProperties: try: response = self._client.container.get_properties( timeout=timeout, - lease_access_conditions=access_conditions, + lease_id=access_conditions, cls=deserialize_container_properties, **kwargs) except HttpResponseError as error: @@ -629,9 +629,10 @@ def set_container_metadata( timeout = kwargs.pop('timeout', None) try: return self._client.container.set_metadata( # type: ignore + metadata=metadata, timeout=timeout, - lease_access_conditions=access_conditions, - modified_access_conditions=mod_conditions, + lease_id=access_conditions, + **mod_conditions, cls=return_response_headers, headers=headers, **kwargs) @@ -704,7 +705,7 @@ def get_container_access_policy(self, **kwargs: Any) -> Dict[str, Any]: try: response, identifiers = self._client.container.get_access_policy( timeout=timeout, - lease_access_conditions=access_conditions, + lease_id=access_conditions, cls=return_headers_and_deserialized, **kwargs) except HttpResponseError as error: @@ -785,8 +786,8 @@ def set_container_access_policy( container_acl=signed_identifiers or None, timeout=timeout, access=public_access, - lease_access_conditions=access_conditions, - modified_access_conditions=mod_conditions, + lease_id=access_conditions, + **mod_conditions, cls=return_response_headers, **kwargs)) except HttpResponseError as error: diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_container_client.pyi b/sdk/storage/azure-storage-blob/azure/storage/blob/_container_client.pyi index 8825670779d7..ce84728b66ad 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_container_client.pyi +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_container_client.pyi @@ -31,7 +31,7 @@ from ._blob_client import BlobClient from ._blob_service_client import BlobServiceClient from ._download import StorageStreamDownloader from ._encryption import StorageEncryptionMixin -from ._generated.models import RehydratePriority +from ._generated.azure.storage.blobs.models import RehydratePriority from ._lease import BlobLeaseClient from ._list_blobs_helper import BlobPrefix from ._models import ( diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_container_client_helpers.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_container_client_helpers.py index 82edd48dffb8..c75126450ab6 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_container_client_helpers.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_container_client_helpers.py @@ -10,14 +10,13 @@ from azure.core import MatchConditions from azure.core.pipeline.transport import HttpRequest from ._blob_client_helpers import _generic_delete_blob_options -from ._generated import AzureBlobStorage +from ._generated.azure.storage.blobs import CombinedBlobClient as AzureBlobStorage from ._models import BlobProperties from ._shared.base_client import parse_query if TYPE_CHECKING: from azure.storage.blob import RehydratePriority from urllib.parse import ParseResult - from ._generated.models import LeaseAccessConditions, ModifiedAccessConditions from ._models import PremiumPageBlobTier, StandardBlobTier @@ -49,29 +48,14 @@ def _generate_delete_blobs_subrequest_options( snapshot: Optional[str] = None, version_id: Optional[str] = None, delete_snapshots: Optional[str] = None, - lease_access_conditions: Optional["LeaseAccessConditions"] = None, - modified_access_conditions: Optional["ModifiedAccessConditions"] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[str] = None, + if_unmodified_since: Optional[str] = None, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + if_tags: Optional[str] = None, **kwargs ) -> Tuple[Dict[str, Any], Dict[str, Any]]: - lease_id = None - if lease_access_conditions is not None: - lease_id = lease_access_conditions.lease_id - if_modified_since = None - if modified_access_conditions is not None: - if_modified_since = modified_access_conditions.if_modified_since - if_unmodified_since = None - if modified_access_conditions is not None: - if_unmodified_since = modified_access_conditions.if_unmodified_since - if_match = None - if modified_access_conditions is not None: - if_match = modified_access_conditions.if_match - if_none_match = None - if modified_access_conditions is not None: - if_none_match = modified_access_conditions.if_none_match - if_tags = None - if modified_access_conditions is not None: - if_tags = modified_access_conditions.if_tags - # Construct parameters timeout = kwargs.pop('timeout', None) query_parameters = {} @@ -176,7 +160,7 @@ def _generate_set_tiers_subrequest_options( snapshot: Optional[str] = None, version_id: Optional[str] = None, rehydrate_priority: Optional["RehydratePriority"] = None, - lease_access_conditions: Optional["LeaseAccessConditions"] = None, + lease_id: Optional[str] = None, **kwargs: Any ) -> Tuple[Dict[str, Any], Dict[str, Any]]: if not tier: @@ -185,10 +169,6 @@ def _generate_set_tiers_subrequest_options( raise ValueError("Snapshot and version_id cannot be set at the same time") if_tags = kwargs.pop('if_tags', None) - lease_id = None - if lease_access_conditions is not None: - lease_id = lease_access_conditions.lease_id - comp = "tier" timeout = kwargs.pop('timeout', None) # Construct parameters @@ -245,7 +225,7 @@ def _generate_set_tiers_options( snapshot=blob.get('snapshot'), version_id=blob.get('version_id'), rehydrate_priority=rehydrate_priority or blob.get('rehydrate_priority'), - lease_access_conditions=blob.get('lease_id'), + lease_id=blob.get('lease_id'), if_tags=if_tags or blob.get('if_tags_match_condition'), timeout=timeout or blob.get('timeout') ) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_deserialize.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_deserialize.py index 19ec4c07e338..9b43d56a36e9 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_deserialize.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_deserialize.py @@ -29,11 +29,11 @@ if TYPE_CHECKING: from azure.core.pipeline import PipelineResponse - from ._generated.models import ( + from ._generated.azure.storage.blobs.models import ( BlobItemInternal, BlobTags, PageList, - StorageServiceProperties, + BlobServiceProperties as StorageServiceProperties, StorageServiceStats, ) from ._shared.models import LocationMode @@ -156,11 +156,13 @@ def get_blob_properties_from_generated_code(generated: "BlobItemInternal") -> Bl blob.name = generated.name.content #type: ignore blob_type = get_enum_value(generated.properties.blob_type) blob.blob_type = BlobType(blob_type) - blob.etag = generated.properties.etag + blob.etag = generated.properties.e_tag blob.deleted = generated.deleted blob.snapshot = generated.snapshot blob.is_append_blob_sealed = generated.properties.is_sealed - blob.metadata = generated.metadata.additional_properties if generated.metadata else {} # type: ignore [assignment] + blob.metadata = ( # type: ignore [assignment] + {k: v for k, v in generated.metadata.items() if k != 'Encrypted'} if generated.metadata else {} + ) blob.encrypted_metadata = generated.metadata.encrypted if generated.metadata else None blob.lease = LeaseProperties._from_generated(generated) # pylint: disable=protected-access blob.copy = CopyProperties._from_generated(generated) # pylint: disable=protected-access @@ -182,7 +184,8 @@ def get_blob_properties_from_generated_code(generated: "BlobItemInternal") -> Bl blob.is_current_version = generated.is_current_version blob.tag_count = generated.properties.tag_count blob.tags = parse_tags(generated.blob_tags) - blob.object_replication_source_properties = deserialize_ors_policies(generated.object_replication_metadata) + blob.object_replication_source_properties = deserialize_ors_policies( + dict(generated.object_replication_metadata) if generated.object_replication_metadata else None) blob.last_accessed_on = generated.properties.last_accessed_on blob.immutability_policy = ImmutabilityPolicy._from_generated(generated) # pylint: disable=protected-access blob.has_legal_hold = generated.properties.legal_hold diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_download.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_download.py index 6b4482f3c621..e098f997623f 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_download.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_download.py @@ -32,8 +32,8 @@ if TYPE_CHECKING: from codecs import IncrementalDecoder from ._encryption import _EncryptionData - from ._generated import AzureBlobStorage - from ._generated.operations import BlobOperations + from ._generated.azure.storage.blobs import CombinedBlobClient as AzureBlobStorage + from ._generated.azure.storage.blobs.operations import BlobOperations from ._models import BlobProperties from ._shared.models import StorageConfiguration diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/CHANGELOG.md b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/CHANGELOG.md new file mode 100644 index 000000000000..b957b2575b48 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/CHANGELOG.md @@ -0,0 +1,7 @@ +# Release History + +## 1.0.0b1 (1970-01-01) + +### Other Changes + + - Initial version \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/LICENSE b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/LICENSE new file mode 100644 index 000000000000..63447fd8bbbf --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) Microsoft Corporation. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/MANIFEST.in b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/MANIFEST.in new file mode 100644 index 000000000000..b471398ef147 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/MANIFEST.in @@ -0,0 +1,7 @@ +include *.md +include LICENSE +include azure/storage/blobs/py.typed +recursive-include tests *.py +recursive-include samples *.py *.md +include azure/__init__.py +include azure/storage/__init__.py diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/__init__.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/__init__.py index c57ce36e4daa..5b396cd202e8 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/__init__.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/__init__.py @@ -1,29 +1,5 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- +# ------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# Licensed under the MIT License. See License.txt in the project root for +# license information. # -------------------------------------------------------------------------- -# pylint: disable=wrong-import-position - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from ._patch import * # pylint: disable=unused-wildcard-import - -from ._azure_blob_storage import AzureBlobStorage # type: ignore - -try: - from ._patch import __all__ as _patch_all - from ._patch import * -except ImportError: - _patch_all = [] -from ._patch import patch_sdk as _patch_sdk - -__all__ = [ - "AzureBlobStorage", -] -__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore - -_patch_sdk() diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_azure_blob_storage.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_azure_blob_storage.py deleted file mode 100644 index 482adac5cd92..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_azure_blob_storage.py +++ /dev/null @@ -1,119 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from copy import deepcopy -from typing import Any -from typing_extensions import Self - -from azure.core import PipelineClient -from azure.core.pipeline import policies -from azure.core.rest import HttpRequest, HttpResponse - -from . import models as _models -from ._configuration import AzureBlobStorageConfiguration -from ._utils.serialization import Deserializer, Serializer -from .operations import ( - AppendBlobOperations, - BlobOperations, - BlockBlobOperations, - ContainerOperations, - PageBlobOperations, - ServiceOperations, -) - - -class AzureBlobStorage: # pylint: disable=client-accepts-api-version-keyword - """AzureBlobStorage. - - :ivar service: ServiceOperations operations - :vartype service: azure.storage.blob.operations.ServiceOperations - :ivar container: ContainerOperations operations - :vartype container: azure.storage.blob.operations.ContainerOperations - :ivar blob: BlobOperations operations - :vartype blob: azure.storage.blob.operations.BlobOperations - :ivar page_blob: PageBlobOperations operations - :vartype page_blob: azure.storage.blob.operations.PageBlobOperations - :ivar append_blob: AppendBlobOperations operations - :vartype append_blob: azure.storage.blob.operations.AppendBlobOperations - :ivar block_blob: BlockBlobOperations operations - :vartype block_blob: azure.storage.blob.operations.BlockBlobOperations - :param url: The URL of the service account, container, or blob that is the target of the - desired operation. Required. - :type url: str - :param version: Specifies the version of the operation to use for this request. Required. - :type version: str - :param base_url: Service URL. Required. Default value is "". - :type base_url: str - """ - - def __init__( # pylint: disable=missing-client-constructor-parameter-credential - self, url: str, version: str, base_url: str = "", **kwargs: Any - ) -> None: - self._config = AzureBlobStorageConfiguration(url=url, version=version, **kwargs) - - _policies = kwargs.pop("policies", None) - if _policies is None: - _policies = [ - policies.RequestIdPolicy(**kwargs), - self._config.headers_policy, - self._config.user_agent_policy, - self._config.proxy_policy, - policies.ContentDecodePolicy(**kwargs), - self._config.redirect_policy, - self._config.retry_policy, - self._config.authentication_policy, - self._config.custom_hook_policy, - self._config.logging_policy, - policies.DistributedTracingPolicy(**kwargs), - policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, - self._config.http_logging_policy, - ] - self._client: PipelineClient = PipelineClient(base_url=base_url, policies=_policies, **kwargs) - - client_models = {k: v for k, v in _models.__dict__.items() if isinstance(v, type)} - self._serialize = Serializer(client_models) - self._deserialize = Deserializer(client_models) - self._serialize.client_side_validation = False - self.service = ServiceOperations(self._client, self._config, self._serialize, self._deserialize) - self.container = ContainerOperations(self._client, self._config, self._serialize, self._deserialize) - self.blob = BlobOperations(self._client, self._config, self._serialize, self._deserialize) - self.page_blob = PageBlobOperations(self._client, self._config, self._serialize, self._deserialize) - self.append_blob = AppendBlobOperations(self._client, self._config, self._serialize, self._deserialize) - self.block_blob = BlockBlobOperations(self._client, self._config, self._serialize, self._deserialize) - - def _send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: - """Runs the network request through the client's chained policies. - - >>> from azure.core.rest import HttpRequest - >>> request = HttpRequest("GET", "https://www.example.org/") - - >>> response = client._send_request(request) - - - For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request - - :param request: The network request you want to make. Required. - :type request: ~azure.core.rest.HttpRequest - :keyword bool stream: Whether the response payload will be streamed. Defaults to False. - :return: The response of your network call. Does not do error handling on your response. - :rtype: ~azure.core.rest.HttpResponse - """ - - request_copy = deepcopy(request) - request_copy.url = self._client.format_url(request_copy.url) - return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore - - def close(self) -> None: - self._client.close() - - def __enter__(self) -> Self: - self._client.__enter__() - return self - - def __exit__(self, *exc_details: Any) -> None: - self._client.__exit__(*exc_details) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_configuration.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_configuration.py deleted file mode 100644 index 21c76b55270d..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_configuration.py +++ /dev/null @@ -1,50 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from typing import Any - -from azure.core.pipeline import policies - -VERSION = "unknown" - - -class AzureBlobStorageConfiguration: # pylint: disable=too-many-instance-attributes - """Configuration for AzureBlobStorage. - - Note that all parameters used to create this instance are saved as instance - attributes. - - :param url: The URL of the service account, container, or blob that is the target of the - desired operation. Required. - :type url: str - :param version: Specifies the version of the operation to use for this request. Required. - :type version: str - """ - - def __init__(self, url: str, version: str, **kwargs: Any) -> None: - if url is None: - raise ValueError("Parameter 'url' must not be None.") - if version is None: - raise ValueError("Parameter 'version' must not be None.") - - self.url = url - self.version = version - kwargs.setdefault("sdk_moniker", "azureblobstorage/{}".format(VERSION)) - self.polling_interval = kwargs.get("polling_interval", 30) - self._configure(**kwargs) - - def _configure(self, **kwargs: Any) -> None: - self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) - self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) - self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) - self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) - self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) - self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) - self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) - self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) - self.authentication_policy = kwargs.get("authentication_policy") diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_metadata.json b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_metadata.json new file mode 100644 index 000000000000..f8ecaf5ad3c2 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_metadata.json @@ -0,0 +1,3 @@ +{ + "apiVersion": "2026-04-06" +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_patch.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_patch.py deleted file mode 100644 index f7dd32510333..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_patch.py +++ /dev/null @@ -1,20 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -"""Customize generated code here. - -Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize -""" -from typing import List - -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level - - -def patch_sdk(): - """Do not remove from this file. - - `patch_sdk` is a last resort escape hatch that allows you to do customizations - you can't accomplish using the techniques described in - https://aka.ms/azsdk/python/dpcodegen/python/customize - """ diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/_azure_blob_storage.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/_azure_blob_storage.py deleted file mode 100644 index f7a99bedac3a..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/_azure_blob_storage.py +++ /dev/null @@ -1,121 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from copy import deepcopy -from typing import Any, Awaitable -from typing_extensions import Self - -from azure.core import AsyncPipelineClient -from azure.core.pipeline import policies -from azure.core.rest import AsyncHttpResponse, HttpRequest - -from .. import models as _models -from .._utils.serialization import Deserializer, Serializer -from ._configuration import AzureBlobStorageConfiguration -from .operations import ( - AppendBlobOperations, - BlobOperations, - BlockBlobOperations, - ContainerOperations, - PageBlobOperations, - ServiceOperations, -) - - -class AzureBlobStorage: # pylint: disable=client-accepts-api-version-keyword - """AzureBlobStorage. - - :ivar service: ServiceOperations operations - :vartype service: azure.storage.blob.aio.operations.ServiceOperations - :ivar container: ContainerOperations operations - :vartype container: azure.storage.blob.aio.operations.ContainerOperations - :ivar blob: BlobOperations operations - :vartype blob: azure.storage.blob.aio.operations.BlobOperations - :ivar page_blob: PageBlobOperations operations - :vartype page_blob: azure.storage.blob.aio.operations.PageBlobOperations - :ivar append_blob: AppendBlobOperations operations - :vartype append_blob: azure.storage.blob.aio.operations.AppendBlobOperations - :ivar block_blob: BlockBlobOperations operations - :vartype block_blob: azure.storage.blob.aio.operations.BlockBlobOperations - :param url: The URL of the service account, container, or blob that is the target of the - desired operation. Required. - :type url: str - :param version: Specifies the version of the operation to use for this request. Required. - :type version: str - :param base_url: Service URL. Required. Default value is "". - :type base_url: str - """ - - def __init__( # pylint: disable=missing-client-constructor-parameter-credential - self, url: str, version: str, base_url: str = "", **kwargs: Any - ) -> None: - self._config = AzureBlobStorageConfiguration(url=url, version=version, **kwargs) - - _policies = kwargs.pop("policies", None) - if _policies is None: - _policies = [ - policies.RequestIdPolicy(**kwargs), - self._config.headers_policy, - self._config.user_agent_policy, - self._config.proxy_policy, - policies.ContentDecodePolicy(**kwargs), - self._config.redirect_policy, - self._config.retry_policy, - self._config.authentication_policy, - self._config.custom_hook_policy, - self._config.logging_policy, - policies.DistributedTracingPolicy(**kwargs), - policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, - self._config.http_logging_policy, - ] - self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=base_url, policies=_policies, **kwargs) - - client_models = {k: v for k, v in _models.__dict__.items() if isinstance(v, type)} - self._serialize = Serializer(client_models) - self._deserialize = Deserializer(client_models) - self._serialize.client_side_validation = False - self.service = ServiceOperations(self._client, self._config, self._serialize, self._deserialize) - self.container = ContainerOperations(self._client, self._config, self._serialize, self._deserialize) - self.blob = BlobOperations(self._client, self._config, self._serialize, self._deserialize) - self.page_blob = PageBlobOperations(self._client, self._config, self._serialize, self._deserialize) - self.append_blob = AppendBlobOperations(self._client, self._config, self._serialize, self._deserialize) - self.block_blob = BlockBlobOperations(self._client, self._config, self._serialize, self._deserialize) - - def _send_request( - self, request: HttpRequest, *, stream: bool = False, **kwargs: Any - ) -> Awaitable[AsyncHttpResponse]: - """Runs the network request through the client's chained policies. - - >>> from azure.core.rest import HttpRequest - >>> request = HttpRequest("GET", "https://www.example.org/") - - >>> response = await client._send_request(request) - - - For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request - - :param request: The network request you want to make. Required. - :type request: ~azure.core.rest.HttpRequest - :keyword bool stream: Whether the response payload will be streamed. Defaults to False. - :return: The response of your network call. Does not do error handling on your response. - :rtype: ~azure.core.rest.AsyncHttpResponse - """ - - request_copy = deepcopy(request) - request_copy.url = self._client.format_url(request_copy.url) - return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore - - async def close(self) -> None: - await self._client.close() - - async def __aenter__(self) -> Self: - await self._client.__aenter__() - return self - - async def __aexit__(self, *exc_details: Any) -> None: - await self._client.__aexit__(*exc_details) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/_configuration.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/_configuration.py deleted file mode 100644 index 2b70484605eb..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/_configuration.py +++ /dev/null @@ -1,50 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from typing import Any - -from azure.core.pipeline import policies - -VERSION = "unknown" - - -class AzureBlobStorageConfiguration: # pylint: disable=too-many-instance-attributes - """Configuration for AzureBlobStorage. - - Note that all parameters used to create this instance are saved as instance - attributes. - - :param url: The URL of the service account, container, or blob that is the target of the - desired operation. Required. - :type url: str - :param version: Specifies the version of the operation to use for this request. Required. - :type version: str - """ - - def __init__(self, url: str, version: str, **kwargs: Any) -> None: - if url is None: - raise ValueError("Parameter 'url' must not be None.") - if version is None: - raise ValueError("Parameter 'version' must not be None.") - - self.url = url - self.version = version - kwargs.setdefault("sdk_moniker", "azureblobstorage/{}".format(VERSION)) - self.polling_interval = kwargs.get("polling_interval", 30) - self._configure(**kwargs) - - def _configure(self, **kwargs: Any) -> None: - self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) - self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) - self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) - self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) - self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) - self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) - self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) - self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) - self.authentication_policy = kwargs.get("authentication_policy") diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_append_blob_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_append_blob_operations.py deleted file mode 100644 index df0d342541fc..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_append_blob_operations.py +++ /dev/null @@ -1,762 +0,0 @@ -# pylint: disable=line-too-long,useless-suppression -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -from collections.abc import MutableMapping -import datetime -from typing import Any, Callable, IO, Literal, Optional, TypeVar, Union - -from azure.core import AsyncPipelineClient -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - map_error, -) -from azure.core.pipeline import PipelineResponse -from azure.core.rest import AsyncHttpResponse, HttpRequest -from azure.core.tracing.decorator_async import distributed_trace_async -from azure.core.utils import case_insensitive_dict - -from ... import models as _models -from ..._utils.serialization import Deserializer, Serializer -from ...operations._append_blob_operations import ( - build_append_block_from_url_request, - build_append_block_request, - build_create_request, - build_seal_request, -) -from .._configuration import AzureBlobStorageConfiguration - -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, dict[str, Any]], Any]] - - -class AppendBlobOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.storage.blob.aio.AzureBlobStorage`'s - :attr:`append_blob` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: AzureBlobStorageConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace_async - async def create( # pylint: disable=too-many-locals - self, - content_length: int, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - blob_http_headers: Optional[_models.BlobHTTPHeaders] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Create Append Blob operation creates a new append blob. - - :param content_length: The length of the request. Required. - :type content_length: int - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param legal_hold: Specified if a legal hold should be set on the blob. Default value is None. - :type legal_hold: bool - :param blob_http_headers: Parameter group. Default value is None. - :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - blob_type: Literal["AppendBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "AppendBlob")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _blob_content_type = None - _blob_content_encoding = None - _blob_content_language = None - _blob_content_md5 = None - _blob_cache_control = None - _lease_id = None - _blob_content_disposition = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if blob_http_headers is not None: - _blob_cache_control = blob_http_headers.blob_cache_control - _blob_content_disposition = blob_http_headers.blob_content_disposition - _blob_content_encoding = blob_http_headers.blob_content_encoding - _blob_content_language = blob_http_headers.blob_content_language - _blob_content_md5 = blob_http_headers.blob_content_md5 - _blob_content_type = blob_http_headers.blob_content_type - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_create_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - timeout=timeout, - blob_content_type=_blob_content_type, - blob_content_encoding=_blob_content_encoding, - blob_content_language=_blob_content_language, - blob_content_md5=_blob_content_md5, - blob_cache_control=_blob_cache_control, - metadata=metadata, - lease_id=_lease_id, - blob_content_disposition=_blob_content_disposition, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - blob_tags_string=blob_tags_string, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - legal_hold=legal_hold, - blob_type=blob_type, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def append_block( # pylint: disable=too-many-locals - self, - content_length: int, - body: IO[bytes], - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - request_id_parameter: Optional[str] = None, - structured_body_type: Optional[str] = None, - structured_content_length: Optional[int] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - append_position_access_conditions: Optional[_models.AppendPositionAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Append Block operation commits a new block of data to the end of an existing append blob. - The Append Block operation is permitted only if the blob was created with x-ms-blob-type set to - AppendBlob. Append Block is supported only on version 2015-02-21 version or later. - - :param content_length: The length of the request. Required. - :type content_length: int - :param body: Initial data. Required. - :type body: IO[bytes] - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param transactional_content_crc64: Specify the transactional crc64 for the body, to be - validated by the service. Default value is None. - :type transactional_content_crc64: bytes - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param structured_body_type: Required if the request body is a structured message. Specifies - the message schema version and properties. Default value is None. - :type structured_body_type: str - :param structured_content_length: Required if the request body is a structured message. - Specifies the length of the blob/file content inside the message body. Will always be smaller - than Content-Length. Default value is None. - :type structured_content_length: int - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param append_position_access_conditions: Parameter group. Default value is None. - :type append_position_access_conditions: - ~azure.storage.blob.models.AppendPositionAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["appendblock"] = kwargs.pop("comp", _params.pop("comp", "appendblock")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _max_size = None - _append_position = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if append_position_access_conditions is not None: - _append_position = append_position_access_conditions.append_position - _max_size = append_position_access_conditions.max_size - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - _content = body - - _request = build_append_block_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - timeout=timeout, - transactional_content_md5=transactional_content_md5, - transactional_content_crc64=transactional_content_crc64, - lease_id=_lease_id, - max_size=_max_size, - append_position=_append_position, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - structured_body_type=structured_body_type, - structured_content_length=structured_content_length, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-append-offset"] = self._deserialize( - "str", response.headers.get("x-ms-blob-append-offset") - ) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-structured-body"] = self._deserialize( - "str", response.headers.get("x-ms-structured-body") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def append_block_from_url( # pylint: disable=too-many-locals - self, - source_url: str, - content_length: int, - source_range: Optional[str] = None, - source_content_md5: Optional[bytes] = None, - source_contentcrc64: Optional[bytes] = None, - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - request_id_parameter: Optional[str] = None, - copy_source_authorization: Optional[str] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - append_position_access_conditions: Optional[_models.AppendPositionAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - source_modified_access_conditions: Optional[_models.SourceModifiedAccessConditions] = None, - source_cpk_info: Optional[_models.SourceCpkInfo] = None, - **kwargs: Any - ) -> None: - """The Append Block operation commits a new block of data to the end of an existing append blob - where the contents are read from a source url. The Append Block operation is permitted only if - the blob was created with x-ms-blob-type set to AppendBlob. Append Block is supported only on - version 2015-02-21 version or later. - - :param source_url: Specify a URL to the copy source. Required. - :type source_url: str - :param content_length: The length of the request. Required. - :type content_length: int - :param source_range: Bytes of source data in the specified range. Default value is None. - :type source_range: str - :param source_content_md5: Specify the md5 calculated for the range of bytes that must be read - from the copy source. Default value is None. - :type source_content_md5: bytes - :param source_contentcrc64: Specify the crc64 calculated for the range of bytes that must be - read from the copy source. Default value is None. - :type source_contentcrc64: bytes - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param copy_source_authorization: Only Bearer type is supported. Credentials should be a valid - OAuth access token to copy source. Default value is None. - :type copy_source_authorization: str - :param file_request_intent: Valid value is backup. "backup" Default value is None. - :type file_request_intent: str or ~azure.storage.blob.models.FileShareTokenIntent - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param append_position_access_conditions: Parameter group. Default value is None. - :type append_position_access_conditions: - ~azure.storage.blob.models.AppendPositionAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param source_modified_access_conditions: Parameter group. Default value is None. - :type source_modified_access_conditions: - ~azure.storage.blob.models.SourceModifiedAccessConditions - :param source_cpk_info: Parameter group. Default value is None. - :type source_cpk_info: ~azure.storage.blob.models.SourceCpkInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["appendblock"] = kwargs.pop("comp", _params.pop("comp", "appendblock")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _lease_id = None - _max_size = None - _append_position = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _source_if_modified_since = None - _source_if_unmodified_since = None - _source_if_match = None - _source_if_none_match = None - _source_encryption_key = None - _source_encryption_key_sha256 = None - _source_encryption_algorithm = None - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if append_position_access_conditions is not None: - _append_position = append_position_access_conditions.append_position - _max_size = append_position_access_conditions.max_size - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if source_modified_access_conditions is not None: - _source_if_match = source_modified_access_conditions.source_if_match - _source_if_modified_since = source_modified_access_conditions.source_if_modified_since - _source_if_none_match = source_modified_access_conditions.source_if_none_match - _source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since - if source_cpk_info is not None: - _source_encryption_algorithm = source_cpk_info.source_encryption_algorithm - _source_encryption_key = source_cpk_info.source_encryption_key - _source_encryption_key_sha256 = source_cpk_info.source_encryption_key_sha256 - - _request = build_append_block_from_url_request( - url=self._config.url, - source_url=source_url, - content_length=content_length, - version=self._config.version, - source_range=source_range, - source_content_md5=source_content_md5, - source_contentcrc64=source_contentcrc64, - timeout=timeout, - transactional_content_md5=transactional_content_md5, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - lease_id=_lease_id, - max_size=_max_size, - append_position=_append_position, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - source_if_modified_since=_source_if_modified_since, - source_if_unmodified_since=_source_if_unmodified_since, - source_if_match=_source_if_match, - source_if_none_match=_source_if_none_match, - request_id_parameter=request_id_parameter, - copy_source_authorization=copy_source_authorization, - file_request_intent=file_request_intent, - source_encryption_key=_source_encryption_key, - source_encryption_key_sha256=_source_encryption_key_sha256, - source_encryption_algorithm=_source_encryption_algorithm, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-append-offset"] = self._deserialize( - "str", response.headers.get("x-ms-blob-append-offset") - ) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def seal( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - append_position_access_conditions: Optional[_models.AppendPositionAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Seal operation seals the Append Blob to make it read-only. Seal is supported only on - version 2019-12-12 version or later. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param append_position_access_conditions: Parameter group. Default value is None. - :type append_position_access_conditions: - ~azure.storage.blob.models.AppendPositionAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["seal"] = kwargs.pop("comp", _params.pop("comp", "seal")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _append_position = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if append_position_access_conditions is not None: - _append_position = append_position_access_conditions.append_position - - _request = build_seal_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - append_position=_append_position, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_blob_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_blob_operations.py deleted file mode 100644 index 5645f6b8cdb3..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_blob_operations.py +++ /dev/null @@ -1,3303 +0,0 @@ -# pylint: disable=line-too-long,useless-suppression,too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -from collections.abc import MutableMapping -import datetime -from typing import Any, AsyncIterator, Callable, Literal, Optional, TypeVar, Union - -from azure.core import AsyncPipelineClient -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - StreamClosedError, - StreamConsumedError, - map_error, -) -from azure.core.pipeline import PipelineResponse -from azure.core.rest import AsyncHttpResponse, HttpRequest -from azure.core.tracing.decorator_async import distributed_trace_async -from azure.core.utils import case_insensitive_dict - -from ... import models as _models -from ..._utils.serialization import Deserializer, Serializer -from ...operations._blob_operations import ( - build_abort_copy_from_url_request, - build_acquire_lease_request, - build_break_lease_request, - build_change_lease_request, - build_copy_from_url_request, - build_create_snapshot_request, - build_delete_immutability_policy_request, - build_delete_request, - build_download_request, - build_get_account_info_request, - build_get_properties_request, - build_get_tags_request, - build_query_request, - build_release_lease_request, - build_renew_lease_request, - build_set_expiry_request, - build_set_http_headers_request, - build_set_immutability_policy_request, - build_set_legal_hold_request, - build_set_metadata_request, - build_set_tags_request, - build_set_tier_request, - build_start_copy_from_url_request, - build_undelete_request, -) -from .._configuration import AzureBlobStorageConfiguration - -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, dict[str, Any]], Any]] - - -class BlobOperations: # pylint: disable=too-many-public-methods - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.storage.blob.aio.AzureBlobStorage`'s - :attr:`blob` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: AzureBlobStorageConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace_async - async def download( - self, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - timeout: Optional[int] = None, - range: Optional[str] = None, - range_get_content_md5: Optional[bool] = None, - range_get_content_crc64: Optional[bool] = None, - structured_body_type: Optional[str] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> AsyncIterator[bytes]: - """The Download operation reads or downloads a blob from the system, including its metadata and - properties. You can also call Download to read a snapshot. - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param range: Return only the bytes of the blob in the specified range. Default value is None. - :type range: str - :param range_get_content_md5: When set to true and specified together with the Range, the - service returns the MD5 hash for the range, as long as the range is less than or equal to 4 MB - in size. Default value is None. - :type range_get_content_md5: bool - :param range_get_content_crc64: When set to true and specified together with the Range, the - service returns the CRC64 hash for the range, as long as the range is less than or equal to 4 - MB in size. Default value is None. - :type range_get_content_crc64: bool - :param structured_body_type: Specifies the response content should be returned as a structured - message and specifies the message schema version and properties. Default value is None. - :type structured_body_type: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: AsyncIterator[bytes] or the result of cls(response) - :rtype: AsyncIterator[bytes] - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_download_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - version_id=version_id, - timeout=timeout, - range=range, - lease_id=_lease_id, - range_get_content_md5=range_get_content_md5, - range_get_content_crc64=range_get_content_crc64, - structured_body_type=structured_body_type, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _decompress = kwargs.pop("decompress", True) - _stream = True - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 206]: - try: - await response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - if response.status_code == 200: - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-creation-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-creation-time") - ) - response_headers["x-ms-meta"] = self._deserialize("{str}", response.headers.get("x-ms-meta")) - response_headers["x-ms-or-policy-id"] = self._deserialize("str", response.headers.get("x-ms-or-policy-id")) - response_headers["x-ms-or"] = self._deserialize("{str}", response.headers.get("x-ms-or")) - response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) - response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) - response_headers["Content-Disposition"] = self._deserialize( - "str", response.headers.get("Content-Disposition") - ) - response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) - response_headers["x-ms-copy-completion-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-copy-completion-time") - ) - response_headers["x-ms-copy-status-description"] = self._deserialize( - "str", response.headers.get("x-ms-copy-status-description") - ) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-progress"] = self._deserialize( - "str", response.headers.get("x-ms-copy-progress") - ) - response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - response_headers["x-ms-lease-duration"] = self._deserialize( - "str", response.headers.get("x-ms-lease-duration") - ) - response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) - response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["x-ms-is-current-version"] = self._deserialize( - "bool", response.headers.get("x-ms-is-current-version") - ) - response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-blob-content-md5"] = self._deserialize( - "bytearray", response.headers.get("x-ms-blob-content-md5") - ) - response_headers["x-ms-tag-count"] = self._deserialize("int", response.headers.get("x-ms-tag-count")) - response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) - response_headers["x-ms-last-access-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-last-access-time") - ) - response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") - ) - response_headers["x-ms-immutability-policy-mode"] = self._deserialize( - "str", response.headers.get("x-ms-immutability-policy-mode") - ) - response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) - response_headers["x-ms-structured-body"] = self._deserialize( - "str", response.headers.get("x-ms-structured-body") - ) - response_headers["x-ms-structured-content-length"] = self._deserialize( - "int", response.headers.get("x-ms-structured-content-length") - ) - - if response.status_code == 206: - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-creation-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-creation-time") - ) - response_headers["x-ms-meta"] = self._deserialize("{str}", response.headers.get("x-ms-meta")) - response_headers["x-ms-or-policy-id"] = self._deserialize("str", response.headers.get("x-ms-or-policy-id")) - response_headers["x-ms-or"] = self._deserialize("{str}", response.headers.get("x-ms-or")) - response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) - response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) - response_headers["Content-Disposition"] = self._deserialize( - "str", response.headers.get("Content-Disposition") - ) - response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-copy-completion-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-copy-completion-time") - ) - response_headers["x-ms-copy-status-description"] = self._deserialize( - "str", response.headers.get("x-ms-copy-status-description") - ) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-progress"] = self._deserialize( - "str", response.headers.get("x-ms-copy-progress") - ) - response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - response_headers["x-ms-lease-duration"] = self._deserialize( - "str", response.headers.get("x-ms-lease-duration") - ) - response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) - response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["x-ms-is-current-version"] = self._deserialize( - "bool", response.headers.get("x-ms-is-current-version") - ) - response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-blob-content-md5"] = self._deserialize( - "bytearray", response.headers.get("x-ms-blob-content-md5") - ) - response_headers["x-ms-tag-count"] = self._deserialize("int", response.headers.get("x-ms-tag-count")) - response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) - response_headers["x-ms-last-access-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-last-access-time") - ) - response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") - ) - response_headers["x-ms-immutability-policy-mode"] = self._deserialize( - "str", response.headers.get("x-ms-immutability-policy-mode") - ) - response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) - response_headers["x-ms-structured-body"] = self._deserialize( - "str", response.headers.get("x-ms-structured-body") - ) - response_headers["x-ms-structured-content-length"] = self._deserialize( - "int", response.headers.get("x-ms-structured-content-length") - ) - - deserialized = response.stream_download(self._client._pipeline, decompress=_decompress) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def get_properties( - self, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Get Properties operation returns all user-defined metadata, standard HTTP properties, and - system properties for the blob. It does not return the content of the blob. - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_get_properties_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - version_id=version_id, - timeout=timeout, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-creation-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-creation-time") - ) - response_headers["x-ms-meta"] = self._deserialize("{str}", response.headers.get("x-ms-meta")) - response_headers["x-ms-or-policy-id"] = self._deserialize("str", response.headers.get("x-ms-or-policy-id")) - response_headers["x-ms-or"] = self._deserialize("{str}", response.headers.get("x-ms-or")) - response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) - response_headers["x-ms-copy-completion-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-copy-completion-time") - ) - response_headers["x-ms-copy-status-description"] = self._deserialize( - "str", response.headers.get("x-ms-copy-status-description") - ) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-progress"] = self._deserialize("str", response.headers.get("x-ms-copy-progress")) - response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - response_headers["x-ms-incremental-copy"] = self._deserialize( - "bool", response.headers.get("x-ms-incremental-copy") - ) - response_headers["x-ms-copy-destination-snapshot"] = self._deserialize( - "str", response.headers.get("x-ms-copy-destination-snapshot") - ) - response_headers["x-ms-lease-duration"] = self._deserialize("str", response.headers.get("x-ms-lease-duration")) - response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) - response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) - response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) - response_headers["Content-Disposition"] = self._deserialize("str", response.headers.get("Content-Disposition")) - response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) - response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-access-tier"] = self._deserialize("str", response.headers.get("x-ms-access-tier")) - response_headers["x-ms-access-tier-inferred"] = self._deserialize( - "bool", response.headers.get("x-ms-access-tier-inferred") - ) - response_headers["x-ms-archive-status"] = self._deserialize("str", response.headers.get("x-ms-archive-status")) - response_headers["x-ms-access-tier-change-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-access-tier-change-time") - ) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["x-ms-is-current-version"] = self._deserialize( - "bool", response.headers.get("x-ms-is-current-version") - ) - response_headers["x-ms-tag-count"] = self._deserialize("int", response.headers.get("x-ms-tag-count")) - response_headers["x-ms-expiry-time"] = self._deserialize("rfc-1123", response.headers.get("x-ms-expiry-time")) - response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) - response_headers["x-ms-rehydrate-priority"] = self._deserialize( - "str", response.headers.get("x-ms-rehydrate-priority") - ) - response_headers["x-ms-last-access-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-last-access-time") - ) - response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") - ) - response_headers["x-ms-immutability-policy-mode"] = self._deserialize( - "str", response.headers.get("x-ms-immutability-policy-mode") - ) - response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def delete( - self, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - timeout: Optional[int] = None, - delete_snapshots: Optional[Union[str, _models.DeleteSnapshotsOptionType]] = None, - request_id_parameter: Optional[str] = None, - blob_delete_type: Literal["Permanent"] = "Permanent", - access_tier_if_modified_since: Optional[datetime.datetime] = None, - access_tier_if_unmodified_since: Optional[datetime.datetime] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """If the storage account's soft delete feature is disabled then, when a blob is deleted, it is - permanently removed from the storage account. If the storage account's soft delete feature is - enabled, then, when a blob is deleted, it is marked for deletion and becomes inaccessible - immediately. However, the blob service retains the blob or snapshot for the number of days - specified by the DeleteRetentionPolicy section of [Storage service properties] - (Set-Blob-Service-Properties.md). After the specified number of days has passed, the blob's - data is permanently removed from the storage account. Note that you continue to be charged for - the soft-deleted blob's storage until it is permanently removed. Use the List Blobs API and - specify the "include=deleted" query parameter to discover which blobs and snapshots have been - soft deleted. You can then use the Undelete Blob API to restore a soft-deleted blob. All other - operations on a soft-deleted blob or snapshot causes the service to return an HTTP status code - of 404 (ResourceNotFound). - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param delete_snapshots: Required if the blob has associated snapshots. Specify one of the - following two options: include: Delete the base blob and all of its snapshots. only: Delete - only the blob's snapshots and not the blob itself. Known values are: "include" and "only". - Default value is None. - :type delete_snapshots: str or ~azure.storage.blob.models.DeleteSnapshotsOptionType - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_delete_type: Optional. Only possible value is 'permanent', which specifies to - permanently delete a blob if blob soft delete is enabled. Known values are "Permanent" and - None. Default value is "Permanent". - :type blob_delete_type: str - :param access_tier_if_modified_since: Specify this header value to operate only on a blob if - the access-tier has been modified since the specified date/time. Default value is None. - :type access_tier_if_modified_since: ~datetime.datetime - :param access_tier_if_unmodified_since: Specify this header value to operate only on a blob if - the access-tier has not been modified since the specified date/time. Default value is None. - :type access_tier_if_unmodified_since: ~datetime.datetime - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_delete_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - version_id=version_id, - timeout=timeout, - lease_id=_lease_id, - delete_snapshots=delete_snapshots, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - blob_delete_type=blob_delete_type, - access_tier_if_modified_since=access_tier_if_modified_since, - access_tier_if_unmodified_since=access_tier_if_unmodified_since, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def undelete( - self, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any - ) -> None: - """Undelete a blob that was previously soft deleted. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["undelete"] = kwargs.pop("comp", _params.pop("comp", "undelete")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_undelete_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def set_expiry( - self, - expiry_options: Union[str, _models.BlobExpiryOptions], - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - expires_on: Optional[str] = None, - **kwargs: Any - ) -> None: - """Sets the time a blob will expire and be deleted. - - :param expiry_options: Required. Indicates mode of the expiry time. Known values are: - "NeverExpire", "RelativeToCreation", "RelativeToNow", and "Absolute". Required. - :type expiry_options: str or ~azure.storage.blob.models.BlobExpiryOptions - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param expires_on: The time to set the blob to expiry. Default value is None. - :type expires_on: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["expiry"] = kwargs.pop("comp", _params.pop("comp", "expiry")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_set_expiry_request( - url=self._config.url, - expiry_options=expiry_options, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - expires_on=expires_on, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def set_http_headers( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - blob_http_headers: Optional[_models.BlobHTTPHeaders] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Set HTTP Headers operation sets system properties on the blob. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_http_headers: Parameter group. Default value is None. - :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _blob_cache_control = None - _blob_content_type = None - _blob_content_md5 = None - _blob_content_encoding = None - _blob_content_language = None - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _blob_content_disposition = None - if blob_http_headers is not None: - _blob_cache_control = blob_http_headers.blob_cache_control - _blob_content_disposition = blob_http_headers.blob_content_disposition - _blob_content_encoding = blob_http_headers.blob_content_encoding - _blob_content_language = blob_http_headers.blob_content_language - _blob_content_md5 = blob_http_headers.blob_content_md5 - _blob_content_type = blob_http_headers.blob_content_type - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_set_http_headers_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - blob_cache_control=_blob_cache_control, - blob_content_type=_blob_content_type, - blob_content_md5=_blob_content_md5, - blob_content_encoding=_blob_content_encoding, - blob_content_language=_blob_content_language, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - blob_content_disposition=_blob_content_disposition, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def set_immutability_policy( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Set Immutability Policy operation sets the immutability policy on the blob. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["immutabilityPolicies"] = kwargs.pop("comp", _params.pop("comp", "immutabilityPolicies")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_unmodified_since = None - if modified_access_conditions is not None: - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_set_immutability_policy_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - if_unmodified_since=_if_unmodified_since, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - snapshot=snapshot, - version_id=version_id, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") - ) - response_headers["x-ms-immutability-policy-mode"] = self._deserialize( - "str", response.headers.get("x-ms-immutability-policy-mode") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def delete_immutability_policy( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - **kwargs: Any - ) -> None: - """The Delete Immutability Policy operation deletes the immutability policy on the blob. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["immutabilityPolicies"] = kwargs.pop("comp", _params.pop("comp", "immutabilityPolicies")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_delete_immutability_policy_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - snapshot=snapshot, - version_id=version_id, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def set_legal_hold( - self, - legal_hold: bool, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - **kwargs: Any - ) -> None: - """The Set Legal Hold operation sets a legal hold on the blob. - - :param legal_hold: Specified if a legal hold should be set on the blob. Required. - :type legal_hold: bool - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["legalhold"] = kwargs.pop("comp", _params.pop("comp", "legalhold")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_set_legal_hold_request( - url=self._config.url, - legal_hold=legal_hold, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - snapshot=snapshot, - version_id=version_id, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def set_metadata( - self, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Set Blob Metadata operation sets user-defined metadata for the specified blob as one or - more name-value pairs. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["metadata"] = kwargs.pop("comp", _params.pop("comp", "metadata")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_set_metadata_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - metadata=metadata, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def acquire_lease( - self, - timeout: Optional[int] = None, - duration: Optional[int] = None, - proposed_lease_id: Optional[str] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete - operations. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param duration: Specifies the duration of the lease, in seconds, or negative one (-1) for a - lease that never expires. A non-infinite lease can be between 15 and 60 seconds. A lease - duration cannot be changed using renew or change. Default value is None. - :type duration: int - :param proposed_lease_id: Proposed lease ID, in a GUID string format. The Blob service returns - 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid - Constructor (String) for a list of valid GUID string formats. Default value is None. - :type proposed_lease_id: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["acquire"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "acquire")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_acquire_lease_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - duration=duration, - proposed_lease_id=proposed_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def release_lease( - self, - lease_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete - operations. - - :param lease_id: Specifies the current lease ID on the resource. Required. - :type lease_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["release"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "release")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_release_lease_request( - url=self._config.url, - lease_id=lease_id, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def renew_lease( - self, - lease_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete - operations. - - :param lease_id: Specifies the current lease ID on the resource. Required. - :type lease_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["renew"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "renew")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_renew_lease_request( - url=self._config.url, - lease_id=lease_id, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def change_lease( - self, - lease_id: str, - proposed_lease_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete - operations. - - :param lease_id: Specifies the current lease ID on the resource. Required. - :type lease_id: str - :param proposed_lease_id: Proposed lease ID, in a GUID string format. The Blob service returns - 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid - Constructor (String) for a list of valid GUID string formats. Required. - :type proposed_lease_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["change"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "change")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_change_lease_request( - url=self._config.url, - lease_id=lease_id, - proposed_lease_id=proposed_lease_id, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def break_lease( - self, - timeout: Optional[int] = None, - break_period: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete - operations. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param break_period: For a break operation, proposed duration the lease should continue before - it is broken, in seconds, between 0 and 60. This break period is only used if it is shorter - than the time remaining on the lease. If longer, the time remaining on the lease is used. A new - lease will not be available before the break period has expired, but the lease may be held for - longer than the break period. If this header does not appear with a break operation, a - fixed-duration lease breaks after the remaining lease period elapses, and an infinite lease - breaks immediately. Default value is None. - :type break_period: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["break"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "break")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_break_lease_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - break_period=break_period, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-time"] = self._deserialize("int", response.headers.get("x-ms-lease-time")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def create_snapshot( - self, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - request_id_parameter: Optional[str] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Create Snapshot operation creates a read-only snapshot of a blob. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["snapshot"] = kwargs.pop("comp", _params.pop("comp", "snapshot")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _lease_id = None - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - - _request = build_create_snapshot_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - metadata=metadata, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - lease_id=_lease_id, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-snapshot"] = self._deserialize("str", response.headers.get("x-ms-snapshot")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def start_copy_from_url( # pylint: disable=too-many-locals - self, - copy_source: str, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - rehydrate_priority: Optional[Union[str, _models.RehydratePriority]] = None, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - seal_blob: Optional[bool] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - source_modified_access_conditions: Optional[_models.SourceModifiedAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Start Copy From URL operation copies a blob or an internet resource to a new blob. - - :param copy_source: Specifies the name of the source page blob snapshot. This value is a URL of - up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it - would appear in a request URI. The source blob must either be public or must be authenticated - via a shared access signature. Required. - :type copy_source: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param tier: Optional. Indicates the tier to be set on the blob. Known values are: "P4", "P6", - "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", and - "Cold". Default value is None. - :type tier: str or ~azure.storage.blob.models.AccessTierOptional - :param rehydrate_priority: Optional: Indicates the priority with which to rehydrate an archived - blob. Known values are: "High" and "Standard". Default value is None. - :type rehydrate_priority: str or ~azure.storage.blob.models.RehydratePriority - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param seal_blob: Overrides the sealed state of the destination blob. Service version - 2019-12-12 and newer. Default value is None. - :type seal_blob: bool - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param legal_hold: Specified if a legal hold should be set on the blob. Default value is None. - :type legal_hold: bool - :param source_modified_access_conditions: Parameter group. Default value is None. - :type source_modified_access_conditions: - ~azure.storage.blob.models.SourceModifiedAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[None] = kwargs.pop("cls", None) - - _source_if_modified_since = None - _source_if_unmodified_since = None - _source_if_match = None - _source_if_none_match = None - _source_if_tags = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _lease_id = None - if source_modified_access_conditions is not None: - _source_if_match = source_modified_access_conditions.source_if_match - _source_if_modified_since = source_modified_access_conditions.source_if_modified_since - _source_if_none_match = source_modified_access_conditions.source_if_none_match - _source_if_tags = source_modified_access_conditions.source_if_tags - _source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - - _request = build_start_copy_from_url_request( - url=self._config.url, - copy_source=copy_source, - version=self._config.version, - timeout=timeout, - metadata=metadata, - tier=tier, - rehydrate_priority=rehydrate_priority, - source_if_modified_since=_source_if_modified_since, - source_if_unmodified_since=_source_if_unmodified_since, - source_if_match=_source_if_match, - source_if_none_match=_source_if_none_match, - source_if_tags=_source_if_tags, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - lease_id=_lease_id, - request_id_parameter=request_id_parameter, - blob_tags_string=blob_tags_string, - seal_blob=seal_blob, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - legal_hold=legal_hold, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def copy_from_url( # pylint: disable=too-many-locals - self, - copy_source: str, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - request_id_parameter: Optional[str] = None, - source_content_md5: Optional[bytes] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - copy_source_authorization: Optional[str] = None, - copy_source_tags: Optional[Union[str, _models.BlobCopySourceTags]] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - source_modified_access_conditions: Optional[_models.SourceModifiedAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - **kwargs: Any - ) -> None: - """The Copy From URL operation copies a blob or an internet resource to a new blob. It will not - return a response until the copy is complete. - - :param copy_source: Specifies the name of the source page blob snapshot. This value is a URL of - up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it - would appear in a request URI. The source blob must either be public or must be authenticated - via a shared access signature. Required. - :type copy_source: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param tier: Optional. Indicates the tier to be set on the blob. Known values are: "P4", "P6", - "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", and - "Cold". Default value is None. - :type tier: str or ~azure.storage.blob.models.AccessTierOptional - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param source_content_md5: Specify the md5 calculated for the range of bytes that must be read - from the copy source. Default value is None. - :type source_content_md5: bytes - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param legal_hold: Specified if a legal hold should be set on the blob. Default value is None. - :type legal_hold: bool - :param copy_source_authorization: Only Bearer type is supported. Credentials should be a valid - OAuth access token to copy source. Default value is None. - :type copy_source_authorization: str - :param copy_source_tags: Optional, default 'replace'. Indicates if source tags should be - copied or replaced with the tags specified by x-ms-tags. Known values are: "REPLACE" and - "COPY". Default value is None. - :type copy_source_tags: str or ~azure.storage.blob.models.BlobCopySourceTags - :param file_request_intent: Valid value is backup. "backup" Default value is None. - :type file_request_intent: str or ~azure.storage.blob.models.FileShareTokenIntent - :param source_modified_access_conditions: Parameter group. Default value is None. - :type source_modified_access_conditions: - ~azure.storage.blob.models.SourceModifiedAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - x_ms_requires_sync: Literal["true"] = kwargs.pop( - "x_ms_requires_sync", _headers.pop("x-ms-requires-sync", "true") - ) - cls: ClsType[None] = kwargs.pop("cls", None) - - _source_if_modified_since = None - _source_if_unmodified_since = None - _source_if_match = None - _source_if_none_match = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _lease_id = None - _encryption_scope = None - if source_modified_access_conditions is not None: - _source_if_match = source_modified_access_conditions.source_if_match - _source_if_modified_since = source_modified_access_conditions.source_if_modified_since - _source_if_none_match = source_modified_access_conditions.source_if_none_match - _source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - - _request = build_copy_from_url_request( - url=self._config.url, - copy_source=copy_source, - version=self._config.version, - timeout=timeout, - metadata=metadata, - tier=tier, - source_if_modified_since=_source_if_modified_since, - source_if_unmodified_since=_source_if_unmodified_since, - source_if_match=_source_if_match, - source_if_none_match=_source_if_none_match, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - lease_id=_lease_id, - request_id_parameter=request_id_parameter, - source_content_md5=source_content_md5, - blob_tags_string=blob_tags_string, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - legal_hold=legal_hold, - copy_source_authorization=copy_source_authorization, - encryption_scope=_encryption_scope, - copy_source_tags=copy_source_tags, - file_request_intent=file_request_intent, - x_ms_requires_sync=x_ms_requires_sync, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def abort_copy_from_url( - self, - copy_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Abort Copy From URL operation aborts a pending Copy From URL operation, and leaves a - destination blob with zero length and full metadata. - - :param copy_id: The copy identifier provided in the x-ms-copy-id header of the original Copy - Blob operation. Required. - :type copy_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["copy"] = kwargs.pop("comp", _params.pop("comp", "copy")) - copy_action_abort_constant: Literal["abort"] = kwargs.pop( - "copy_action_abort_constant", _headers.pop("x-ms-copy-action", "abort") - ) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - - _request = build_abort_copy_from_url_request( - url=self._config.url, - copy_id=copy_id, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - request_id_parameter=request_id_parameter, - comp=comp, - copy_action_abort_constant=copy_action_abort_constant, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def set_tier( - self, - tier: Union[str, _models.AccessTierRequired], - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - timeout: Optional[int] = None, - rehydrate_priority: Optional[Union[str, _models.RehydratePriority]] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Set Tier operation sets the tier on a blob. The operation is allowed on a page blob in a - premium storage account and on a block blob in a blob storage account (locally redundant - storage only). A premium page blob's tier determines the allowed size, IOPS, and bandwidth of - the blob. A block blob's tier determines Hot/Cool/Archive storage type. This operation does not - update the blob's ETag. - - :param tier: Indicates the tier to be set on the blob. Known values are: "P4", "P6", "P10", - "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", and "Cold". - Required. - :type tier: str or ~azure.storage.blob.models.AccessTierRequired - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param rehydrate_priority: Optional: Indicates the priority with which to rehydrate an archived - blob. Known values are: "High" and "Standard". Default value is None. - :type rehydrate_priority: str or ~azure.storage.blob.models.RehydratePriority - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["tier"] = kwargs.pop("comp", _params.pop("comp", "tier")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_tags = modified_access_conditions.if_tags - - _request = build_set_tier_request( - url=self._config.url, - tier=tier, - version=self._config.version, - snapshot=snapshot, - version_id=version_id, - timeout=timeout, - rehydrate_priority=rehydrate_priority, - request_id_parameter=request_id_parameter, - lease_id=_lease_id, - if_tags=_if_tags, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def get_account_info( - self, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any - ) -> None: - """Returns the sku name and account kind. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["account"] = kwargs.pop("restype", _params.pop("restype", "account")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_get_account_info_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-sku-name"] = self._deserialize("str", response.headers.get("x-ms-sku-name")) - response_headers["x-ms-account-kind"] = self._deserialize("str", response.headers.get("x-ms-account-kind")) - response_headers["x-ms-is-hns-enabled"] = self._deserialize("bool", response.headers.get("x-ms-is-hns-enabled")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def query( - self, - snapshot: Optional[str] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - query_request: Optional[_models.QueryRequest] = None, - **kwargs: Any - ) -> AsyncIterator[bytes]: - """The Query operation enables users to select/project on blob data by providing simple query - expressions. - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param query_request: the query request. Default value is None. - :type query_request: ~azure.storage.blob.models.QueryRequest - :return: AsyncIterator[bytes] or the result of cls(response) - :rtype: AsyncIterator[bytes] - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["query"] = kwargs.pop("comp", _params.pop("comp", "query")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) - content_type = content_type if query_request else None - cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if query_request is not None: - _content = self._serialize.body(query_request, "QueryRequest", is_xml=True) - else: - _content = None - - _request = build_query_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - timeout=timeout, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _decompress = kwargs.pop("decompress", True) - _stream = True - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 206]: - try: - await response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - if response.status_code == 200: - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-meta"] = self._deserialize("{str}", response.headers.get("x-ms-meta")) - response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) - response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) - response_headers["Content-Disposition"] = self._deserialize( - "str", response.headers.get("Content-Disposition") - ) - response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) - response_headers["x-ms-copy-completion-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-copy-completion-time") - ) - response_headers["x-ms-copy-status-description"] = self._deserialize( - "str", response.headers.get("x-ms-copy-status-description") - ) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-progress"] = self._deserialize( - "str", response.headers.get("x-ms-copy-progress") - ) - response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - response_headers["x-ms-lease-duration"] = self._deserialize( - "str", response.headers.get("x-ms-lease-duration") - ) - response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) - response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-blob-content-md5"] = self._deserialize( - "bytearray", response.headers.get("x-ms-blob-content-md5") - ) - - if response.status_code == 206: - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-meta"] = self._deserialize("{str}", response.headers.get("x-ms-meta")) - response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) - response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) - response_headers["Content-Disposition"] = self._deserialize( - "str", response.headers.get("Content-Disposition") - ) - response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-copy-completion-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-copy-completion-time") - ) - response_headers["x-ms-copy-status-description"] = self._deserialize( - "str", response.headers.get("x-ms-copy-status-description") - ) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-progress"] = self._deserialize( - "str", response.headers.get("x-ms-copy-progress") - ) - response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - response_headers["x-ms-lease-duration"] = self._deserialize( - "str", response.headers.get("x-ms-lease-duration") - ) - response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) - response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-blob-content-md5"] = self._deserialize( - "bytearray", response.headers.get("x-ms-blob-content-md5") - ) - - deserialized = response.stream_download(self._client._pipeline, decompress=_decompress) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def get_tags( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - blob_modified_access_conditions: Optional[_models.BlobModifiedAccessConditions] = None, - **kwargs: Any - ) -> _models.BlobTags: - """The Get Tags operation enables users to get the tags associated with a blob. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param blob_modified_access_conditions: Parameter group. Default value is None. - :type blob_modified_access_conditions: ~azure.storage.blob.models.BlobModifiedAccessConditions - :return: BlobTags or the result of cls(response) - :rtype: ~azure.storage.blob.models.BlobTags - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["tags"] = kwargs.pop("comp", _params.pop("comp", "tags")) - cls: ClsType[_models.BlobTags] = kwargs.pop("cls", None) - - _if_tags = None - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - if modified_access_conditions is not None: - _if_tags = modified_access_conditions.if_tags - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if blob_modified_access_conditions is not None: - _if_match = blob_modified_access_conditions.if_match - _if_modified_since = blob_modified_access_conditions.if_modified_since - _if_none_match = blob_modified_access_conditions.if_none_match - _if_unmodified_since = blob_modified_access_conditions.if_unmodified_since - - _request = build_get_tags_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - snapshot=snapshot, - version_id=version_id, - if_tags=_if_tags, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("BlobTags", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def set_tags( - self, - timeout: Optional[int] = None, - version_id: Optional[str] = None, - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - blob_modified_access_conditions: Optional[_models.BlobModifiedAccessConditions] = None, - tags: Optional[_models.BlobTags] = None, - **kwargs: Any - ) -> None: - """The Set Tags operation enables users to set tags on a blob. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param transactional_content_crc64: Specify the transactional crc64 for the body, to be - validated by the service. Default value is None. - :type transactional_content_crc64: bytes - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param blob_modified_access_conditions: Parameter group. Default value is None. - :type blob_modified_access_conditions: ~azure.storage.blob.models.BlobModifiedAccessConditions - :param tags: Blob tags. Default value is None. - :type tags: ~azure.storage.blob.models.BlobTags - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["tags"] = kwargs.pop("comp", _params.pop("comp", "tags")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) - content_type = content_type if tags else None - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_tags = None - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - if modified_access_conditions is not None: - _if_tags = modified_access_conditions.if_tags - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if blob_modified_access_conditions is not None: - _if_match = blob_modified_access_conditions.if_match - _if_modified_since = blob_modified_access_conditions.if_modified_since - _if_none_match = blob_modified_access_conditions.if_none_match - _if_unmodified_since = blob_modified_access_conditions.if_unmodified_since - if tags is not None: - _content = self._serialize.body(tags, "BlobTags", is_xml=True) - else: - _content = None - - _request = build_set_tags_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - version_id=version_id, - transactional_content_md5=transactional_content_md5, - transactional_content_crc64=transactional_content_crc64, - request_id_parameter=request_id_parameter, - if_tags=_if_tags, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_block_blob_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_block_blob_operations.py deleted file mode 100644 index 6356da0264ec..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_block_blob_operations.py +++ /dev/null @@ -1,1209 +0,0 @@ -# pylint: disable=line-too-long,useless-suppression,too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -from collections.abc import MutableMapping -import datetime -from typing import Any, Callable, IO, Literal, Optional, TypeVar, Union - -from azure.core import AsyncPipelineClient -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - map_error, -) -from azure.core.pipeline import PipelineResponse -from azure.core.rest import AsyncHttpResponse, HttpRequest -from azure.core.tracing.decorator_async import distributed_trace_async -from azure.core.utils import case_insensitive_dict - -from ... import models as _models -from ..._utils.serialization import Deserializer, Serializer -from ...operations._block_blob_operations import ( - build_commit_block_list_request, - build_get_block_list_request, - build_put_blob_from_url_request, - build_stage_block_from_url_request, - build_stage_block_request, - build_upload_request, -) -from .._configuration import AzureBlobStorageConfiguration - -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, dict[str, Any]], Any]] - - -class BlockBlobOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.storage.blob.aio.AzureBlobStorage`'s - :attr:`block_blob` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: AzureBlobStorageConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace_async - async def upload( # pylint: disable=too-many-locals - self, - content_length: int, - body: IO[bytes], - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - metadata: Optional[dict[str, str]] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - transactional_content_crc64: Optional[bytes] = None, - structured_body_type: Optional[str] = None, - structured_content_length: Optional[int] = None, - blob_http_headers: Optional[_models.BlobHTTPHeaders] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Upload Block Blob operation updates the content of an existing block blob. Updating an - existing block blob overwrites any existing metadata on the blob. Partial updates are not - supported with Put Blob; the content of the existing blob is overwritten with the content of - the new blob. To perform a partial update of the content of a block blob, use the Put Block - List operation. - - :param content_length: The length of the request. Required. - :type content_length: int - :param body: Initial data. Required. - :type body: IO[bytes] - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param tier: Optional. Indicates the tier to be set on the blob. Known values are: "P4", "P6", - "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", and - "Cold". Default value is None. - :type tier: str or ~azure.storage.blob.models.AccessTierOptional - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param legal_hold: Specified if a legal hold should be set on the blob. Default value is None. - :type legal_hold: bool - :param transactional_content_crc64: Specify the transactional crc64 for the body, to be - validated by the service. Default value is None. - :type transactional_content_crc64: bytes - :param structured_body_type: Required if the request body is a structured message. Specifies - the message schema version and properties. Default value is None. - :type structured_body_type: str - :param structured_content_length: Required if the request body is a structured message. - Specifies the length of the blob/file content inside the message body. Will always be smaller - than Content-Length. Default value is None. - :type structured_content_length: int - :param blob_http_headers: Parameter group. Default value is None. - :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - blob_type: Literal["BlockBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "BlockBlob")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _blob_content_type = None - _blob_content_encoding = None - _blob_content_language = None - _blob_content_md5 = None - _blob_cache_control = None - _lease_id = None - _blob_content_disposition = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if blob_http_headers is not None: - _blob_cache_control = blob_http_headers.blob_cache_control - _blob_content_disposition = blob_http_headers.blob_content_disposition - _blob_content_encoding = blob_http_headers.blob_content_encoding - _blob_content_language = blob_http_headers.blob_content_language - _blob_content_md5 = blob_http_headers.blob_content_md5 - _blob_content_type = blob_http_headers.blob_content_type - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - _content = body - - _request = build_upload_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - timeout=timeout, - transactional_content_md5=transactional_content_md5, - blob_content_type=_blob_content_type, - blob_content_encoding=_blob_content_encoding, - blob_content_language=_blob_content_language, - blob_content_md5=_blob_content_md5, - blob_cache_control=_blob_cache_control, - metadata=metadata, - lease_id=_lease_id, - blob_content_disposition=_blob_content_disposition, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - tier=tier, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - blob_tags_string=blob_tags_string, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - legal_hold=legal_hold, - transactional_content_crc64=transactional_content_crc64, - structured_body_type=structured_body_type, - structured_content_length=structured_content_length, - blob_type=blob_type, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-structured-body"] = self._deserialize( - "str", response.headers.get("x-ms-structured-body") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def put_blob_from_url( # pylint: disable=too-many-locals - self, - content_length: int, - copy_source: str, - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - metadata: Optional[dict[str, str]] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - request_id_parameter: Optional[str] = None, - source_content_md5: Optional[bytes] = None, - blob_tags_string: Optional[str] = None, - copy_source_blob_properties: Optional[bool] = None, - copy_source_authorization: Optional[str] = None, - copy_source_tags: Optional[Union[str, _models.BlobCopySourceTags]] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - blob_http_headers: Optional[_models.BlobHTTPHeaders] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - source_modified_access_conditions: Optional[_models.SourceModifiedAccessConditions] = None, - source_cpk_info: Optional[_models.SourceCpkInfo] = None, - **kwargs: Any - ) -> None: - """The Put Blob from URL operation creates a new Block Blob where the contents of the blob are - read from a given URL. This API is supported beginning with the 2020-04-08 version. Partial - updates are not supported with Put Blob from URL; the content of an existing blob is - overwritten with the content of the new blob. To perform partial updates to a block blob’s - contents using a source URL, use the Put Block from URL API in conjunction with Put Block List. - - :param content_length: The length of the request. Required. - :type content_length: int - :param copy_source: Specifies the name of the source page blob snapshot. This value is a URL of - up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it - would appear in a request URI. The source blob must either be public or must be authenticated - via a shared access signature. Required. - :type copy_source: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param tier: Optional. Indicates the tier to be set on the blob. Known values are: "P4", "P6", - "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", and - "Cold". Default value is None. - :type tier: str or ~azure.storage.blob.models.AccessTierOptional - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param source_content_md5: Specify the md5 calculated for the range of bytes that must be read - from the copy source. Default value is None. - :type source_content_md5: bytes - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param copy_source_blob_properties: Optional, default is true. Indicates if properties from - the source blob should be copied. Default value is None. - :type copy_source_blob_properties: bool - :param copy_source_authorization: Only Bearer type is supported. Credentials should be a valid - OAuth access token to copy source. Default value is None. - :type copy_source_authorization: str - :param copy_source_tags: Optional, default 'replace'. Indicates if source tags should be - copied or replaced with the tags specified by x-ms-tags. Known values are: "REPLACE" and - "COPY". Default value is None. - :type copy_source_tags: str or ~azure.storage.blob.models.BlobCopySourceTags - :param file_request_intent: Valid value is backup. "backup" Default value is None. - :type file_request_intent: str or ~azure.storage.blob.models.FileShareTokenIntent - :param blob_http_headers: Parameter group. Default value is None. - :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param source_modified_access_conditions: Parameter group. Default value is None. - :type source_modified_access_conditions: - ~azure.storage.blob.models.SourceModifiedAccessConditions - :param source_cpk_info: Parameter group. Default value is None. - :type source_cpk_info: ~azure.storage.blob.models.SourceCpkInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - blob_type: Literal["BlockBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "BlockBlob")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _blob_content_type = None - _blob_content_encoding = None - _blob_content_language = None - _blob_content_md5 = None - _blob_cache_control = None - _lease_id = None - _blob_content_disposition = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _source_if_modified_since = None - _source_if_unmodified_since = None - _source_if_match = None - _source_if_none_match = None - _source_if_tags = None - _source_encryption_key = None - _source_encryption_key_sha256 = None - _source_encryption_algorithm = None - if blob_http_headers is not None: - _blob_cache_control = blob_http_headers.blob_cache_control - _blob_content_disposition = blob_http_headers.blob_content_disposition - _blob_content_encoding = blob_http_headers.blob_content_encoding - _blob_content_language = blob_http_headers.blob_content_language - _blob_content_md5 = blob_http_headers.blob_content_md5 - _blob_content_type = blob_http_headers.blob_content_type - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if source_modified_access_conditions is not None: - _source_if_match = source_modified_access_conditions.source_if_match - _source_if_modified_since = source_modified_access_conditions.source_if_modified_since - _source_if_none_match = source_modified_access_conditions.source_if_none_match - _source_if_tags = source_modified_access_conditions.source_if_tags - _source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since - if source_cpk_info is not None: - _source_encryption_algorithm = source_cpk_info.source_encryption_algorithm - _source_encryption_key = source_cpk_info.source_encryption_key - _source_encryption_key_sha256 = source_cpk_info.source_encryption_key_sha256 - - _request = build_put_blob_from_url_request( - url=self._config.url, - content_length=content_length, - copy_source=copy_source, - version=self._config.version, - timeout=timeout, - transactional_content_md5=transactional_content_md5, - blob_content_type=_blob_content_type, - blob_content_encoding=_blob_content_encoding, - blob_content_language=_blob_content_language, - blob_content_md5=_blob_content_md5, - blob_cache_control=_blob_cache_control, - metadata=metadata, - lease_id=_lease_id, - blob_content_disposition=_blob_content_disposition, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - tier=tier, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - source_if_modified_since=_source_if_modified_since, - source_if_unmodified_since=_source_if_unmodified_since, - source_if_match=_source_if_match, - source_if_none_match=_source_if_none_match, - source_if_tags=_source_if_tags, - request_id_parameter=request_id_parameter, - source_content_md5=source_content_md5, - blob_tags_string=blob_tags_string, - copy_source_blob_properties=copy_source_blob_properties, - copy_source_authorization=copy_source_authorization, - copy_source_tags=copy_source_tags, - file_request_intent=file_request_intent, - source_encryption_key=_source_encryption_key, - source_encryption_key_sha256=_source_encryption_key_sha256, - source_encryption_algorithm=_source_encryption_algorithm, - blob_type=blob_type, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def stage_block( # pylint: disable=too-many-locals - self, - block_id: str, - content_length: int, - body: IO[bytes], - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - structured_body_type: Optional[str] = None, - structured_content_length: Optional[int] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - **kwargs: Any - ) -> None: - """The Stage Block operation creates a new block to be committed as part of a blob. - - :param block_id: A valid Base64 string value that identifies the block. Prior to encoding, the - string must be less than or equal to 64 bytes in size. For a given blob, the length of the - value specified for the blockid parameter must be the same size for each block. Required. - :type block_id: str - :param content_length: The length of the request. Required. - :type content_length: int - :param body: Initial data. Required. - :type body: IO[bytes] - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param transactional_content_crc64: Specify the transactional crc64 for the body, to be - validated by the service. Default value is None. - :type transactional_content_crc64: bytes - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param structured_body_type: Required if the request body is a structured message. Specifies - the message schema version and properties. Default value is None. - :type structured_body_type: str - :param structured_content_length: Required if the request body is a structured message. - Specifies the length of the blob/file content inside the message body. Will always be smaller - than Content-Length. Default value is None. - :type structured_content_length: int - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["block"] = kwargs.pop("comp", _params.pop("comp", "block")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - _content = body - - _request = build_stage_block_request( - url=self._config.url, - block_id=block_id, - content_length=content_length, - version=self._config.version, - transactional_content_md5=transactional_content_md5, - transactional_content_crc64=transactional_content_crc64, - timeout=timeout, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - request_id_parameter=request_id_parameter, - structured_body_type=structured_body_type, - structured_content_length=structured_content_length, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-structured-body"] = self._deserialize( - "str", response.headers.get("x-ms-structured-body") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def stage_block_from_url( # pylint: disable=too-many-locals - self, - block_id: str, - content_length: int, - source_url: str, - source_range: Optional[str] = None, - source_content_md5: Optional[bytes] = None, - source_contentcrc64: Optional[bytes] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - copy_source_authorization: Optional[str] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - source_modified_access_conditions: Optional[_models.SourceModifiedAccessConditions] = None, - source_cpk_info: Optional[_models.SourceCpkInfo] = None, - **kwargs: Any - ) -> None: - """The Stage Block operation creates a new block to be committed as part of a blob where the - contents are read from a URL. - - :param block_id: A valid Base64 string value that identifies the block. Prior to encoding, the - string must be less than or equal to 64 bytes in size. For a given blob, the length of the - value specified for the blockid parameter must be the same size for each block. Required. - :type block_id: str - :param content_length: The length of the request. Required. - :type content_length: int - :param source_url: Specify a URL to the copy source. Required. - :type source_url: str - :param source_range: Bytes of source data in the specified range. Default value is None. - :type source_range: str - :param source_content_md5: Specify the md5 calculated for the range of bytes that must be read - from the copy source. Default value is None. - :type source_content_md5: bytes - :param source_contentcrc64: Specify the crc64 calculated for the range of bytes that must be - read from the copy source. Default value is None. - :type source_contentcrc64: bytes - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param copy_source_authorization: Only Bearer type is supported. Credentials should be a valid - OAuth access token to copy source. Default value is None. - :type copy_source_authorization: str - :param file_request_intent: Valid value is backup. "backup" Default value is None. - :type file_request_intent: str or ~azure.storage.blob.models.FileShareTokenIntent - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param source_modified_access_conditions: Parameter group. Default value is None. - :type source_modified_access_conditions: - ~azure.storage.blob.models.SourceModifiedAccessConditions - :param source_cpk_info: Parameter group. Default value is None. - :type source_cpk_info: ~azure.storage.blob.models.SourceCpkInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["block"] = kwargs.pop("comp", _params.pop("comp", "block")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _lease_id = None - _source_if_modified_since = None - _source_if_unmodified_since = None - _source_if_match = None - _source_if_none_match = None - _source_encryption_key = None - _source_encryption_key_sha256 = None - _source_encryption_algorithm = None - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if source_modified_access_conditions is not None: - _source_if_match = source_modified_access_conditions.source_if_match - _source_if_modified_since = source_modified_access_conditions.source_if_modified_since - _source_if_none_match = source_modified_access_conditions.source_if_none_match - _source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since - if source_cpk_info is not None: - _source_encryption_algorithm = source_cpk_info.source_encryption_algorithm - _source_encryption_key = source_cpk_info.source_encryption_key - _source_encryption_key_sha256 = source_cpk_info.source_encryption_key_sha256 - - _request = build_stage_block_from_url_request( - url=self._config.url, - block_id=block_id, - content_length=content_length, - source_url=source_url, - version=self._config.version, - source_range=source_range, - source_content_md5=source_content_md5, - source_contentcrc64=source_contentcrc64, - timeout=timeout, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - lease_id=_lease_id, - source_if_modified_since=_source_if_modified_since, - source_if_unmodified_since=_source_if_unmodified_since, - source_if_match=_source_if_match, - source_if_none_match=_source_if_none_match, - request_id_parameter=request_id_parameter, - copy_source_authorization=copy_source_authorization, - file_request_intent=file_request_intent, - source_encryption_key=_source_encryption_key, - source_encryption_key_sha256=_source_encryption_key_sha256, - source_encryption_algorithm=_source_encryption_algorithm, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def commit_block_list( # pylint: disable=too-many-locals - self, - blocks: _models.BlockLookupList, - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - metadata: Optional[dict[str, str]] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - blob_http_headers: Optional[_models.BlobHTTPHeaders] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Commit Block List operation writes a blob by specifying the list of block IDs that make up - the blob. In order to be written as part of a blob, a block must have been successfully written - to the server in a prior Put Block operation. You can call Put Block List to update a blob by - uploading only those blocks that have changed, then committing the new and existing blocks - together. You can do this by specifying whether to commit a block from the committed block list - or from the uncommitted block list, or to commit the most recently uploaded version of the - block, whichever list it may belong to. - - :param blocks: Blob Blocks. Required. - :type blocks: ~azure.storage.blob.models.BlockLookupList - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param transactional_content_crc64: Specify the transactional crc64 for the body, to be - validated by the service. Default value is None. - :type transactional_content_crc64: bytes - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param tier: Optional. Indicates the tier to be set on the blob. Known values are: "P4", "P6", - "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", and - "Cold". Default value is None. - :type tier: str or ~azure.storage.blob.models.AccessTierOptional - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param legal_hold: Specified if a legal hold should be set on the blob. Default value is None. - :type legal_hold: bool - :param blob_http_headers: Parameter group. Default value is None. - :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["blocklist"] = kwargs.pop("comp", _params.pop("comp", "blocklist")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _blob_cache_control = None - _blob_content_type = None - _blob_content_encoding = None - _blob_content_language = None - _blob_content_md5 = None - _lease_id = None - _blob_content_disposition = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if blob_http_headers is not None: - _blob_cache_control = blob_http_headers.blob_cache_control - _blob_content_disposition = blob_http_headers.blob_content_disposition - _blob_content_encoding = blob_http_headers.blob_content_encoding - _blob_content_language = blob_http_headers.blob_content_language - _blob_content_md5 = blob_http_headers.blob_content_md5 - _blob_content_type = blob_http_headers.blob_content_type - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - _content = self._serialize.body(blocks, "BlockLookupList", is_xml=True) - - _request = build_commit_block_list_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - blob_cache_control=_blob_cache_control, - blob_content_type=_blob_content_type, - blob_content_encoding=_blob_content_encoding, - blob_content_language=_blob_content_language, - blob_content_md5=_blob_content_md5, - transactional_content_md5=transactional_content_md5, - transactional_content_crc64=transactional_content_crc64, - metadata=metadata, - lease_id=_lease_id, - blob_content_disposition=_blob_content_disposition, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - tier=tier, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - blob_tags_string=blob_tags_string, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - legal_hold=legal_hold, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def get_block_list( - self, - snapshot: Optional[str] = None, - list_type: Union[str, _models.BlockListType] = "committed", - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> _models.BlockList: - """The Get Block List operation retrieves the list of blocks that have been uploaded as part of a - block blob. - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param list_type: Specifies whether to return the list of committed blocks, the list of - uncommitted blocks, or both lists together. Known values are: "committed", "uncommitted", and - "all". Default value is "committed". - :type list_type: str or ~azure.storage.blob.models.BlockListType - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: BlockList or the result of cls(response) - :rtype: ~azure.storage.blob.models.BlockList - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["blocklist"] = kwargs.pop("comp", _params.pop("comp", "blocklist")) - cls: ClsType[_models.BlockList] = kwargs.pop("cls", None) - - _lease_id = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_tags = modified_access_conditions.if_tags - - _request = build_get_block_list_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - list_type=list_type, - timeout=timeout, - lease_id=_lease_id, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["x-ms-blob-content-length"] = self._deserialize( - "int", response.headers.get("x-ms-blob-content-length") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("BlockList", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_container_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_container_operations.py deleted file mode 100644 index 09bb123a20af..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_container_operations.py +++ /dev/null @@ -1,1863 +0,0 @@ -# pylint: disable=line-too-long,useless-suppression,too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -from collections.abc import MutableMapping -from typing import Any, AsyncIterator, Callable, IO, Literal, Optional, TypeVar, Union - -from azure.core import AsyncPipelineClient -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - StreamClosedError, - StreamConsumedError, - map_error, -) -from azure.core.pipeline import PipelineResponse -from azure.core.rest import AsyncHttpResponse, HttpRequest -from azure.core.tracing.decorator_async import distributed_trace_async -from azure.core.utils import case_insensitive_dict - -from ... import models as _models -from ..._utils.serialization import Deserializer, Serializer -from ...operations._container_operations import ( - build_acquire_lease_request, - build_break_lease_request, - build_change_lease_request, - build_create_request, - build_delete_request, - build_filter_blobs_request, - build_get_access_policy_request, - build_get_account_info_request, - build_get_properties_request, - build_list_blob_flat_segment_request, - build_list_blob_hierarchy_segment_request, - build_release_lease_request, - build_rename_request, - build_renew_lease_request, - build_restore_request, - build_set_access_policy_request, - build_set_metadata_request, - build_submit_batch_request, -) -from .._configuration import AzureBlobStorageConfiguration - -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, dict[str, Any]], Any]] - - -class ContainerOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.storage.blob.aio.AzureBlobStorage`'s - :attr:`container` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: AzureBlobStorageConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace_async - async def create( - self, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - access: Optional[Union[str, _models.PublicAccessType]] = None, - request_id_parameter: Optional[str] = None, - container_cpk_scope_info: Optional[_models.ContainerCpkScopeInfo] = None, - **kwargs: Any - ) -> None: - """creates a new container under the specified account. If the container with the same name - already exists, the operation fails. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param access: Specifies whether data in the container may be accessed publicly and the level - of access. Known values are: "container" and "blob". Default value is None. - :type access: str or ~azure.storage.blob.models.PublicAccessType - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param container_cpk_scope_info: Parameter group. Default value is None. - :type container_cpk_scope_info: ~azure.storage.blob.models.ContainerCpkScopeInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _default_encryption_scope = None - _prevent_encryption_scope_override = None - if container_cpk_scope_info is not None: - _default_encryption_scope = container_cpk_scope_info.default_encryption_scope - _prevent_encryption_scope_override = container_cpk_scope_info.prevent_encryption_scope_override - - _request = build_create_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - metadata=metadata, - access=access, - request_id_parameter=request_id_parameter, - default_encryption_scope=_default_encryption_scope, - prevent_encryption_scope_override=_prevent_encryption_scope_override, - restype=restype, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def get_properties( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - **kwargs: Any - ) -> None: - """returns all user-defined metadata and system properties for the specified container. The data - returned does not include the container's list of blobs. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - - _request = build_get_properties_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - request_id_parameter=request_id_parameter, - restype=restype, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-meta"] = self._deserialize("{str}", response.headers.get("x-ms-meta")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-duration"] = self._deserialize("str", response.headers.get("x-ms-lease-duration")) - response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) - response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-public-access"] = self._deserialize( - "str", response.headers.get("x-ms-blob-public-access") - ) - response_headers["x-ms-has-immutability-policy"] = self._deserialize( - "bool", response.headers.get("x-ms-has-immutability-policy") - ) - response_headers["x-ms-has-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-has-legal-hold")) - response_headers["x-ms-default-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-default-encryption-scope") - ) - response_headers["x-ms-deny-encryption-scope-override"] = self._deserialize( - "bool", response.headers.get("x-ms-deny-encryption-scope-override") - ) - response_headers["x-ms-immutable-storage-with-versioning-enabled"] = self._deserialize( - "bool", response.headers.get("x-ms-immutable-storage-with-versioning-enabled") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def delete( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """operation marks the specified container for deletion. The container and any blobs contained - within it are later deleted during garbage collection. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_delete_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - restype=restype, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def set_metadata( - self, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """operation sets one or more user-defined name-value pairs for the specified container. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["metadata"] = kwargs.pop("comp", _params.pop("comp", "metadata")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - - _request = build_set_metadata_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - metadata=metadata, - if_modified_since=_if_modified_since, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def get_access_policy( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - **kwargs: Any - ) -> list[_models.SignedIdentifier]: - """gets the permissions for the specified container. The permissions indicate whether container - data may be accessed publicly. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :return: list of SignedIdentifier or the result of cls(response) - :rtype: list[~azure.storage.blob.models.SignedIdentifier] - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["acl"] = kwargs.pop("comp", _params.pop("comp", "acl")) - cls: ClsType[list[_models.SignedIdentifier]] = kwargs.pop("cls", None) - - _lease_id = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - - _request = build_get_access_policy_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-blob-public-access"] = self._deserialize( - "str", response.headers.get("x-ms-blob-public-access") - ) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("[SignedIdentifier]", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def set_access_policy( - self, - timeout: Optional[int] = None, - access: Optional[Union[str, _models.PublicAccessType]] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - container_acl: Optional[list[_models.SignedIdentifier]] = None, - **kwargs: Any - ) -> None: - """sets the permissions for the specified container. The permissions indicate whether blobs in a - container may be accessed publicly. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param access: Specifies whether data in the container may be accessed publicly and the level - of access. Known values are: "container" and "blob". Default value is None. - :type access: str or ~azure.storage.blob.models.PublicAccessType - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param container_acl: the acls for the container. Default value is None. - :type container_acl: list[~azure.storage.blob.models.SignedIdentifier] - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["acl"] = kwargs.pop("comp", _params.pop("comp", "acl")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) - content_type = content_type if container_acl else None - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - serialization_ctxt = {"xml": {"name": "SignedIdentifiers", "wrapped": True, "itemsName": "SignedIdentifier"}} - if container_acl is not None: - _content = self._serialize.body( - container_acl, "[SignedIdentifier]", is_xml=True, serialization_ctxt=serialization_ctxt - ) - else: - _content = None - - _request = build_set_access_policy_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - access=access, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def restore( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - deleted_container_name: Optional[str] = None, - deleted_container_version: Optional[str] = None, - **kwargs: Any - ) -> None: - """Restores a previously-deleted container. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param deleted_container_name: Optional. Version 2019-12-12 and later. Specifies the name of - the deleted container to restore. Default value is None. - :type deleted_container_name: str - :param deleted_container_version: Optional. Version 2019-12-12 and later. Specifies the - version of the deleted container to restore. Default value is None. - :type deleted_container_version: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["undelete"] = kwargs.pop("comp", _params.pop("comp", "undelete")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_restore_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - deleted_container_name=deleted_container_name, - deleted_container_version=deleted_container_version, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def rename( - self, - source_container_name: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - source_lease_id: Optional[str] = None, - **kwargs: Any - ) -> None: - """Renames an existing container. - - :param source_container_name: Required. Specifies the name of the container to rename. - Required. - :type source_container_name: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param source_lease_id: A lease ID for the source path. If specified, the source path must have - an active lease and the lease ID must match. Default value is None. - :type source_lease_id: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["rename"] = kwargs.pop("comp", _params.pop("comp", "rename")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_rename_request( - url=self._config.url, - source_container_name=source_container_name, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - source_lease_id=source_lease_id, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def submit_batch( - self, - content_length: int, - body: IO[bytes], - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> AsyncIterator[bytes]: - """The Batch operation allows multiple API calls to be embedded into a single HTTP request. - - :param content_length: The length of the request. Required. - :type content_length: int - :param body: Initial data. Required. - :type body: IO[bytes] - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: AsyncIterator[bytes] or the result of cls(response) - :rtype: AsyncIterator[bytes] - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["batch"] = kwargs.pop("comp", _params.pop("comp", "batch")) - multipart_content_type: str = kwargs.pop( - "multipart_content_type", _headers.pop("Content-Type", "application/xml") - ) - cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) - - _content = body - - _request = build_submit_batch_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - multipart_content_type=multipart_content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _decompress = kwargs.pop("decompress", True) - _stream = True - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - try: - await response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - - deserialized = response.stream_download(self._client._pipeline, decompress=_decompress) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def filter_blobs( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - where: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.FilterBlobsIncludeItem]]] = None, - **kwargs: Any - ) -> _models.FilterBlobSegment: - """The Filter Blobs operation enables callers to list blobs in a container whose tags match a - given search expression. Filter blobs searches within the given container. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param where: Filters the results to return only to return only blobs whose tags match the - specified expression. Default value is None. - :type where: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param include: Include this parameter to specify one or more datasets to include in the - response. Default value is None. - :type include: list[str or ~azure.storage.blob.models.FilterBlobsIncludeItem] - :return: FilterBlobSegment or the result of cls(response) - :rtype: ~azure.storage.blob.models.FilterBlobSegment - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["blobs"] = kwargs.pop("comp", _params.pop("comp", "blobs")) - cls: ClsType[_models.FilterBlobSegment] = kwargs.pop("cls", None) - - _request = build_filter_blobs_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - where=where, - marker=marker, - maxresults=maxresults, - include=include, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("FilterBlobSegment", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def acquire_lease( - self, - timeout: Optional[int] = None, - duration: Optional[int] = None, - proposed_lease_id: Optional[str] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] establishes and manages a lock on a container for delete operations. The lock duration - can be 15 to 60 seconds, or can be infinite. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param duration: Specifies the duration of the lease, in seconds, or negative one (-1) for a - lease that never expires. A non-infinite lease can be between 15 and 60 seconds. A lease - duration cannot be changed using renew or change. Default value is None. - :type duration: int - :param proposed_lease_id: Proposed lease ID, in a GUID string format. The Blob service returns - 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid - Constructor (String) for a list of valid GUID string formats. Default value is None. - :type proposed_lease_id: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["acquire"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "acquire")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_acquire_lease_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - duration=duration, - proposed_lease_id=proposed_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - comp=comp, - restype=restype, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def release_lease( - self, - lease_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] establishes and manages a lock on a container for delete operations. The lock duration - can be 15 to 60 seconds, or can be infinite. - - :param lease_id: Specifies the current lease ID on the resource. Required. - :type lease_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["release"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "release")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_release_lease_request( - url=self._config.url, - lease_id=lease_id, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - comp=comp, - restype=restype, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def renew_lease( - self, - lease_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] establishes and manages a lock on a container for delete operations. The lock duration - can be 15 to 60 seconds, or can be infinite. - - :param lease_id: Specifies the current lease ID on the resource. Required. - :type lease_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["renew"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "renew")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_renew_lease_request( - url=self._config.url, - lease_id=lease_id, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - comp=comp, - restype=restype, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def break_lease( - self, - timeout: Optional[int] = None, - break_period: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] establishes and manages a lock on a container for delete operations. The lock duration - can be 15 to 60 seconds, or can be infinite. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param break_period: For a break operation, proposed duration the lease should continue before - it is broken, in seconds, between 0 and 60. This break period is only used if it is shorter - than the time remaining on the lease. If longer, the time remaining on the lease is used. A new - lease will not be available before the break period has expired, but the lease may be held for - longer than the break period. If this header does not appear with a break operation, a - fixed-duration lease breaks after the remaining lease period elapses, and an infinite lease - breaks immediately. Default value is None. - :type break_period: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["break"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "break")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_break_lease_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - break_period=break_period, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - comp=comp, - restype=restype, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-time"] = self._deserialize("int", response.headers.get("x-ms-lease-time")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def change_lease( - self, - lease_id: str, - proposed_lease_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] establishes and manages a lock on a container for delete operations. The lock duration - can be 15 to 60 seconds, or can be infinite. - - :param lease_id: Specifies the current lease ID on the resource. Required. - :type lease_id: str - :param proposed_lease_id: Proposed lease ID, in a GUID string format. The Blob service returns - 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid - Constructor (String) for a list of valid GUID string formats. Required. - :type proposed_lease_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["change"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "change")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_change_lease_request( - url=self._config.url, - lease_id=lease_id, - proposed_lease_id=proposed_lease_id, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - comp=comp, - restype=restype, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def list_blob_flat_segment( - self, - prefix: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.ListBlobsIncludeItem]]] = None, - start_from: Optional[str] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> _models.ListBlobsFlatSegmentResponse: - """[Update] The List Blobs operation returns a list of the blobs under the specified container. - - :param prefix: Filters the results to return only containers whose name begins with the - specified prefix. Default value is None. - :type prefix: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param include: Include this parameter to specify one or more datasets to include in the - response. Default value is None. - :type include: list[str or ~azure.storage.blob.models.ListBlobsIncludeItem] - :param start_from: Specifies the relative path to list paths from. For non-recursive list, only - one entity level is supported; For recursive list, multiple entity levels are supported. - (Inclusive). Default value is None. - :type start_from: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: ListBlobsFlatSegmentResponse or the result of cls(response) - :rtype: ~azure.storage.blob.models.ListBlobsFlatSegmentResponse - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["list"] = kwargs.pop("comp", _params.pop("comp", "list")) - cls: ClsType[_models.ListBlobsFlatSegmentResponse] = kwargs.pop("cls", None) - - _request = build_list_blob_flat_segment_request( - url=self._config.url, - version=self._config.version, - prefix=prefix, - marker=marker, - maxresults=maxresults, - include=include, - start_from=start_from, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("ListBlobsFlatSegmentResponse", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def list_blob_hierarchy_segment( - self, - delimiter: str, - prefix: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.ListBlobsIncludeItem]]] = None, - start_from: Optional[str] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> _models.ListBlobsHierarchySegmentResponse: - """[Update] The List Blobs operation returns a list of the blobs under the specified container. - - :param delimiter: When the request includes this parameter, the operation returns a BlobPrefix - element in the response body that acts as a placeholder for all blobs whose names begin with - the same substring up to the appearance of the delimiter character. The delimiter may be a - single character or a string. Required. - :type delimiter: str - :param prefix: Filters the results to return only containers whose name begins with the - specified prefix. Default value is None. - :type prefix: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param include: Include this parameter to specify one or more datasets to include in the - response. Default value is None. - :type include: list[str or ~azure.storage.blob.models.ListBlobsIncludeItem] - :param start_from: Specifies the relative path to list paths from. For non-recursive list, only - one entity level is supported; For recursive list, multiple entity levels are supported. - (Inclusive). Default value is None. - :type start_from: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: ListBlobsHierarchySegmentResponse or the result of cls(response) - :rtype: ~azure.storage.blob.models.ListBlobsHierarchySegmentResponse - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["list"] = kwargs.pop("comp", _params.pop("comp", "list")) - cls: ClsType[_models.ListBlobsHierarchySegmentResponse] = kwargs.pop("cls", None) - - _request = build_list_blob_hierarchy_segment_request( - url=self._config.url, - delimiter=delimiter, - version=self._config.version, - prefix=prefix, - marker=marker, - maxresults=maxresults, - include=include, - start_from=start_from, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("ListBlobsHierarchySegmentResponse", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def get_account_info( - self, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any - ) -> None: - """Returns the sku name and account kind. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["account"] = kwargs.pop("restype", _params.pop("restype", "account")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_get_account_info_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-sku-name"] = self._deserialize("str", response.headers.get("x-ms-sku-name")) - response_headers["x-ms-account-kind"] = self._deserialize("str", response.headers.get("x-ms-account-kind")) - response_headers["x-ms-is-hns-enabled"] = self._deserialize("bool", response.headers.get("x-ms-is-hns-enabled")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_page_blob_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_page_blob_operations.py deleted file mode 100644 index 639ca92eade7..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_page_blob_operations.py +++ /dev/null @@ -1,1490 +0,0 @@ -# pylint: disable=line-too-long,useless-suppression,too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -from collections.abc import MutableMapping -import datetime -from typing import Any, Callable, IO, Literal, Optional, TypeVar, Union - -from azure.core import AsyncPipelineClient -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - map_error, -) -from azure.core.pipeline import PipelineResponse -from azure.core.rest import AsyncHttpResponse, HttpRequest -from azure.core.tracing.decorator_async import distributed_trace_async -from azure.core.utils import case_insensitive_dict - -from ... import models as _models -from ..._utils.serialization import Deserializer, Serializer -from ...operations._page_blob_operations import ( - build_clear_pages_request, - build_copy_incremental_request, - build_create_request, - build_get_page_ranges_diff_request, - build_get_page_ranges_request, - build_resize_request, - build_update_sequence_number_request, - build_upload_pages_from_url_request, - build_upload_pages_request, -) -from .._configuration import AzureBlobStorageConfiguration - -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, dict[str, Any]], Any]] - - -class PageBlobOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.storage.blob.aio.AzureBlobStorage`'s - :attr:`page_blob` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: AzureBlobStorageConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace_async - async def create( # pylint: disable=too-many-locals - self, - content_length: int, - blob_content_length: int, - timeout: Optional[int] = None, - tier: Optional[Union[str, _models.PremiumPageBlobAccessTier]] = None, - metadata: Optional[dict[str, str]] = None, - blob_sequence_number: int = 0, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - blob_http_headers: Optional[_models.BlobHTTPHeaders] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Create operation creates a new page blob. - - :param content_length: The length of the request. Required. - :type content_length: int - :param blob_content_length: This header specifies the maximum size for the page blob, up to 1 - TB. The page blob size must be aligned to a 512-byte boundary. Required. - :type blob_content_length: int - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param tier: Optional. Indicates the tier to be set on the page blob. Known values are: "P4", - "P6", "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", and "P80". Default value is None. - :type tier: str or ~azure.storage.blob.models.PremiumPageBlobAccessTier - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param blob_sequence_number: Set for page blobs only. The sequence number is a user-controlled - value that you can use to track requests. The value of the sequence number must be between 0 - and 2^63 - 1. Default value is 0. - :type blob_sequence_number: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param legal_hold: Specified if a legal hold should be set on the blob. Default value is None. - :type legal_hold: bool - :param blob_http_headers: Parameter group. Default value is None. - :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - blob_type: Literal["PageBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "PageBlob")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _blob_content_type = None - _blob_content_encoding = None - _blob_content_language = None - _blob_content_md5 = None - _blob_cache_control = None - _lease_id = None - _blob_content_disposition = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if blob_http_headers is not None: - _blob_cache_control = blob_http_headers.blob_cache_control - _blob_content_disposition = blob_http_headers.blob_content_disposition - _blob_content_encoding = blob_http_headers.blob_content_encoding - _blob_content_language = blob_http_headers.blob_content_language - _blob_content_md5 = blob_http_headers.blob_content_md5 - _blob_content_type = blob_http_headers.blob_content_type - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_create_request( - url=self._config.url, - content_length=content_length, - blob_content_length=blob_content_length, - version=self._config.version, - timeout=timeout, - tier=tier, - blob_content_type=_blob_content_type, - blob_content_encoding=_blob_content_encoding, - blob_content_language=_blob_content_language, - blob_content_md5=_blob_content_md5, - blob_cache_control=_blob_cache_control, - metadata=metadata, - lease_id=_lease_id, - blob_content_disposition=_blob_content_disposition, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - blob_sequence_number=blob_sequence_number, - request_id_parameter=request_id_parameter, - blob_tags_string=blob_tags_string, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - legal_hold=legal_hold, - blob_type=blob_type, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def upload_pages( # pylint: disable=too-many-locals - self, - content_length: int, - body: IO[bytes], - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - timeout: Optional[int] = None, - range: Optional[str] = None, - request_id_parameter: Optional[str] = None, - structured_body_type: Optional[str] = None, - structured_content_length: Optional[int] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - sequence_number_access_conditions: Optional[_models.SequenceNumberAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Upload Pages operation writes a range of pages to a page blob. - - :param content_length: The length of the request. Required. - :type content_length: int - :param body: Initial data. Required. - :type body: IO[bytes] - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param transactional_content_crc64: Specify the transactional crc64 for the body, to be - validated by the service. Default value is None. - :type transactional_content_crc64: bytes - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param range: Return only the bytes of the blob in the specified range. Default value is None. - :type range: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param structured_body_type: Required if the request body is a structured message. Specifies - the message schema version and properties. Default value is None. - :type structured_body_type: str - :param structured_content_length: Required if the request body is a structured message. - Specifies the length of the blob/file content inside the message body. Will always be smaller - than Content-Length. Default value is None. - :type structured_content_length: int - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param sequence_number_access_conditions: Parameter group. Default value is None. - :type sequence_number_access_conditions: - ~azure.storage.blob.models.SequenceNumberAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["page"] = kwargs.pop("comp", _params.pop("comp", "page")) - page_write: Literal["update"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "update")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_sequence_number_less_than_or_equal_to = None - _if_sequence_number_less_than = None - _if_sequence_number_equal_to = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if sequence_number_access_conditions is not None: - _if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to - _if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than - _if_sequence_number_less_than_or_equal_to = ( - sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to - ) - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - _content = body - - _request = build_upload_pages_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - transactional_content_md5=transactional_content_md5, - transactional_content_crc64=transactional_content_crc64, - timeout=timeout, - range=range, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_sequence_number_less_than_or_equal_to=_if_sequence_number_less_than_or_equal_to, - if_sequence_number_less_than=_if_sequence_number_less_than, - if_sequence_number_equal_to=_if_sequence_number_equal_to, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - structured_body_type=structured_body_type, - structured_content_length=structured_content_length, - comp=comp, - page_write=page_write, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-structured-body"] = self._deserialize( - "str", response.headers.get("x-ms-structured-body") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def clear_pages( - self, - content_length: int, - timeout: Optional[int] = None, - range: Optional[str] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - sequence_number_access_conditions: Optional[_models.SequenceNumberAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Clear Pages operation clears a set of pages from a page blob. - - :param content_length: The length of the request. Required. - :type content_length: int - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param range: Return only the bytes of the blob in the specified range. Default value is None. - :type range: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param sequence_number_access_conditions: Parameter group. Default value is None. - :type sequence_number_access_conditions: - ~azure.storage.blob.models.SequenceNumberAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["page"] = kwargs.pop("comp", _params.pop("comp", "page")) - page_write: Literal["clear"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "clear")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_sequence_number_less_than_or_equal_to = None - _if_sequence_number_less_than = None - _if_sequence_number_equal_to = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if sequence_number_access_conditions is not None: - _if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to - _if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than - _if_sequence_number_less_than_or_equal_to = ( - sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to - ) - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_clear_pages_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - timeout=timeout, - range=range, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_sequence_number_less_than_or_equal_to=_if_sequence_number_less_than_or_equal_to, - if_sequence_number_less_than=_if_sequence_number_less_than, - if_sequence_number_equal_to=_if_sequence_number_equal_to, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - page_write=page_write, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def upload_pages_from_url( # pylint: disable=too-many-locals - self, - source_url: str, - source_range: str, - content_length: int, - range: str, - source_content_md5: Optional[bytes] = None, - source_contentcrc64: Optional[bytes] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - copy_source_authorization: Optional[str] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - sequence_number_access_conditions: Optional[_models.SequenceNumberAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - source_modified_access_conditions: Optional[_models.SourceModifiedAccessConditions] = None, - source_cpk_info: Optional[_models.SourceCpkInfo] = None, - **kwargs: Any - ) -> None: - """The Upload Pages operation writes a range of pages to a page blob where the contents are read - from a URL. - - :param source_url: Specify a URL to the copy source. Required. - :type source_url: str - :param source_range: Bytes of source data in the specified range. The length of this range - should match the ContentLength header and x-ms-range/Range destination range header. Required. - :type source_range: str - :param content_length: The length of the request. Required. - :type content_length: int - :param range: The range of bytes to which the source range would be written. The range should - be 512 aligned and range-end is required. Required. - :type range: str - :param source_content_md5: Specify the md5 calculated for the range of bytes that must be read - from the copy source. Default value is None. - :type source_content_md5: bytes - :param source_contentcrc64: Specify the crc64 calculated for the range of bytes that must be - read from the copy source. Default value is None. - :type source_contentcrc64: bytes - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param copy_source_authorization: Only Bearer type is supported. Credentials should be a valid - OAuth access token to copy source. Default value is None. - :type copy_source_authorization: str - :param file_request_intent: Valid value is backup. "backup" Default value is None. - :type file_request_intent: str or ~azure.storage.blob.models.FileShareTokenIntent - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param sequence_number_access_conditions: Parameter group. Default value is None. - :type sequence_number_access_conditions: - ~azure.storage.blob.models.SequenceNumberAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param source_modified_access_conditions: Parameter group. Default value is None. - :type source_modified_access_conditions: - ~azure.storage.blob.models.SourceModifiedAccessConditions - :param source_cpk_info: Parameter group. Default value is None. - :type source_cpk_info: ~azure.storage.blob.models.SourceCpkInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["page"] = kwargs.pop("comp", _params.pop("comp", "page")) - page_write: Literal["update"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "update")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _lease_id = None - _if_sequence_number_less_than_or_equal_to = None - _if_sequence_number_less_than = None - _if_sequence_number_equal_to = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _source_if_modified_since = None - _source_if_unmodified_since = None - _source_if_match = None - _source_if_none_match = None - _source_encryption_key = None - _source_encryption_key_sha256 = None - _source_encryption_algorithm = None - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if sequence_number_access_conditions is not None: - _if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to - _if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than - _if_sequence_number_less_than_or_equal_to = ( - sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to - ) - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if source_modified_access_conditions is not None: - _source_if_match = source_modified_access_conditions.source_if_match - _source_if_modified_since = source_modified_access_conditions.source_if_modified_since - _source_if_none_match = source_modified_access_conditions.source_if_none_match - _source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since - if source_cpk_info is not None: - _source_encryption_algorithm = source_cpk_info.source_encryption_algorithm - _source_encryption_key = source_cpk_info.source_encryption_key - _source_encryption_key_sha256 = source_cpk_info.source_encryption_key_sha256 - - _request = build_upload_pages_from_url_request( - url=self._config.url, - source_url=source_url, - source_range=source_range, - content_length=content_length, - range=range, - version=self._config.version, - source_content_md5=source_content_md5, - source_contentcrc64=source_contentcrc64, - timeout=timeout, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - lease_id=_lease_id, - if_sequence_number_less_than_or_equal_to=_if_sequence_number_less_than_or_equal_to, - if_sequence_number_less_than=_if_sequence_number_less_than, - if_sequence_number_equal_to=_if_sequence_number_equal_to, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - source_if_modified_since=_source_if_modified_since, - source_if_unmodified_since=_source_if_unmodified_since, - source_if_match=_source_if_match, - source_if_none_match=_source_if_none_match, - request_id_parameter=request_id_parameter, - copy_source_authorization=copy_source_authorization, - file_request_intent=file_request_intent, - source_encryption_key=_source_encryption_key, - source_encryption_key_sha256=_source_encryption_key_sha256, - source_encryption_algorithm=_source_encryption_algorithm, - comp=comp, - page_write=page_write, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def get_page_ranges( - self, - snapshot: Optional[str] = None, - timeout: Optional[int] = None, - range: Optional[str] = None, - request_id_parameter: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> _models.PageList: - """The Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot - of a page blob. - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param range: Return only the bytes of the blob in the specified range. Default value is None. - :type range: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: PageList or the result of cls(response) - :rtype: ~azure.storage.blob.models.PageList - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["pagelist"] = kwargs.pop("comp", _params.pop("comp", "pagelist")) - cls: ClsType[_models.PageList] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_get_page_ranges_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - timeout=timeout, - range=range, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - marker=marker, - maxresults=maxresults, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["x-ms-blob-content-length"] = self._deserialize( - "int", response.headers.get("x-ms-blob-content-length") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("PageList", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def get_page_ranges_diff( - self, - snapshot: Optional[str] = None, - timeout: Optional[int] = None, - prevsnapshot: Optional[str] = None, - prev_snapshot_url: Optional[str] = None, - range: Optional[str] = None, - request_id_parameter: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> _models.PageList: - """The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob that - were changed between target blob and previous snapshot. - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param prevsnapshot: Optional in version 2015-07-08 and newer. The prevsnapshot parameter is a - DateTime value that specifies that the response will contain only pages that were changed - between target blob and previous snapshot. Changed pages include both updated and cleared - pages. The target blob may be a snapshot, as long as the snapshot specified by prevsnapshot is - the older of the two. Note that incremental snapshots are currently supported only for blobs - created on or after January 1, 2016. Default value is None. - :type prevsnapshot: str - :param prev_snapshot_url: Optional. This header is only supported in service versions - 2019-04-19 and after and specifies the URL of a previous snapshot of the target blob. The - response will only contain pages that were changed between the target blob and its previous - snapshot. Default value is None. - :type prev_snapshot_url: str - :param range: Return only the bytes of the blob in the specified range. Default value is None. - :type range: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: PageList or the result of cls(response) - :rtype: ~azure.storage.blob.models.PageList - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["pagelist"] = kwargs.pop("comp", _params.pop("comp", "pagelist")) - cls: ClsType[_models.PageList] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_get_page_ranges_diff_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - timeout=timeout, - prevsnapshot=prevsnapshot, - prev_snapshot_url=prev_snapshot_url, - range=range, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - marker=marker, - maxresults=maxresults, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["x-ms-blob-content-length"] = self._deserialize( - "int", response.headers.get("x-ms-blob-content-length") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("PageList", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def resize( - self, - blob_content_length: int, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """Resize the Blob. - - :param blob_content_length: This header specifies the maximum size for the page blob, up to 1 - TB. The page blob size must be aligned to a 512-byte boundary. Required. - :type blob_content_length: int - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_resize_request( - url=self._config.url, - blob_content_length=blob_content_length, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def update_sequence_number( - self, - sequence_number_action: Union[str, _models.SequenceNumberActionType], - timeout: Optional[int] = None, - blob_sequence_number: int = 0, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """Update the sequence number of the blob. - - :param sequence_number_action: Required if the x-ms-blob-sequence-number header is set for the - request. This property applies to page blobs only. This property indicates how the service - should modify the blob's sequence number. Known values are: "max", "update", and "increment". - Required. - :type sequence_number_action: str or ~azure.storage.blob.models.SequenceNumberActionType - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param blob_sequence_number: Set for page blobs only. The sequence number is a user-controlled - value that you can use to track requests. The value of the sequence number must be between 0 - and 2^63 - 1. Default value is 0. - :type blob_sequence_number: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_update_sequence_number_request( - url=self._config.url, - sequence_number_action=sequence_number_action, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - blob_sequence_number=blob_sequence_number, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def copy_incremental( - self, - copy_source: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Copy Incremental operation copies a snapshot of the source page blob to a destination page - blob. The snapshot is copied such that only the differential changes between the previously - copied snapshot are transferred to the destination. The copied snapshots are complete copies of - the original snapshot and can be read or copied from as usual. This API is supported since REST - version 2016-05-31. - - :param copy_source: Specifies the name of the source page blob snapshot. This value is a URL of - up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it - would appear in a request URI. The source blob must either be public or must be authenticated - via a shared access signature. Required. - :type copy_source: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["incrementalcopy"] = kwargs.pop("comp", _params.pop("comp", "incrementalcopy")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_copy_incremental_request( - url=self._config.url, - copy_source=copy_source, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_service_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_service_operations.py deleted file mode 100644 index b0cc80ff0561..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_service_operations.py +++ /dev/null @@ -1,768 +0,0 @@ -# pylint: disable=line-too-long,useless-suppression -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -from collections.abc import MutableMapping -from typing import Any, AsyncIterator, Callable, IO, Literal, Optional, TypeVar, Union - -from azure.core import AsyncPipelineClient -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - StreamClosedError, - StreamConsumedError, - map_error, -) -from azure.core.pipeline import PipelineResponse -from azure.core.rest import AsyncHttpResponse, HttpRequest -from azure.core.tracing.decorator_async import distributed_trace_async -from azure.core.utils import case_insensitive_dict - -from ... import models as _models -from ..._utils.serialization import Deserializer, Serializer -from ...operations._service_operations import ( - build_filter_blobs_request, - build_get_account_info_request, - build_get_properties_request, - build_get_statistics_request, - build_get_user_delegation_key_request, - build_list_containers_segment_request, - build_set_properties_request, - build_submit_batch_request, -) -from .._configuration import AzureBlobStorageConfiguration - -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, dict[str, Any]], Any]] - - -class ServiceOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.storage.blob.aio.AzureBlobStorage`'s - :attr:`service` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: AzureBlobStorageConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace_async - async def set_properties( - self, - storage_service_properties: _models.StorageServiceProperties, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> None: - """Sets properties for a storage account's Blob service endpoint, including properties for Storage - Analytics and CORS (Cross-Origin Resource Sharing) rules. - - :param storage_service_properties: The StorageService properties. Required. - :type storage_service_properties: ~azure.storage.blob.models.StorageServiceProperties - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["service"] = kwargs.pop("restype", _params.pop("restype", "service")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _content = self._serialize.body(storage_service_properties, "StorageServiceProperties", is_xml=True) - - _request = build_set_properties_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def get_properties( - self, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any - ) -> _models.StorageServiceProperties: - """gets the properties of a storage account's Blob service, including properties for Storage - Analytics and CORS (Cross-Origin Resource Sharing) rules. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: StorageServiceProperties or the result of cls(response) - :rtype: ~azure.storage.blob.models.StorageServiceProperties - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["service"] = kwargs.pop("restype", _params.pop("restype", "service")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[_models.StorageServiceProperties] = kwargs.pop("cls", None) - - _request = build_get_properties_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - - deserialized = self._deserialize("StorageServiceProperties", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def get_statistics( - self, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any - ) -> _models.StorageServiceStats: - """Retrieves statistics related to replication for the Blob service. It is only available on the - secondary location endpoint when read-access geo-redundant replication is enabled for the - storage account. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: StorageServiceStats or the result of cls(response) - :rtype: ~azure.storage.blob.models.StorageServiceStats - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["service"] = kwargs.pop("restype", _params.pop("restype", "service")) - comp: Literal["stats"] = kwargs.pop("comp", _params.pop("comp", "stats")) - cls: ClsType[_models.StorageServiceStats] = kwargs.pop("cls", None) - - _request = build_get_statistics_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("StorageServiceStats", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def list_containers_segment( - self, - prefix: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.ListContainersIncludeType]]] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> _models.ListContainersSegmentResponse: - """The List Containers Segment operation returns a list of the containers under the specified - account. - - :param prefix: Filters the results to return only containers whose name begins with the - specified prefix. Default value is None. - :type prefix: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param include: Include this parameter to specify that the container's metadata be returned as - part of the response body. Default value is None. - :type include: list[str or ~azure.storage.blob.models.ListContainersIncludeType] - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: ListContainersSegmentResponse or the result of cls(response) - :rtype: ~azure.storage.blob.models.ListContainersSegmentResponse - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["list"] = kwargs.pop("comp", _params.pop("comp", "list")) - cls: ClsType[_models.ListContainersSegmentResponse] = kwargs.pop("cls", None) - - _request = build_list_containers_segment_request( - url=self._config.url, - version=self._config.version, - prefix=prefix, - marker=marker, - maxresults=maxresults, - include=include, - timeout=timeout, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - - deserialized = self._deserialize("ListContainersSegmentResponse", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def get_user_delegation_key( - self, - key_info: _models.KeyInfo, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> _models.UserDelegationKey: - """Retrieves a user delegation key for the Blob service. This is only a valid operation when using - bearer token authentication. - - :param key_info: Key information. Required. - :type key_info: ~azure.storage.blob.models.KeyInfo - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: UserDelegationKey or the result of cls(response) - :rtype: ~azure.storage.blob.models.UserDelegationKey - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["service"] = kwargs.pop("restype", _params.pop("restype", "service")) - comp: Literal["userdelegationkey"] = kwargs.pop("comp", _params.pop("comp", "userdelegationkey")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) - cls: ClsType[_models.UserDelegationKey] = kwargs.pop("cls", None) - - _content = self._serialize.body(key_info, "KeyInfo", is_xml=True) - - _request = build_get_user_delegation_key_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("UserDelegationKey", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def get_account_info( - self, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any - ) -> None: - """Returns the sku name and account kind. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["account"] = kwargs.pop("restype", _params.pop("restype", "account")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_get_account_info_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-sku-name"] = self._deserialize("str", response.headers.get("x-ms-sku-name")) - response_headers["x-ms-account-kind"] = self._deserialize("str", response.headers.get("x-ms-account-kind")) - response_headers["x-ms-is-hns-enabled"] = self._deserialize("bool", response.headers.get("x-ms-is-hns-enabled")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace_async - async def submit_batch( - self, - content_length: int, - body: IO[bytes], - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> AsyncIterator[bytes]: - """The Batch operation allows multiple API calls to be embedded into a single HTTP request. - - :param content_length: The length of the request. Required. - :type content_length: int - :param body: Initial data. Required. - :type body: IO[bytes] - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: AsyncIterator[bytes] or the result of cls(response) - :rtype: AsyncIterator[bytes] - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["batch"] = kwargs.pop("comp", _params.pop("comp", "batch")) - multipart_content_type: str = kwargs.pop( - "multipart_content_type", _headers.pop("Content-Type", "application/xml") - ) - cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) - - _content = body - - _request = build_submit_batch_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - comp=comp, - multipart_content_type=multipart_content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _decompress = kwargs.pop("decompress", True) - _stream = True - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - try: - await response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - - deserialized = response.stream_download(self._client._pipeline, decompress=_decompress) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace_async - async def filter_blobs( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - where: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.FilterBlobsIncludeItem]]] = None, - **kwargs: Any - ) -> _models.FilterBlobSegment: - """The Filter Blobs operation enables callers to list blobs across all containers whose tags match - a given search expression. Filter blobs searches across all containers within a storage - account but can be scoped within the expression to a single container. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param where: Filters the results to return only to return only blobs whose tags match the - specified expression. Default value is None. - :type where: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param include: Include this parameter to specify one or more datasets to include in the - response. Default value is None. - :type include: list[str or ~azure.storage.blob.models.FilterBlobsIncludeItem] - :return: FilterBlobSegment or the result of cls(response) - :rtype: ~azure.storage.blob.models.FilterBlobSegment - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["blobs"] = kwargs.pop("comp", _params.pop("comp", "blobs")) - cls: ClsType[_models.FilterBlobSegment] = kwargs.pop("cls", None) - - _request = build_filter_blobs_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - where=where, - marker=marker, - maxresults=maxresults, - include=include, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("FilterBlobSegment", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/apiview-properties.json b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/apiview-properties.json new file mode 100644 index 000000000000..af2b4301c396 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/apiview-properties.json @@ -0,0 +1,217 @@ +{ + "CrossLanguagePackageId": "Storage.Blob", + "CrossLanguageDefinitionId": { + "azure.storage.blobs.models.AccessPolicy": "Storage.Blob.AccessPolicy", + "azure.storage.blobs.models.ArrowConfiguration": "Storage.Blob.ArrowConfiguration", + "azure.storage.blobs.models.ArrowField": "Storage.Blob.ArrowField", + "azure.storage.blobs.models.BlobFlatListSegment": "Storage.Blob.BlobFlatListSegment", + "azure.storage.blobs.models.BlobHierarchyListSegment": "Storage.Blob.BlobHierarchyListSegment", + "azure.storage.blobs.models.BlobItemInternal": "Storage.Blob.BlobItemInternal", + "azure.storage.blobs.models.BlobMetadata": "Storage.Blob.BlobMetadata", + "azure.storage.blobs.models.BlobName": "Storage.Blob.BlobName", + "azure.storage.blobs.models.BlobPrefix": "Storage.Blob.BlobPrefix", + "azure.storage.blobs.models.BlobPropertiesInternal": "Storage.Blob.BlobPropertiesInternal", + "azure.storage.blobs.models.BlobServiceProperties": "Storage.Blob.BlobServiceProperties", + "azure.storage.blobs.models.BlobTag": "Storage.Blob.BlobTag", + "azure.storage.blobs.models.BlobTags": "Storage.Blob.BlobTags", + "azure.storage.blobs.models.Block": "Storage.Blob.Block", + "azure.storage.blobs.models.BlockList": "Storage.Blob.BlockList", + "azure.storage.blobs.models.BlockLookupList": "Storage.Blob.BlockLookupList", + "azure.storage.blobs.models.ClearRange": "Storage.Blob.ClearRange", + "azure.storage.blobs.models.ContainerItem": "Storage.Blob.ContainerItem", + "azure.storage.blobs.models.ContainerProperties": "Storage.Blob.ContainerProperties", + "azure.storage.blobs.models.CorsRule": "Storage.Blob.CorsRule", + "azure.storage.blobs.models.DelimitedTextConfiguration": "Storage.Blob.DelimitedTextConfiguration", + "azure.storage.blobs.models.FilterBlobItem": "Storage.Blob.FilterBlobItem", + "azure.storage.blobs.models.FilterBlobSegment": "Storage.Blob.FilterBlobSegment", + "azure.storage.blobs.models.GeoReplication": "Storage.Blob.GeoReplication", + "azure.storage.blobs.models.JsonTextConfiguration": "Storage.Blob.JsonTextConfiguration", + "azure.storage.blobs.models.KeyInfo": "Storage.Blob.KeyInfo", + "azure.storage.blobs.models.ListBlobsFlatSegmentResponse": "Storage.Blob.ListBlobsFlatSegmentResponse", + "azure.storage.blobs.models.ListBlobsHierarchySegmentResponse": "Storage.Blob.ListBlobsHierarchySegmentResponse", + "azure.storage.blobs.models.ListContainersSegmentResponse": "Storage.Blob.ListContainersSegmentResponse", + "azure.storage.blobs.models.Logging": "Storage.Blob.Logging", + "azure.storage.blobs.models.Metrics": "Storage.Blob.Metrics", + "azure.storage.blobs.models.ObjectReplicationMetadata": "Storage.Blob.ObjectReplicationMetadata", + "azure.storage.blobs.models.PageList": "Storage.Blob.PageList", + "azure.storage.blobs.models.PageRange": "Storage.Blob.PageRange", + "azure.storage.blobs.models.ParquetConfiguration": "Storage.Blob.ParquetConfiguration", + "azure.storage.blobs.models.QueryFormat": "Storage.Blob.QueryFormat", + "azure.storage.blobs.models.QueryRequest": "Storage.Blob.QueryRequest", + "azure.storage.blobs.models.QuerySerialization": "Storage.Blob.QuerySerialization", + "azure.storage.blobs.models.RetentionPolicy": "Storage.Blob.RetentionPolicy", + "azure.storage.blobs.models.SignedIdentifier": "Storage.Blob.SignedIdentifier", + "azure.storage.blobs.models.SignedIdentifiers": "Storage.Blob.SignedIdentifiers", + "azure.storage.blobs.models.StaticWebsite": "Storage.Blob.StaticWebsite", + "azure.storage.blobs.models.StorageError": "Storage.Blob.StorageError", + "azure.storage.blobs.models.StorageServiceStats": "Storage.Blob.StorageServiceStats", + "azure.storage.blobs.models.SubmitBatchRequest": "Storage.Blob.submitBatch.Request.anonymous", + "azure.storage.blobs.models.UserDelegationKey": "Storage.Blob.UserDelegationKey", + "azure.storage.blobs.models.StorageErrorCode": "Storage.Blob.StorageErrorCode", + "azure.storage.blobs.models.GeoReplicationStatusType": "Storage.Blob.GeoReplicationStatusType", + "azure.storage.blobs.models.LeaseStatus": "Storage.Blob.LeaseStatus", + "azure.storage.blobs.models.LeaseState": "Storage.Blob.LeaseState", + "azure.storage.blobs.models.LeaseDuration": "Storage.Blob.LeaseDuration", + "azure.storage.blobs.models.PublicAccessType": "Storage.Blob.PublicAccessType", + "azure.storage.blobs.models.ListContainersIncludeType": "Storage.Blob.ListContainersIncludeType", + "azure.storage.blobs.models.SkuName": "Storage.Blob.SkuName", + "azure.storage.blobs.models.AccountKind": "Storage.Blob.AccountKind", + "azure.storage.blobs.models.FilterBlobsIncludeItem": "Storage.Blob.FilterBlobsIncludeItem", + "azure.storage.blobs.models.BlobType": "Storage.Blob.BlobType", + "azure.storage.blobs.models.CopyStatus": "Storage.Blob.CopyStatus", + "azure.storage.blobs.models.AccessTier": "Storage.Blob.AccessTier", + "azure.storage.blobs.models.ArchiveStatus": "Storage.Blob.ArchiveStatus", + "azure.storage.blobs.models.RehydratePriority": "Storage.Blob.RehydratePriority", + "azure.storage.blobs.models.ImmutabilityPolicyMode": "Storage.Blob.ImmutabilityPolicyMode", + "azure.storage.blobs.models.ListBlobsIncludeItem": "Storage.Blob.ListBlobsIncludeItem", + "azure.storage.blobs.models.EncryptionAlgorithmType": "Storage.Blob.EncryptionAlgorithmType", + "azure.storage.blobs.models.DeleteSnapshotsOptionType": "Storage.Blob.DeleteSnapshotsOptionType", + "azure.storage.blobs.models.BlobDeleteType": "Storage.Blob.BlobDeleteType", + "azure.storage.blobs.models.BlobExpiryOptions": "Storage.Blob.BlobExpiryOptions", + "azure.storage.blobs.models.BlobCopySourceTags": "Storage.Blob.BlobCopySourceTags", + "azure.storage.blobs.models.FileShareTokenIntent": "Storage.Blob.FileShareTokenIntent", + "azure.storage.blobs.models.PremiumPageBlobAccessTier": "Storage.Blob.PremiumPageBlobAccessTier", + "azure.storage.blobs.models.SequenceNumberActionType": "Storage.Blob.SequenceNumberActionType", + "azure.storage.blobs.models.BlockListType": "Storage.Blob.BlockListType", + "azure.storage.blobs.models.QueryRequestType": "Storage.Blob.QueryRequestType", + "azure.storage.blobs.models.QueryType": "Storage.Blob.QueryType", + "azure.storage.blobs.ServiceClient.set_properties": "Storage.Blob.Service.setProperties", + "azure.storage.blobs.aio.ServiceClient.set_properties": "Storage.Blob.Service.setProperties", + "azure.storage.blobs.ServiceClient.get_properties": "Storage.Blob.Service.getProperties", + "azure.storage.blobs.aio.ServiceClient.get_properties": "Storage.Blob.Service.getProperties", + "azure.storage.blobs.ServiceClient.get_statistics": "Storage.Blob.Service.getStatistics", + "azure.storage.blobs.aio.ServiceClient.get_statistics": "Storage.Blob.Service.getStatistics", + "azure.storage.blobs.ServiceClient.list_containers_segment": "Storage.Blob.Service.listContainersSegment", + "azure.storage.blobs.aio.ServiceClient.list_containers_segment": "Storage.Blob.Service.listContainersSegment", + "azure.storage.blobs.ServiceClient.get_user_delegation_key": "Storage.Blob.Service.getUserDelegationKey", + "azure.storage.blobs.aio.ServiceClient.get_user_delegation_key": "Storage.Blob.Service.getUserDelegationKey", + "azure.storage.blobs.ServiceClient.get_account_info": "Storage.Blob.Service.getAccountInfo", + "azure.storage.blobs.aio.ServiceClient.get_account_info": "Storage.Blob.Service.getAccountInfo", + "azure.storage.blobs.ServiceClient.submit_batch": "Storage.Blob.Service.submitBatch", + "azure.storage.blobs.aio.ServiceClient.submit_batch": "Storage.Blob.Service.submitBatch", + "azure.storage.blobs.ServiceClient.find_blobs_by_tags": "Storage.Blob.Service.findBlobsByTags", + "azure.storage.blobs.aio.ServiceClient.find_blobs_by_tags": "Storage.Blob.Service.findBlobsByTags", + "azure.storage.blobs.ContainerClient.create": "Storage.Blob.Container.create", + "azure.storage.blobs.aio.ContainerClient.create": "Storage.Blob.Container.create", + "azure.storage.blobs.ContainerClient.get_properties": "Storage.Blob.Container.getProperties", + "azure.storage.blobs.aio.ContainerClient.get_properties": "Storage.Blob.Container.getProperties", + "azure.storage.blobs.ContainerClient.delete": "Storage.Blob.Container.delete", + "azure.storage.blobs.aio.ContainerClient.delete": "Storage.Blob.Container.delete", + "azure.storage.blobs.ContainerClient.set_metadata": "Storage.Blob.Container.setMetadata", + "azure.storage.blobs.aio.ContainerClient.set_metadata": "Storage.Blob.Container.setMetadata", + "azure.storage.blobs.ContainerClient.get_access_policy": "Storage.Blob.Container.getAccessPolicy", + "azure.storage.blobs.aio.ContainerClient.get_access_policy": "Storage.Blob.Container.getAccessPolicy", + "azure.storage.blobs.ContainerClient.set_access_policy": "Storage.Blob.Container.setAccessPolicy", + "azure.storage.blobs.aio.ContainerClient.set_access_policy": "Storage.Blob.Container.setAccessPolicy", + "azure.storage.blobs.ContainerClient.restore": "Storage.Blob.Container.restore", + "azure.storage.blobs.aio.ContainerClient.restore": "Storage.Blob.Container.restore", + "azure.storage.blobs.ContainerClient.rename": "Storage.Blob.Container.rename", + "azure.storage.blobs.aio.ContainerClient.rename": "Storage.Blob.Container.rename", + "azure.storage.blobs.ContainerClient.submit_batch": "Storage.Blob.Container.submitBatch", + "azure.storage.blobs.aio.ContainerClient.submit_batch": "Storage.Blob.Container.submitBatch", + "azure.storage.blobs.ContainerClient.find_blobs_by_tags": "Storage.Blob.Container.findBlobsByTags", + "azure.storage.blobs.aio.ContainerClient.find_blobs_by_tags": "Storage.Blob.Container.findBlobsByTags", + "azure.storage.blobs.ContainerClient.acquire_lease": "Storage.Blob.Container.acquireLease", + "azure.storage.blobs.aio.ContainerClient.acquire_lease": "Storage.Blob.Container.acquireLease", + "azure.storage.blobs.ContainerClient.release_lease": "Storage.Blob.Container.releaseLease", + "azure.storage.blobs.aio.ContainerClient.release_lease": "Storage.Blob.Container.releaseLease", + "azure.storage.blobs.ContainerClient.renew_lease": "Storage.Blob.Container.renewLease", + "azure.storage.blobs.aio.ContainerClient.renew_lease": "Storage.Blob.Container.renewLease", + "azure.storage.blobs.ContainerClient.break_lease": "Storage.Blob.Container.breakLease", + "azure.storage.blobs.aio.ContainerClient.break_lease": "Storage.Blob.Container.breakLease", + "azure.storage.blobs.ContainerClient.change_lease": "Storage.Blob.Container.changeLease", + "azure.storage.blobs.aio.ContainerClient.change_lease": "Storage.Blob.Container.changeLease", + "azure.storage.blobs.ContainerClient.list_blob_flat_segment": "Storage.Blob.Container.listBlobFlatSegment", + "azure.storage.blobs.aio.ContainerClient.list_blob_flat_segment": "Storage.Blob.Container.listBlobFlatSegment", + "azure.storage.blobs.ContainerClient.list_blob_hierarchy_segment": "Storage.Blob.Container.listBlobHierarchySegment", + "azure.storage.blobs.aio.ContainerClient.list_blob_hierarchy_segment": "Storage.Blob.Container.listBlobHierarchySegment", + "azure.storage.blobs.ContainerClient.get_account_info": "Storage.Blob.Container.getAccountInfo", + "azure.storage.blobs.aio.ContainerClient.get_account_info": "Storage.Blob.Container.getAccountInfo", + "azure.storage.blobs.BlobClient.download": "Storage.Blob.Blob.download", + "azure.storage.blobs.aio.BlobClient.download": "Storage.Blob.Blob.download", + "azure.storage.blobs.BlobClient.get_properties": "Storage.Blob.Blob.getProperties", + "azure.storage.blobs.aio.BlobClient.get_properties": "Storage.Blob.Blob.getProperties", + "azure.storage.blobs.BlobClient.delete": "Storage.Blob.Blob.delete", + "azure.storage.blobs.aio.BlobClient.delete": "Storage.Blob.Blob.delete", + "azure.storage.blobs.BlobClient.undelete": "Storage.Blob.Blob.undelete", + "azure.storage.blobs.aio.BlobClient.undelete": "Storage.Blob.Blob.undelete", + "azure.storage.blobs.BlobClient.set_expiry": "Storage.Blob.Blob.setExpiry", + "azure.storage.blobs.aio.BlobClient.set_expiry": "Storage.Blob.Blob.setExpiry", + "azure.storage.blobs.BlobClient.set_properties": "Storage.Blob.Blob.setProperties", + "azure.storage.blobs.aio.BlobClient.set_properties": "Storage.Blob.Blob.setProperties", + "azure.storage.blobs.BlobClient.set_immutability_policy": "Storage.Blob.Blob.setImmutabilityPolicy", + "azure.storage.blobs.aio.BlobClient.set_immutability_policy": "Storage.Blob.Blob.setImmutabilityPolicy", + "azure.storage.blobs.BlobClient.delete_immutability_policy": "Storage.Blob.Blob.deleteImmutabilityPolicy", + "azure.storage.blobs.aio.BlobClient.delete_immutability_policy": "Storage.Blob.Blob.deleteImmutabilityPolicy", + "azure.storage.blobs.BlobClient.set_legal_hold": "Storage.Blob.Blob.setLegalHold", + "azure.storage.blobs.aio.BlobClient.set_legal_hold": "Storage.Blob.Blob.setLegalHold", + "azure.storage.blobs.BlobClient.set_metadata": "Storage.Blob.Blob.setMetadata", + "azure.storage.blobs.aio.BlobClient.set_metadata": "Storage.Blob.Blob.setMetadata", + "azure.storage.blobs.BlobClient.acquire_lease": "Storage.Blob.Blob.acquireLease", + "azure.storage.blobs.aio.BlobClient.acquire_lease": "Storage.Blob.Blob.acquireLease", + "azure.storage.blobs.BlobClient.release_lease": "Storage.Blob.Blob.releaseLease", + "azure.storage.blobs.aio.BlobClient.release_lease": "Storage.Blob.Blob.releaseLease", + "azure.storage.blobs.BlobClient.renew_lease": "Storage.Blob.Blob.renewLease", + "azure.storage.blobs.aio.BlobClient.renew_lease": "Storage.Blob.Blob.renewLease", + "azure.storage.blobs.BlobClient.change_lease": "Storage.Blob.Blob.changeLease", + "azure.storage.blobs.aio.BlobClient.change_lease": "Storage.Blob.Blob.changeLease", + "azure.storage.blobs.BlobClient.break_lease": "Storage.Blob.Blob.breakLease", + "azure.storage.blobs.aio.BlobClient.break_lease": "Storage.Blob.Blob.breakLease", + "azure.storage.blobs.BlobClient.create_snapshot": "Storage.Blob.Blob.createSnapshot", + "azure.storage.blobs.aio.BlobClient.create_snapshot": "Storage.Blob.Blob.createSnapshot", + "azure.storage.blobs.BlobClient.start_copy_from_url": "Storage.Blob.Blob.startCopyFromUrl", + "azure.storage.blobs.aio.BlobClient.start_copy_from_url": "Storage.Blob.Blob.startCopyFromUrl", + "azure.storage.blobs.BlobClient.copy_from_url": "Storage.Blob.Blob.copyFromUrl", + "azure.storage.blobs.aio.BlobClient.copy_from_url": "Storage.Blob.Blob.copyFromUrl", + "azure.storage.blobs.BlobClient.abort_copy_from_url": "Storage.Blob.Blob.abortCopyFromUrl", + "azure.storage.blobs.aio.BlobClient.abort_copy_from_url": "Storage.Blob.Blob.abortCopyFromUrl", + "azure.storage.blobs.BlobClient.set_tier": "Storage.Blob.Blob.setTier", + "azure.storage.blobs.aio.BlobClient.set_tier": "Storage.Blob.Blob.setTier", + "azure.storage.blobs.BlobClient.get_account_info": "Storage.Blob.Blob.getAccountInfo", + "azure.storage.blobs.aio.BlobClient.get_account_info": "Storage.Blob.Blob.getAccountInfo", + "azure.storage.blobs.BlobClient.get_tags": "Storage.Blob.Blob.getTags", + "azure.storage.blobs.aio.BlobClient.get_tags": "Storage.Blob.Blob.getTags", + "azure.storage.blobs.BlobClient.set_tags": "Storage.Blob.Blob.setTags", + "azure.storage.blobs.aio.BlobClient.set_tags": "Storage.Blob.Blob.setTags", + "azure.storage.blobs.PageBlobClient.create": "Storage.Blob.PageBlob.create", + "azure.storage.blobs.aio.PageBlobClient.create": "Storage.Blob.PageBlob.create", + "azure.storage.blobs.PageBlobClient.upload_pages": "Storage.Blob.PageBlob.uploadPages", + "azure.storage.blobs.aio.PageBlobClient.upload_pages": "Storage.Blob.PageBlob.uploadPages", + "azure.storage.blobs.PageBlobClient.clear_pages": "Storage.Blob.PageBlob.clearPages", + "azure.storage.blobs.aio.PageBlobClient.clear_pages": "Storage.Blob.PageBlob.clearPages", + "azure.storage.blobs.PageBlobClient.upload_pages_from_url": "Storage.Blob.PageBlob.uploadPagesFromUrl", + "azure.storage.blobs.aio.PageBlobClient.upload_pages_from_url": "Storage.Blob.PageBlob.uploadPagesFromUrl", + "azure.storage.blobs.PageBlobClient.get_page_ranges": "Storage.Blob.PageBlob.getPageRanges", + "azure.storage.blobs.aio.PageBlobClient.get_page_ranges": "Storage.Blob.PageBlob.getPageRanges", + "azure.storage.blobs.PageBlobClient.get_page_ranges_diff": "Storage.Blob.PageBlob.getPageRangesDiff", + "azure.storage.blobs.aio.PageBlobClient.get_page_ranges_diff": "Storage.Blob.PageBlob.getPageRangesDiff", + "azure.storage.blobs.PageBlobClient.resize": "Storage.Blob.PageBlob.resize", + "azure.storage.blobs.aio.PageBlobClient.resize": "Storage.Blob.PageBlob.resize", + "azure.storage.blobs.PageBlobClient.set_sequence_number": "Storage.Blob.PageBlob.setSequenceNumber", + "azure.storage.blobs.aio.PageBlobClient.set_sequence_number": "Storage.Blob.PageBlob.setSequenceNumber", + "azure.storage.blobs.PageBlobClient.copy_incremental": "Storage.Blob.PageBlob.copyIncremental", + "azure.storage.blobs.aio.PageBlobClient.copy_incremental": "Storage.Blob.PageBlob.copyIncremental", + "azure.storage.blobs.AppendBlobClient.create": "Storage.Blob.AppendBlob.create", + "azure.storage.blobs.aio.AppendBlobClient.create": "Storage.Blob.AppendBlob.create", + "azure.storage.blobs.AppendBlobClient.append_block": "Storage.Blob.AppendBlob.appendBlock", + "azure.storage.blobs.aio.AppendBlobClient.append_block": "Storage.Blob.AppendBlob.appendBlock", + "azure.storage.blobs.AppendBlobClient.append_block_from_url": "Storage.Blob.AppendBlob.appendBlockFromUrl", + "azure.storage.blobs.aio.AppendBlobClient.append_block_from_url": "Storage.Blob.AppendBlob.appendBlockFromUrl", + "azure.storage.blobs.AppendBlobClient.seal": "Storage.Blob.AppendBlob.seal", + "azure.storage.blobs.aio.AppendBlobClient.seal": "Storage.Blob.AppendBlob.seal", + "azure.storage.blobs.BlockBlobClient.upload": "Storage.Blob.BlockBlob.upload", + "azure.storage.blobs.aio.BlockBlobClient.upload": "Storage.Blob.BlockBlob.upload", + "azure.storage.blobs.BlockBlobClient.upload_blob_from_url": "Storage.Blob.BlockBlob.uploadBlobFromUrl", + "azure.storage.blobs.aio.BlockBlobClient.upload_blob_from_url": "Storage.Blob.BlockBlob.uploadBlobFromUrl", + "azure.storage.blobs.BlockBlobClient.stage_block": "Storage.Blob.BlockBlob.stageBlock", + "azure.storage.blobs.aio.BlockBlobClient.stage_block": "Storage.Blob.BlockBlob.stageBlock", + "azure.storage.blobs.BlockBlobClient.stage_block_from_url": "Storage.Blob.BlockBlob.stageBlockFromUrl", + "azure.storage.blobs.aio.BlockBlobClient.stage_block_from_url": "Storage.Blob.BlockBlob.stageBlockFromUrl", + "azure.storage.blobs.BlockBlobClient.commit_block_list": "Storage.Blob.BlockBlob.commitBlockList", + "azure.storage.blobs.aio.BlockBlobClient.commit_block_list": "Storage.Blob.BlockBlob.commitBlockList", + "azure.storage.blobs.BlockBlobClient.get_block_list": "Storage.Blob.BlockBlob.getBlockList", + "azure.storage.blobs.aio.BlockBlobClient.get_block_list": "Storage.Blob.BlockBlob.getBlockList", + "azure.storage.blobs.BlockBlobClient.query": "Storage.Blob.BlockBlob.query", + "azure.storage.blobs.aio.BlockBlobClient.query": "Storage.Blob.BlockBlob.query" + } +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/__init__.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/__init__.py new file mode 100644 index 000000000000..d55ccad1f573 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/__init__.py @@ -0,0 +1 @@ +__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/__init__.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/__init__.py new file mode 100644 index 000000000000..d55ccad1f573 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/__init__.py @@ -0,0 +1 @@ +__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/__init__.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/__init__.py new file mode 100644 index 000000000000..d3f11b3f8ba6 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/__init__.py @@ -0,0 +1,42 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=wrong-import-position + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ._patch import * # pylint: disable=unused-wildcard-import + +from ._client import ServiceClient # type: ignore +from ._client import ContainerClient # type: ignore +from ._client import BlobClient # type: ignore +from ._client import PageBlobClient # type: ignore +from ._client import AppendBlobClient # type: ignore +from ._client import BlockBlobClient # type: ignore +from ._version import VERSION + +__version__ = VERSION + +try: + from ._patch import __all__ as _patch_all + from ._patch import * +except ImportError: + _patch_all = [] +from ._patch import patch_sdk as _patch_sdk + +__all__ = [ + "ServiceClient", + "ContainerClient", + "BlobClient", + "PageBlobClient", + "AppendBlobClient", + "BlockBlobClient", +] +__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore + +_patch_sdk() diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_client.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_client.py new file mode 100644 index 000000000000..398dedb6d25e --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_client.py @@ -0,0 +1,498 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from copy import deepcopy +from typing import Any, TYPE_CHECKING +from typing_extensions import Self + +from azure.core import PipelineClient +from azure.core.pipeline import policies +from azure.core.rest import HttpRequest, HttpResponse + +from ._configuration import ( + AppendBlobClientConfiguration, + BlobClientConfiguration, + BlockBlobClientConfiguration, + ContainerClientConfiguration, + PageBlobClientConfiguration, + ServiceClientConfiguration, +) +from ._operations import ( + _AppendBlobClientOperationsMixin, + _BlobClientOperationsMixin, + _BlockBlobClientOperationsMixin, + _ContainerClientOperationsMixin, + _PageBlobClientOperationsMixin, + _ServiceClientOperationsMixin, +) +from ._utils.serialization import Deserializer, Serializer + +if TYPE_CHECKING: + from azure.core.credentials import TokenCredential + + +class ServiceClient(_ServiceClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword + """ServiceClient. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "TokenCredential", **kwargs: Any) -> None: + _endpoint = "{url}" + self._config = ServiceClientConfiguration(url=url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.HttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + def close(self) -> None: + self._client.close() + + def __enter__(self) -> Self: + self._client.__enter__() + return self + + def __exit__(self, *exc_details: Any) -> None: + self._client.__exit__(*exc_details) + + +class ContainerClient(_ContainerClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword + """ContainerClient. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "TokenCredential", **kwargs: Any) -> None: + _endpoint = "{url}" + self._config = ContainerClientConfiguration(url=url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.HttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + def close(self) -> None: + self._client.close() + + def __enter__(self) -> Self: + self._client.__enter__() + return self + + def __exit__(self, *exc_details: Any) -> None: + self._client.__exit__(*exc_details) + + +class BlobClient(_BlobClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword + """BlobClient. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "TokenCredential", **kwargs: Any) -> None: + _endpoint = "{url}" + self._config = BlobClientConfiguration(url=url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.HttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + def close(self) -> None: + self._client.close() + + def __enter__(self) -> Self: + self._client.__enter__() + return self + + def __exit__(self, *exc_details: Any) -> None: + self._client.__exit__(*exc_details) + + +class PageBlobClient(_PageBlobClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword + """PageBlobClient. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "TokenCredential", **kwargs: Any) -> None: + _endpoint = "{url}" + self._config = PageBlobClientConfiguration(url=url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.HttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + def close(self) -> None: + self._client.close() + + def __enter__(self) -> Self: + self._client.__enter__() + return self + + def __exit__(self, *exc_details: Any) -> None: + self._client.__exit__(*exc_details) + + +class AppendBlobClient(_AppendBlobClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword + """AppendBlobClient. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "TokenCredential", **kwargs: Any) -> None: + _endpoint = "{url}" + self._config = AppendBlobClientConfiguration(url=url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.HttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + def close(self) -> None: + self._client.close() + + def __enter__(self) -> Self: + self._client.__enter__() + return self + + def __exit__(self, *exc_details: Any) -> None: + self._client.__exit__(*exc_details) + + +class BlockBlobClient(_BlockBlobClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword + """BlockBlobClient. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "TokenCredential", **kwargs: Any) -> None: + _endpoint = "{url}" + self._config = BlockBlobClientConfiguration(url=url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.HttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + def close(self) -> None: + self._client.close() + + def __enter__(self) -> Self: + self._client.__enter__() + return self + + def __exit__(self, *exc_details: Any) -> None: + self._client.__exit__(*exc_details) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_configuration.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_configuration.py new file mode 100644 index 000000000000..b8ad946862be --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_configuration.py @@ -0,0 +1,304 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any, TYPE_CHECKING + +from azure.core.pipeline import policies + +from ._version import VERSION + +if TYPE_CHECKING: + from azure.core.credentials import TokenCredential + + +class ServiceClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for ServiceClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "TokenCredential", **kwargs: Any) -> None: + version: str = kwargs.pop("version", "2026-04-06") + + if url is None: + raise ValueError("Parameter 'url' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.url = url + self.credential = credential + self.version = version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://storage.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "storage-blob/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.BearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class ContainerClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for ContainerClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "TokenCredential", **kwargs: Any) -> None: + version: str = kwargs.pop("version", "2026-04-06") + + if url is None: + raise ValueError("Parameter 'url' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.url = url + self.credential = credential + self.version = version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://storage.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "storage-blob/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.BearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class BlobClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for BlobClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "TokenCredential", **kwargs: Any) -> None: + version: str = kwargs.pop("version", "2026-04-06") + + if url is None: + raise ValueError("Parameter 'url' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.url = url + self.credential = credential + self.version = version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://storage.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "storage-blob/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.BearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class PageBlobClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for PageBlobClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "TokenCredential", **kwargs: Any) -> None: + version: str = kwargs.pop("version", "2026-04-06") + + if url is None: + raise ValueError("Parameter 'url' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.url = url + self.credential = credential + self.version = version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://storage.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "storage-blob/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.BearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class AppendBlobClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for AppendBlobClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "TokenCredential", **kwargs: Any) -> None: + version: str = kwargs.pop("version", "2026-04-06") + + if url is None: + raise ValueError("Parameter 'url' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.url = url + self.credential = credential + self.version = version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://storage.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "storage-blob/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.BearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class BlockBlobClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for BlockBlobClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "TokenCredential", **kwargs: Any) -> None: + version: str = kwargs.pop("version", "2026-04-06") + + if url is None: + raise ValueError("Parameter 'url' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.url = url + self.credential = credential + self.version = version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://storage.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "storage-blob/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.BearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/__init__.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_operations/__init__.py similarity index 52% rename from sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/__init__.py rename to sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_operations/__init__.py index 4a5bb8327756..981fb79f900d 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/__init__.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_operations/__init__.py @@ -2,7 +2,7 @@ # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. +# Code generated by Microsoft (R) Python Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- # pylint: disable=wrong-import-position @@ -12,24 +12,17 @@ if TYPE_CHECKING: from ._patch import * # pylint: disable=unused-wildcard-import -from ._service_operations import ServiceOperations # type: ignore -from ._container_operations import ContainerOperations # type: ignore -from ._blob_operations import BlobOperations # type: ignore -from ._page_blob_operations import PageBlobOperations # type: ignore -from ._append_blob_operations import AppendBlobOperations # type: ignore -from ._block_blob_operations import BlockBlobOperations # type: ignore +from ._operations import _ServiceClientOperationsMixin # type: ignore # pylint: disable=unused-import +from ._operations import _ContainerClientOperationsMixin # type: ignore # pylint: disable=unused-import +from ._operations import _BlobClientOperationsMixin # type: ignore # pylint: disable=unused-import +from ._operations import _PageBlobClientOperationsMixin # type: ignore # pylint: disable=unused-import +from ._operations import _AppendBlobClientOperationsMixin # type: ignore # pylint: disable=unused-import +from ._operations import _BlockBlobClientOperationsMixin # type: ignore # pylint: disable=unused-import from ._patch import __all__ as _patch_all from ._patch import * from ._patch import patch_sdk as _patch_sdk -__all__ = [ - "ServiceOperations", - "ContainerOperations", - "BlobOperations", - "PageBlobOperations", - "AppendBlobOperations", - "BlockBlobOperations", -] +__all__ = [] __all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore _patch_sdk() diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_operations/_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_operations/_operations.py new file mode 100644 index 000000000000..cb271bfe632e --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_operations/_operations.py @@ -0,0 +1,12812 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +import datetime +from typing import Any, Callable, Iterator, Literal, Optional, TypeVar, Union + +from azure.core import MatchConditions, PipelineClient +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceModifiedError, + ResourceNotFoundError, + ResourceNotModifiedError, + StreamClosedError, + StreamConsumedError, + map_error, +) +from azure.core.pipeline import PipelineResponse +from azure.core.rest import HttpRequest, HttpResponse +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict + +from .. import models as _models +from .._configuration import ( + AppendBlobClientConfiguration, + BlobClientConfiguration, + BlockBlobClientConfiguration, + ContainerClientConfiguration, + PageBlobClientConfiguration, + ServiceClientConfiguration, +) +from .._utils.model_base import Model as _Model, _deserialize_xml, _failsafe_deserialize, _get_element +from .._utils.serialization import Serializer +from .._utils.utils import ClientMixinABC, prep_if_match, prep_if_none_match, prepare_multipart_form_data +from .._validation import api_version_validation + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + + +def build_service_set_properties_request(*, timeout: Optional[int] = None, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?restype=service&comp=properties" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_service_get_properties_request(*, timeout: Optional[int] = None, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/xml") + + # Construct URL + _url = "/?restype=service&comp=properties" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_service_get_statistics_request(*, timeout: Optional[int] = None, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/xml") + + # Construct URL + _url = "/?restype=service&comp=stats" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_service_list_containers_segment_request( # pylint: disable=name-too-long + *, + prefix: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + timeout: Optional[int] = None, + include: Optional[list[Union[str, _models.ListContainersIncludeType]]] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/xml") + + # Construct URL + _url = "/?comp=list" + + # Construct parameters + if prefix is not None: + _params["prefix"] = _SERIALIZER.query("prefix", prefix, "str") + if marker is not None: + _params["marker"] = _SERIALIZER.query("marker", marker, "str") + if maxresults is not None: + _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int") + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + if include is not None: + _params["include"] = _SERIALIZER.query("include", include, "[str]", div=",") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_service_get_user_delegation_key_request( # pylint: disable=name-too-long + *, timeout: Optional[int] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/xml") + + # Construct URL + _url = "/?restype=service&comp=userdelegationkey" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_service_get_account_info_request(*, timeout: Optional[int] = None, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?restype=account&comp=properties" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_service_submit_batch_request( + *, content_length: int, timeout: Optional[int] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + multipart_content_type: str = kwargs.pop("multipart_content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "multipart/mixed") + + # Construct URL + _url = "/?comp=batch" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_service_find_blobs_by_tags_request( + *, + filter_expression: str, + timeout: Optional[int] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + include: Optional[list[Union[str, _models.FilterBlobsIncludeItem]]] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/xml") + + # Construct URL + _url = "/?comp=blobs" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + _params["where"] = _SERIALIZER.query("filter_expression", filter_expression, "str") + if marker is not None: + _params["marker"] = _SERIALIZER.query("marker", marker, "str") + if maxresults is not None: + _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int") + if include is not None: + _params["include"] = _SERIALIZER.query("include", include, "[str]", div=",") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_create_request( + *, + timeout: Optional[int] = None, + metadata: Optional[str] = None, + access: Optional[Union[str, _models.PublicAccessType]] = None, + default_encryption_scope: Optional[str] = None, + prevent_encryption_scope_override: Optional[bool] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?restype=container" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if metadata is not None: + _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "str") + if access is not None: + _headers["x-ms-blob-public-access"] = _SERIALIZER.header("access", access, "str") + if default_encryption_scope is not None: + _headers["x-ms-default-encryption-scope"] = _SERIALIZER.header( + "default_encryption_scope", default_encryption_scope, "str" + ) + if prevent_encryption_scope_override is not None: + _headers["x-ms-deny-encryption-scope-override"] = _SERIALIZER.header( + "prevent_encryption_scope_override", prevent_encryption_scope_override, "bool" + ) + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_get_properties_request( + *, timeout: Optional[int] = None, lease_id: Optional[str] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?restype=container" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_delete_request( + *, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?restype=container" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_set_metadata_request( + *, + metadata: str, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?restype=container&comp=metadata" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_get_access_policy_request( # pylint: disable=name-too-long + *, timeout: Optional[int] = None, lease_id: Optional[str] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/xml") + + # Construct URL + _url = "/?restype=container&comp=acl" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_set_access_policy_request( # pylint: disable=name-too-long + *, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + access: Optional[Union[str, _models.PublicAccessType]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?restype=container&comp=acl" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if access is not None: + _headers["x-ms-blob-public-access"] = _SERIALIZER.header("access", access, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_restore_request( + *, + deleted_container_name: Optional[str] = None, + deleted_container_version: Optional[str] = None, + timeout: Optional[int] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?restype=container&comp=undelete" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if deleted_container_name is not None: + _headers["x-ms-deleted-container-name"] = _SERIALIZER.header( + "deleted_container_name", deleted_container_name, "str" + ) + if deleted_container_version is not None: + _headers["x-ms-deleted-container-version"] = _SERIALIZER.header( + "deleted_container_version", deleted_container_version, "str" + ) + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_rename_request( + *, source_container_name: str, source_lease_id: Optional[str] = None, timeout: Optional[int] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?restype=container&comp=rename" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-source-container-name"] = _SERIALIZER.header("source_container_name", source_container_name, "str") + if source_lease_id is not None: + _headers["x-ms-source-lease-id"] = _SERIALIZER.header("source_lease_id", source_lease_id, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_submit_batch_request( + *, content_length: int, timeout: Optional[int] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + multipart_content_type: str = kwargs.pop("multipart_content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "multipart/mixed") + + # Construct URL + _url = "/?restype=container&comp=batch" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_find_blobs_by_tags_request( # pylint: disable=name-too-long + *, + filter_expression: str, + timeout: Optional[int] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + include: Optional[list[Union[str, _models.FilterBlobsIncludeItem]]] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/xml") + + # Construct URL + _url = "/?restype=container&comp=blobs" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + _params["where"] = _SERIALIZER.query("filter_expression", filter_expression, "str") + if marker is not None: + _params["marker"] = _SERIALIZER.query("marker", marker, "str") + if maxresults is not None: + _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int") + if include is not None: + _params["include"] = _SERIALIZER.query("include", include, "[str]", div=",") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_acquire_lease_request( + *, + duration: int, + timeout: Optional[int] = None, + proposed_lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + action: Literal["acquire"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "acquire")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=lease&restype=container&acquire" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-lease-duration"] = _SERIALIZER.header("duration", duration, "int") + if proposed_lease_id is not None: + _headers["x-ms-proposed-lease-id"] = _SERIALIZER.header("proposed_lease_id", proposed_lease_id, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_release_lease_request( + *, + lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + action: Literal["release"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "release")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=lease&restype=container&release" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_renew_lease_request( + *, + lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + action: Literal["renew"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "renew")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=lease&restype=container&renew" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_break_lease_request( + *, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + break_period: Optional[int] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + action: Literal["break"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "break")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=lease&restype=container&break" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if break_period is not None: + _headers["x-ms-lease-break-period"] = _SERIALIZER.header("break_period", break_period, "int") + _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_change_lease_request( + *, + lease_id: str, + proposed_lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + action: Literal["change"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "change")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=lease&restype=container&change" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + _headers["x-ms-proposed-lease-id"] = _SERIALIZER.header("proposed_lease_id", proposed_lease_id, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_list_blob_flat_segment_request( # pylint: disable=name-too-long + *, + prefix: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + include: Optional[list[Union[str, _models.ListBlobsIncludeItem]]] = None, + timeout: Optional[int] = None, + start_from: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/xml") + + # Construct URL + _url = "/?restype=container&comp=list&flat" + + # Construct parameters + if prefix is not None: + _params["prefix"] = _SERIALIZER.query("prefix", prefix, "str") + if marker is not None: + _params["marker"] = _SERIALIZER.query("marker", marker, "str") + if maxresults is not None: + _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int") + if include is not None: + _params["include"] = _SERIALIZER.query("include", include, "[str]", div=",") + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + if start_from is not None: + _params["startFrom"] = _SERIALIZER.query("start_from", start_from, "str") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_list_blob_hierarchy_segment_request( # pylint: disable=name-too-long + *, + delimiter: str, + prefix: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + include: Optional[list[Union[str, _models.ListBlobsIncludeItem]]] = None, + timeout: Optional[int] = None, + start_from: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/xml") + + # Construct URL + _url = "/?restype=container&comp=list&hierarchy" + + # Construct parameters + _params["delimiter"] = _SERIALIZER.query("delimiter", delimiter, "str") + if prefix is not None: + _params["prefix"] = _SERIALIZER.query("prefix", prefix, "str") + if marker is not None: + _params["marker"] = _SERIALIZER.query("marker", marker, "str") + if maxresults is not None: + _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int") + if include is not None: + _params["include"] = _SERIALIZER.query("include", include, "[str]", div=",") + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + if start_from is not None: + _params["startFrom"] = _SERIALIZER.query("start_from", start_from, "str") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_container_get_account_info_request(*, timeout: Optional[int] = None, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?restype=account&comp=properties" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_download_request( + *, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + timeout: Optional[int] = None, + range: Optional[str] = None, + lease_id: Optional[str] = None, + range_get_content_md5: Optional[bool] = None, + range_get_content_crc64: Optional[bool] = None, + structured_body_type: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + if_tags: Optional[str] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_modified_since: Optional[datetime.datetime] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/octet-stream") + + # Construct URL + _url = "/" + + # Construct parameters + if snapshot is not None: + _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") + if version_id is not None: + _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if range is not None: + _headers["Range"] = _SERIALIZER.header("range", range, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if range_get_content_md5 is not None: + _headers["x-ms-range-get-content-md5"] = _SERIALIZER.header( + "range_get_content_md5", range_get_content_md5, "bool" + ) + if range_get_content_crc64 is not None: + _headers["x-ms-range-get-content-crc64"] = _SERIALIZER.header( + "range_get_content_crc64", range_get_content_crc64, "bool" + ) + if structured_body_type is not None: + _headers["x-ms-structured-body"] = _SERIALIZER.header("structured_body_type", structured_body_type, "str") + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_get_properties_request( + *, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/" + + # Construct parameters + if snapshot is not None: + _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") + if version_id is not None: + _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="HEAD", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_delete_request( + *, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + delete_snapshots: Optional[Union[str, _models.DeleteSnapshotsOptionType]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_delete_type: Optional[Union[str, _models.BlobDeleteType]] = None, + access_tier_if_modified_since: Optional[datetime.datetime] = None, + access_tier_if_unmodified_since: Optional[datetime.datetime] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/" + + # Construct parameters + if snapshot is not None: + _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") + if version_id is not None: + _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + if blob_delete_type is not None: + _params["deletetype"] = _SERIALIZER.query("blob_delete_type", blob_delete_type, "str") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if delete_snapshots is not None: + _headers["x-ms-delete-snapshots"] = _SERIALIZER.header("delete_snapshots", delete_snapshots, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if access_tier_if_modified_since is not None: + _headers["x-ms-access-tier-if-modified-since"] = _SERIALIZER.header( + "access_tier_if_modified_since", access_tier_if_modified_since, "rfc-1123" + ) + if access_tier_if_unmodified_since is not None: + _headers["x-ms-access-tier-if-unmodified-since"] = _SERIALIZER.header( + "access_tier_if_unmodified_since", access_tier_if_unmodified_since, "rfc-1123" + ) + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_undelete_request(*, timeout: Optional[int] = None, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=undelete" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_set_expiry_request( + *, + expiry_options: Union[str, _models.BlobExpiryOptions], + timeout: Optional[int] = None, + expires_on: Optional[datetime.datetime] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=expiry" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-expiry-option"] = _SERIALIZER.header("expiry_options", expiry_options, "str") + if expires_on is not None: + _headers["x-ms-expiry-time"] = _SERIALIZER.header("expires_on", expires_on, "rfc-1123") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_set_properties_request( + *, + timeout: Optional[int] = None, + blob_cache_control: Optional[str] = None, + blob_content_type: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=properties&SetHTTPHeaders" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if blob_cache_control is not None: + _headers["x-ms-blob-cache-control"] = _SERIALIZER.header("blob_cache_control", blob_cache_control, "str") + if blob_content_type is not None: + _headers["x-ms-blob-content-type"] = _SERIALIZER.header("blob_content_type", blob_content_type, "str") + if blob_content_md5 is not None: + _headers["x-ms-blob-content-md5"] = _SERIALIZER.header("blob_content_md5", blob_content_md5, "bytearray") + if blob_content_encoding is not None: + _headers["x-ms-blob-content-encoding"] = _SERIALIZER.header( + "blob_content_encoding", blob_content_encoding, "str" + ) + if blob_content_language is not None: + _headers["x-ms-blob-content-language"] = _SERIALIZER.header( + "blob_content_language", blob_content_language, "str" + ) + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if blob_content_disposition is not None: + _headers["x-ms-blob-content-disposition"] = _SERIALIZER.header( + "blob_content_disposition", blob_content_disposition, "str" + ) + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_set_immutability_policy_request( # pylint: disable=name-too-long + *, + expiry: datetime.datetime, + timeout: Optional[int] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=immutabilityPolicies" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + if snapshot is not None: + _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") + if version_id is not None: + _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header("expiry", expiry, "rfc-1123") + if immutability_policy_mode is not None: + _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( + "immutability_policy_mode", immutability_policy_mode, "str" + ) + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_delete_immutability_policy_request( # pylint: disable=name-too-long + *, timeout: Optional[int] = None, snapshot: Optional[str] = None, version_id: Optional[str] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=immutabilityPolicies" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + if snapshot is not None: + _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") + if version_id is not None: + _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_set_legal_hold_request( + *, + legal_hold: bool, + timeout: Optional[int] = None, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=legalhold" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + if snapshot is not None: + _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") + if version_id is not None: + _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_set_metadata_request( + *, + metadata: str, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=metadata" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_acquire_lease_request( + *, + duration: int, + timeout: Optional[int] = None, + proposed_lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + action: Literal["acquire"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "acquire")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=lease&acquire" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-lease-duration"] = _SERIALIZER.header("duration", duration, "int") + if proposed_lease_id is not None: + _headers["x-ms-proposed-lease-id"] = _SERIALIZER.header("proposed_lease_id", proposed_lease_id, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_release_lease_request( + *, + lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + action: Literal["release"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "release")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=lease&release" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_renew_lease_request( + *, + lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + action: Literal["renew"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "renew")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=lease&renew" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_change_lease_request( + *, + lease_id: str, + proposed_lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + action: Literal["change"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "change")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=lease&change" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + _headers["x-ms-proposed-lease-id"] = _SERIALIZER.header("proposed_lease_id", proposed_lease_id, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_break_lease_request( + *, + timeout: Optional[int] = None, + break_period: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + action: Literal["break"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "break")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=lease&break" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if break_period is not None: + _headers["x-ms-lease-break-period"] = _SERIALIZER.header("break_period", break_period, "int") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_create_snapshot_request( + *, + timeout: Optional[int] = None, + metadata: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + lease_id: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=snapshot" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if metadata is not None: + _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "str") + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_start_copy_from_url_request( # pylint: disable=too-many-locals + *, + copy_source: str, + timeout: Optional[int] = None, + metadata: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + rehydrate_priority: Optional[Union[str, _models.RehydratePriority]] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + source_if_tags: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + lease_id: Optional[str] = None, + blob_tags_string: Optional[str] = None, + seal_blob: Optional[bool] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + requires_sync: Literal[True] = kwargs.pop("requires_sync", _headers.pop("x-ms-requires-sync", True)) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if metadata is not None: + _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "str") + if tier is not None: + _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") + if rehydrate_priority is not None: + _headers["x-ms-rehydrate-priority"] = _SERIALIZER.header("rehydrate_priority", rehydrate_priority, "str") + if source_if_modified_since is not None: + _headers["x-ms-source-if-modified-since"] = _SERIALIZER.header( + "source_if_modified_since", source_if_modified_since, "rfc-1123" + ) + if source_if_unmodified_since is not None: + _headers["x-ms-source-if-unmodified-since"] = _SERIALIZER.header( + "source_if_unmodified_since", source_if_unmodified_since, "rfc-1123" + ) + if source_if_match is not None: + _headers["x-ms-source-if-match"] = _SERIALIZER.header("source_if_match", source_if_match, "str") + if source_if_none_match is not None: + _headers["x-ms-source-if-none-match"] = _SERIALIZER.header("source_if_none_match", source_if_none_match, "str") + if source_if_tags is not None: + _headers["x-ms-source-if-tags"] = _SERIALIZER.header("source_if_tags", source_if_tags, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["x-ms-copy-source"] = _SERIALIZER.header("copy_source", copy_source, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if blob_tags_string is not None: + _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") + if seal_blob is not None: + _headers["x-ms-seal-blob"] = _SERIALIZER.header("seal_blob", seal_blob, "bool") + if immutability_policy_expiry is not None: + _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header( + "immutability_policy_expiry", immutability_policy_expiry, "rfc-1123" + ) + if immutability_policy_mode is not None: + _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( + "immutability_policy_mode", immutability_policy_mode, "str" + ) + if legal_hold is not None: + _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") + _headers["x-ms-requires-sync"] = _SERIALIZER.header("requires_sync", requires_sync, "bool") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_copy_from_url_request( # pylint: disable=too-many-locals + *, + copy_source: str, + timeout: Optional[int] = None, + metadata: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + lease_id: Optional[str] = None, + source_content_md5: Optional[bytes] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + copy_source_authorization: Optional[str] = None, + encryption_scope: Optional[str] = None, + copy_source_tags: Optional[Union[str, _models.BlobCopySourceTags]] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + requires_sync: Literal["true"] = kwargs.pop("requires_sync", _headers.pop("x-ms-requires-sync", "true")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=copy&sync" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if metadata is not None: + _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "str") + if tier is not None: + _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") + if source_if_modified_since is not None: + _headers["x-ms-source-if-modified-since"] = _SERIALIZER.header( + "source_if_modified_since", source_if_modified_since, "rfc-1123" + ) + if source_if_unmodified_since is not None: + _headers["x-ms-source-if-unmodified-since"] = _SERIALIZER.header( + "source_if_unmodified_since", source_if_unmodified_since, "rfc-1123" + ) + if source_if_match is not None: + _headers["x-ms-source-if-match"] = _SERIALIZER.header("source_if_match", source_if_match, "str") + if source_if_none_match is not None: + _headers["x-ms-source-if-none-match"] = _SERIALIZER.header("source_if_none_match", source_if_none_match, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["x-ms-copy-source"] = _SERIALIZER.header("copy_source", copy_source, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if source_content_md5 is not None: + _headers["x-ms-source-content-md5"] = _SERIALIZER.header("source_content_md5", source_content_md5, "bytearray") + if blob_tags_string is not None: + _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") + if immutability_policy_expiry is not None: + _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header( + "immutability_policy_expiry", immutability_policy_expiry, "rfc-1123" + ) + if immutability_policy_mode is not None: + _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( + "immutability_policy_mode", immutability_policy_mode, "str" + ) + if legal_hold is not None: + _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") + if copy_source_authorization is not None: + _headers["x-ms-copy-source-authorization"] = _SERIALIZER.header( + "copy_source_authorization", copy_source_authorization, "str" + ) + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if copy_source_tags is not None: + _headers["x-ms-copy-source-tag-option"] = _SERIALIZER.header("copy_source_tags", copy_source_tags, "str") + if file_request_intent is not None: + _headers["x-ms-file-request-intent"] = _SERIALIZER.header("file_request_intent", file_request_intent, "str") + _headers["x-ms-requires-sync"] = _SERIALIZER.header("requires_sync", requires_sync, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_abort_copy_from_url_request( + *, copy_id: str, timeout: Optional[int] = None, lease_id: Optional[str] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + copy_action_abort_constant: Literal["abort"] = kwargs.pop( + "copy_action_abort_constant", _headers.pop("x-ms-copy-action", "abort") + ) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=copy©id" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + _params["copyid"] = _SERIALIZER.query("copy_id", copy_id, "str") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + _headers["x-ms-copy-action"] = _SERIALIZER.header("copy_action_abort_constant", copy_action_abort_constant, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_set_tier_request( + *, + tier: Union[str, _models.AccessTier], + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + timeout: Optional[int] = None, + rehydrate_priority: Optional[Union[str, _models.RehydratePriority]] = None, + lease_id: Optional[str] = None, + if_tags: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=tier" + + # Construct parameters + if snapshot is not None: + _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") + if version_id is not None: + _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") + if rehydrate_priority is not None: + _headers["x-ms-rehydrate-priority"] = _SERIALIZER.header("rehydrate_priority", rehydrate_priority, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_get_account_info_request(*, timeout: Optional[int] = None, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?restype=account&comp=properties&blob" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_get_tags_request( + *, + timeout: Optional[int] = None, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + lease_id: Optional[str] = None, + if_tags: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/xml") + + # Construct URL + _url = "/?comp=tags" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + if snapshot is not None: + _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") + if version_id is not None: + _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if if_modified_since is not None: + _headers["x-ms-blob-if-modified-since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["x-ms-blob-if-unmodified-since"] = _SERIALIZER.header( + "if_unmodified_since", if_unmodified_since, "rfc-1123" + ) + if if_match is not None: + _headers["x-ms-blob-if-match"] = _SERIALIZER.header("if_match", if_match, "str") + if if_none_match is not None: + _headers["x-ms-blob-if-none-match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_blob_set_tags_request( + *, + timeout: Optional[int] = None, + version_id: Optional[str] = None, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + if_tags: Optional[str] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=tags" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + if version_id is not None: + _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if transactional_content_md5 is not None: + _headers["Content-MD5"] = _SERIALIZER.header( + "transactional_content_md5", transactional_content_md5, "bytearray" + ) + if transactional_content_crc64 is not None: + _headers["x-ms-content-crc64"] = _SERIALIZER.header( + "transactional_content_crc64", transactional_content_crc64, "bytearray" + ) + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_modified_since is not None: + _headers["x-ms-blob-if-modified-since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["x-ms-blob-if-unmodified-since"] = _SERIALIZER.header( + "if_unmodified_since", if_unmodified_since, "rfc-1123" + ) + if if_match is not None: + _headers["x-ms-blob-if-match"] = _SERIALIZER.header("if_match", if_match, "str") + if if_none_match is not None: + _headers["x-ms-blob-if-none-match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_page_blob_create_request( # pylint: disable=too-many-locals + *, + size: int, + metadata: Optional[str] = None, + timeout: Optional[int] = None, + tier: Optional[Union[str, _models.PremiumPageBlobAccessTier]] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_cache_control: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_sequence_number: Optional[int] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_length: Literal[0] = kwargs.pop("content_length", _headers.pop("Content-Length", 0)) + blob_type: Literal["PageBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "PageBlob")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if metadata is not None: + _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "str") + if tier is not None: + _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") + if blob_content_type is not None: + _headers["x-ms-blob-content-type"] = _SERIALIZER.header("blob_content_type", blob_content_type, "str") + if blob_content_encoding is not None: + _headers["x-ms-blob-content-encoding"] = _SERIALIZER.header( + "blob_content_encoding", blob_content_encoding, "str" + ) + if blob_content_language is not None: + _headers["x-ms-blob-content-language"] = _SERIALIZER.header( + "blob_content_language", blob_content_language, "str" + ) + if blob_content_md5 is not None: + _headers["x-ms-blob-content-md5"] = _SERIALIZER.header("blob_content_md5", blob_content_md5, "bytearray") + if blob_cache_control is not None: + _headers["x-ms-blob-cache-control"] = _SERIALIZER.header("blob_cache_control", blob_cache_control, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if blob_content_disposition is not None: + _headers["x-ms-blob-content-disposition"] = _SERIALIZER.header( + "blob_content_disposition", blob_content_disposition, "str" + ) + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["x-ms-blob-content-length"] = _SERIALIZER.header("size", size, "int") + if blob_sequence_number is not None: + _headers["x-ms-blob-sequence-number"] = _SERIALIZER.header("blob_sequence_number", blob_sequence_number, "int") + if blob_tags_string is not None: + _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") + if immutability_policy_expiry is not None: + _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header( + "immutability_policy_expiry", immutability_policy_expiry, "rfc-1123" + ) + if immutability_policy_mode is not None: + _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( + "immutability_policy_mode", immutability_policy_mode, "str" + ) + if legal_hold is not None: + _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") + _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") + _headers["x-ms-blob-type"] = _SERIALIZER.header("blob_type", blob_type, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_page_blob_upload_pages_request( # pylint: disable=too-many-locals + *, + content_length: int, + range: str, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_sequence_number_less_than_or_equal_to: Optional[int] = None, + if_sequence_number_less_than: Optional[int] = None, + if_sequence_number_equal_to: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + structured_body_type: Optional[str] = None, + structured_content_length: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + page_write: Literal["update"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "update")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=page&update" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") + if transactional_content_md5 is not None: + _headers["Content-MD5"] = _SERIALIZER.header( + "transactional_content_md5", transactional_content_md5, "bytearray" + ) + if transactional_content_crc64 is not None: + _headers["x-ms-content-crc64"] = _SERIALIZER.header( + "transactional_content_crc64", transactional_content_crc64, "bytearray" + ) + _headers["Range"] = _SERIALIZER.header("range", range, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if if_sequence_number_less_than_or_equal_to is not None: + _headers["x-ms-if-sequence-number-le"] = _SERIALIZER.header( + "if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, "int" + ) + if if_sequence_number_less_than is not None: + _headers["x-ms-if-sequence-number-lt"] = _SERIALIZER.header( + "if_sequence_number_less_than", if_sequence_number_less_than, "int" + ) + if if_sequence_number_equal_to is not None: + _headers["x-ms-if-sequence-number-eq"] = _SERIALIZER.header( + "if_sequence_number_equal_to", if_sequence_number_equal_to, "int" + ) + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if structured_body_type is not None: + _headers["x-ms-structured-body"] = _SERIALIZER.header("structured_body_type", structured_body_type, "str") + if structured_content_length is not None: + _headers["x-ms-structured-content-length"] = _SERIALIZER.header( + "structured_content_length", structured_content_length, "int" + ) + _headers["x-ms-page-write"] = _SERIALIZER.header("page_write", page_write, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_page_blob_clear_pages_request( + *, + range: str, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_sequence_number_less_than_or_equal_to: Optional[int] = None, + if_sequence_number_less_than: Optional[int] = None, + if_sequence_number_equal_to: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_length: Literal[0] = kwargs.pop("content_length", _headers.pop("Content-Length", 0)) + page_write: Literal["clear"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "clear")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=page&clear" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") + _headers["Range"] = _SERIALIZER.header("range", range, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if if_sequence_number_less_than_or_equal_to is not None: + _headers["x-ms-if-sequence-number-le"] = _SERIALIZER.header( + "if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, "int" + ) + if if_sequence_number_less_than is not None: + _headers["x-ms-if-sequence-number-lt"] = _SERIALIZER.header( + "if_sequence_number_less_than", if_sequence_number_less_than, "int" + ) + if if_sequence_number_equal_to is not None: + _headers["x-ms-if-sequence-number-eq"] = _SERIALIZER.header( + "if_sequence_number_equal_to", if_sequence_number_equal_to, "int" + ) + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["x-ms-page-write"] = _SERIALIZER.header("page_write", page_write, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_page_blob_upload_pages_from_url_request( # pylint: disable=name-too-long,too-many-locals + *, + source_url: str, + source_range: str, + content_length: int, + range: str, + source_content_md5: Optional[bytes] = None, + source_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + lease_id: Optional[str] = None, + if_sequence_number_less_than_or_equal_to: Optional[int] = None, + if_sequence_number_less_than: Optional[int] = None, + if_sequence_number_equal_to: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + copy_source_authorization: Optional[str] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + source_encryption_key: Optional[str] = None, + source_encryption_key_sha256: Optional[str] = None, + source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + page_write: Literal["update"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "update")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=page&update&fromUrl" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-copy-source"] = _SERIALIZER.header("source_url", source_url, "str") + _headers["x-ms-source-range"] = _SERIALIZER.header("source_range", source_range, "str") + if source_content_md5 is not None: + _headers["x-ms-source-content-md5"] = _SERIALIZER.header("source_content_md5", source_content_md5, "bytearray") + if source_content_crc64 is not None: + _headers["x-ms-source-content-crc64"] = _SERIALIZER.header( + "source_content_crc64", source_content_crc64, "bytearray" + ) + _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") + _headers["x-ms-range"] = _SERIALIZER.header("range", range, "str") + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_sequence_number_less_than_or_equal_to is not None: + _headers["x-ms-if-sequence-number-le"] = _SERIALIZER.header( + "if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, "int" + ) + if if_sequence_number_less_than is not None: + _headers["x-ms-if-sequence-number-lt"] = _SERIALIZER.header( + "if_sequence_number_less_than", if_sequence_number_less_than, "int" + ) + if if_sequence_number_equal_to is not None: + _headers["x-ms-if-sequence-number-eq"] = _SERIALIZER.header( + "if_sequence_number_equal_to", if_sequence_number_equal_to, "int" + ) + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if source_if_modified_since is not None: + _headers["x-ms-source-if-modified-since"] = _SERIALIZER.header( + "source_if_modified_since", source_if_modified_since, "rfc-1123" + ) + if source_if_unmodified_since is not None: + _headers["x-ms-source-if-unmodified-since"] = _SERIALIZER.header( + "source_if_unmodified_since", source_if_unmodified_since, "rfc-1123" + ) + if source_if_match is not None: + _headers["x-ms-source-if-match"] = _SERIALIZER.header("source_if_match", source_if_match, "str") + if source_if_none_match is not None: + _headers["x-ms-source-if-none-match"] = _SERIALIZER.header("source_if_none_match", source_if_none_match, "str") + if copy_source_authorization is not None: + _headers["x-ms-copy-source-authorization"] = _SERIALIZER.header( + "copy_source_authorization", copy_source_authorization, "str" + ) + if file_request_intent is not None: + _headers["x-ms-file-request-intent"] = _SERIALIZER.header("file_request_intent", file_request_intent, "str") + _headers["x-ms-page-write"] = _SERIALIZER.header("page_write", page_write, "str") + if source_encryption_key is not None: + _headers["x-ms-source-encryption-key"] = _SERIALIZER.header( + "source_encryption_key", source_encryption_key, "str" + ) + if source_encryption_key_sha256 is not None: + _headers["x-ms-source-encryption-key-sha256"] = _SERIALIZER.header( + "source_encryption_key_sha256", source_encryption_key_sha256, "str" + ) + if source_encryption_algorithm is not None: + _headers["x-ms-source-encryption-algorithm"] = _SERIALIZER.header( + "source_encryption_algorithm", source_encryption_algorithm, "str" + ) + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_page_blob_get_page_ranges_request( + *, + snapshot: Optional[str] = None, + timeout: Optional[int] = None, + range: Optional[str] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/xml") + + # Construct URL + _url = "/?comp=pagelist" + + # Construct parameters + if snapshot is not None: + _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + if marker is not None: + _params["marker"] = _SERIALIZER.query("marker", marker, "str") + if maxresults is not None: + _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if range is not None: + _headers["Range"] = _SERIALIZER.header("range", range, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_page_blob_get_page_ranges_diff_request( # pylint: disable=name-too-long + *, + snapshot: Optional[str] = None, + timeout: Optional[int] = None, + prevsnapshot: Optional[str] = None, + prev_snapshot_url: Optional[str] = None, + range: Optional[str] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/xml") + + # Construct URL + _url = "/?comp=pagelist&diff" + + # Construct parameters + if snapshot is not None: + _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + if prevsnapshot is not None: + _params["prevsnapshot"] = _SERIALIZER.query("prevsnapshot", prevsnapshot, "str") + if marker is not None: + _params["marker"] = _SERIALIZER.query("marker", marker, "str") + if maxresults is not None: + _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if prev_snapshot_url is not None: + _headers["x-ms-previous-snapshot-url"] = _SERIALIZER.header("prev_snapshot_url", prev_snapshot_url, "str") + if range is not None: + _headers["Range"] = _SERIALIZER.header("range", range, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_page_blob_resize_request( + *, + size: int, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=properties&Resize" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["x-ms-blob-content-length"] = _SERIALIZER.header("size", size, "int") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_page_blob_set_sequence_number_request( # pylint: disable=name-too-long + *, + sequence_number_action: Union[str, _models.SequenceNumberActionType], + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_sequence_number: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=properties&UpdateSequenceNumber" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["x-ms-sequence-number-action"] = _SERIALIZER.header( + "sequence_number_action", sequence_number_action, "str" + ) + if blob_sequence_number is not None: + _headers["x-ms-blob-sequence-number"] = _SERIALIZER.header("blob_sequence_number", blob_sequence_number, "int") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_page_blob_copy_incremental_request( + *, + copy_source: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=incrementalcopy" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["x-ms-copy-source"] = _SERIALIZER.header("copy_source", copy_source, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_append_blob_create_request( # pylint: disable=too-many-locals + *, + metadata: Optional[str] = None, + timeout: Optional[int] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_cache_control: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_length: Literal[0] = kwargs.pop("content_length", _headers.pop("Content-Length", 0)) + blob_type: Literal["AppendBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "AppendBlob")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if metadata is not None: + _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "str") + if blob_content_type is not None: + _headers["x-ms-blob-content-type"] = _SERIALIZER.header("blob_content_type", blob_content_type, "str") + if blob_content_encoding is not None: + _headers["x-ms-blob-content-encoding"] = _SERIALIZER.header( + "blob_content_encoding", blob_content_encoding, "str" + ) + if blob_content_language is not None: + _headers["x-ms-blob-content-language"] = _SERIALIZER.header( + "blob_content_language", blob_content_language, "str" + ) + if blob_content_md5 is not None: + _headers["x-ms-blob-content-md5"] = _SERIALIZER.header("blob_content_md5", blob_content_md5, "bytearray") + if blob_cache_control is not None: + _headers["x-ms-blob-cache-control"] = _SERIALIZER.header("blob_cache_control", blob_cache_control, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if blob_content_disposition is not None: + _headers["x-ms-blob-content-disposition"] = _SERIALIZER.header( + "blob_content_disposition", blob_content_disposition, "str" + ) + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if blob_tags_string is not None: + _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") + if immutability_policy_expiry is not None: + _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header( + "immutability_policy_expiry", immutability_policy_expiry, "rfc-1123" + ) + if immutability_policy_mode is not None: + _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( + "immutability_policy_mode", immutability_policy_mode, "str" + ) + if legal_hold is not None: + _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") + _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") + _headers["x-ms-blob-type"] = _SERIALIZER.header("blob_type", blob_type, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_append_blob_append_block_request( # pylint: disable=too-many-locals + *, + content_length: int, + timeout: Optional[int] = None, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + lease_id: Optional[str] = None, + max_size: Optional[int] = None, + append_position: Optional[int] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + structured_body_type: Optional[str] = None, + structured_content_length: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=appendblock" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") + if transactional_content_md5 is not None: + _headers["Content-MD5"] = _SERIALIZER.header( + "transactional_content_md5", transactional_content_md5, "bytearray" + ) + if transactional_content_crc64 is not None: + _headers["x-ms-content-crc64"] = _SERIALIZER.header( + "transactional_content_crc64", transactional_content_crc64, "bytearray" + ) + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if max_size is not None: + _headers["x-ms-blob-condition-maxsize"] = _SERIALIZER.header("max_size", max_size, "int") + if append_position is not None: + _headers["x-ms-blob-condition-appendpos"] = _SERIALIZER.header("append_position", append_position, "int") + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if structured_body_type is not None: + _headers["x-ms-structured-body"] = _SERIALIZER.header("structured_body_type", structured_body_type, "str") + if structured_content_length is not None: + _headers["x-ms-structured-content-length"] = _SERIALIZER.header( + "structured_content_length", structured_content_length, "int" + ) + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_append_blob_append_block_from_url_request( # pylint: disable=name-too-long,too-many-locals,too-many-statements,too-many-branches + *, + source_url: str, + content_length: int, + source_range: Optional[str] = None, + source_content_md5: Optional[bytes] = None, + source_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + transactional_content_md5: Optional[bytes] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + lease_id: Optional[str] = None, + max_size: Optional[int] = None, + append_position: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + copy_source_authorization: Optional[str] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + source_encryption_key: Optional[str] = None, + source_encryption_key_sha256: Optional[str] = None, + source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=appendblock&fromUrl" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["x-ms-copy-source"] = _SERIALIZER.header("source_url", source_url, "str") + if source_range is not None: + _headers["x-ms-source-range"] = _SERIALIZER.header("source_range", source_range, "str") + if source_content_md5 is not None: + _headers["x-ms-source-content-md5"] = _SERIALIZER.header("source_content_md5", source_content_md5, "bytearray") + if source_content_crc64 is not None: + _headers["x-ms-source-content-crc64"] = _SERIALIZER.header( + "source_content_crc64", source_content_crc64, "bytearray" + ) + _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") + if transactional_content_md5 is not None: + _headers["Content-MD5"] = _SERIALIZER.header( + "transactional_content_md5", transactional_content_md5, "bytearray" + ) + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if max_size is not None: + _headers["x-ms-blob-condition-maxsize"] = _SERIALIZER.header("max_size", max_size, "int") + if append_position is not None: + _headers["x-ms-blob-condition-appendpos"] = _SERIALIZER.header("append_position", append_position, "int") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if source_if_modified_since is not None: + _headers["x-ms-source-if-modified-since"] = _SERIALIZER.header( + "source_if_modified_since", source_if_modified_since, "rfc-1123" + ) + if source_if_unmodified_since is not None: + _headers["x-ms-source-if-unmodified-since"] = _SERIALIZER.header( + "source_if_unmodified_since", source_if_unmodified_since, "rfc-1123" + ) + if source_if_match is not None: + _headers["x-ms-source-if-match"] = _SERIALIZER.header("source_if_match", source_if_match, "str") + if source_if_none_match is not None: + _headers["x-ms-source-if-none-match"] = _SERIALIZER.header("source_if_none_match", source_if_none_match, "str") + if copy_source_authorization is not None: + _headers["x-ms-copy-source-authorization"] = _SERIALIZER.header( + "copy_source_authorization", copy_source_authorization, "str" + ) + if file_request_intent is not None: + _headers["x-ms-file-request-intent"] = _SERIALIZER.header("file_request_intent", file_request_intent, "str") + if source_encryption_key is not None: + _headers["x-ms-source-encryption-key"] = _SERIALIZER.header( + "source_encryption_key", source_encryption_key, "str" + ) + if source_encryption_key_sha256 is not None: + _headers["x-ms-source-encryption-key-sha256"] = _SERIALIZER.header( + "source_encryption_key_sha256", source_encryption_key_sha256, "str" + ) + if source_encryption_algorithm is not None: + _headers["x-ms-source-encryption-algorithm"] = _SERIALIZER.header( + "source_encryption_algorithm", source_encryption_algorithm, "str" + ) + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_append_blob_seal_request( + *, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + append_position: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=seal" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if append_position is not None: + _headers["x-ms-blob-condition-appendpos"] = _SERIALIZER.header("append_position", append_position, "int") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_block_blob_upload_request( # pylint: disable=too-many-locals,too-many-statements,too-many-branches + *, + content_length: int, + metadata: Optional[str] = None, + timeout: Optional[int] = None, + transactional_content_md5: Optional[bytes] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_cache_control: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + transactional_content_crc64: Optional[bytes] = None, + structured_body_type: Optional[str] = None, + structured_content_length: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + blob_type: Literal["BlockBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "BlockBlob")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if metadata is not None: + _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "str") + if transactional_content_md5 is not None: + _headers["Content-MD5"] = _SERIALIZER.header( + "transactional_content_md5", transactional_content_md5, "bytearray" + ) + _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") + if blob_content_type is not None: + _headers["x-ms-blob-content-type"] = _SERIALIZER.header("blob_content_type", blob_content_type, "str") + if blob_content_encoding is not None: + _headers["x-ms-blob-content-encoding"] = _SERIALIZER.header( + "blob_content_encoding", blob_content_encoding, "str" + ) + if blob_content_language is not None: + _headers["x-ms-blob-content-language"] = _SERIALIZER.header( + "blob_content_language", blob_content_language, "str" + ) + if blob_content_md5 is not None: + _headers["x-ms-blob-content-md5"] = _SERIALIZER.header("blob_content_md5", blob_content_md5, "bytearray") + if blob_cache_control is not None: + _headers["x-ms-blob-cache-control"] = _SERIALIZER.header("blob_cache_control", blob_cache_control, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if blob_content_disposition is not None: + _headers["x-ms-blob-content-disposition"] = _SERIALIZER.header( + "blob_content_disposition", blob_content_disposition, "str" + ) + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if tier is not None: + _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if blob_tags_string is not None: + _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") + if immutability_policy_expiry is not None: + _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header( + "immutability_policy_expiry", immutability_policy_expiry, "rfc-1123" + ) + if immutability_policy_mode is not None: + _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( + "immutability_policy_mode", immutability_policy_mode, "str" + ) + if legal_hold is not None: + _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") + if transactional_content_crc64 is not None: + _headers["x-ms-content-crc64"] = _SERIALIZER.header( + "transactional_content_crc64", transactional_content_crc64, "bytearray" + ) + if structured_body_type is not None: + _headers["x-ms-structured-body"] = _SERIALIZER.header("structured_body_type", structured_body_type, "str") + if structured_content_length is not None: + _headers["x-ms-structured-content-length"] = _SERIALIZER.header( + "structured_content_length", structured_content_length, "int" + ) + _headers["x-ms-blob-type"] = _SERIALIZER.header("blob_type", blob_type, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_block_blob_upload_blob_from_url_request( # pylint: disable=name-too-long,too-many-locals,too-many-statements,too-many-branches + *, + copy_source: str, + metadata: Optional[str] = None, + timeout: Optional[int] = None, + transactional_content_md5: Optional[bytes] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_cache_control: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + source_if_tags: Optional[str] = None, + source_content_md5: Optional[bytes] = None, + blob_tags_string: Optional[str] = None, + copy_source_blob_properties: Optional[bool] = None, + copy_source_authorization: Optional[str] = None, + copy_source_tags: Optional[Union[str, _models.BlobCopySourceTags]] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + source_encryption_key: Optional[str] = None, + source_encryption_key_sha256: Optional[str] = None, + source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_length: Literal[0] = kwargs.pop("content_length", _headers.pop("Content-Length", 0)) + blob_type: Literal["BlockBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "BlockBlob")) + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?BlockBlob&fromUrl" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if metadata is not None: + _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "str") + if transactional_content_md5 is not None: + _headers["Content-MD5"] = _SERIALIZER.header( + "transactional_content_md5", transactional_content_md5, "bytearray" + ) + if blob_content_type is not None: + _headers["x-ms-blob-content-type"] = _SERIALIZER.header("blob_content_type", blob_content_type, "str") + if blob_content_encoding is not None: + _headers["x-ms-blob-content-encoding"] = _SERIALIZER.header( + "blob_content_encoding", blob_content_encoding, "str" + ) + if blob_content_language is not None: + _headers["x-ms-blob-content-language"] = _SERIALIZER.header( + "blob_content_language", blob_content_language, "str" + ) + if blob_content_md5 is not None: + _headers["x-ms-blob-content-md5"] = _SERIALIZER.header("blob_content_md5", blob_content_md5, "bytearray") + if blob_cache_control is not None: + _headers["x-ms-blob-cache-control"] = _SERIALIZER.header("blob_cache_control", blob_cache_control, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if blob_content_disposition is not None: + _headers["x-ms-blob-content-disposition"] = _SERIALIZER.header( + "blob_content_disposition", blob_content_disposition, "str" + ) + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if tier is not None: + _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if source_if_modified_since is not None: + _headers["x-ms-source-if-modified-since"] = _SERIALIZER.header( + "source_if_modified_since", source_if_modified_since, "rfc-1123" + ) + if source_if_unmodified_since is not None: + _headers["x-ms-source-if-unmodified-since"] = _SERIALIZER.header( + "source_if_unmodified_since", source_if_unmodified_since, "rfc-1123" + ) + if source_if_match is not None: + _headers["x-ms-source-if-match"] = _SERIALIZER.header("source_if_match", source_if_match, "str") + if source_if_none_match is not None: + _headers["x-ms-source-if-none-match"] = _SERIALIZER.header("source_if_none_match", source_if_none_match, "str") + if source_if_tags is not None: + _headers["x-ms-source-if-tags"] = _SERIALIZER.header("source_if_tags", source_if_tags, "str") + if source_content_md5 is not None: + _headers["x-ms-source-content-md5"] = _SERIALIZER.header("source_content_md5", source_content_md5, "bytearray") + if blob_tags_string is not None: + _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") + _headers["x-ms-copy-source"] = _SERIALIZER.header("copy_source", copy_source, "str") + _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") + if copy_source_blob_properties is not None: + _headers["x-ms-copy-source-blob-properties"] = _SERIALIZER.header( + "copy_source_blob_properties", copy_source_blob_properties, "bool" + ) + if copy_source_authorization is not None: + _headers["x-ms-copy-source-authorization"] = _SERIALIZER.header( + "copy_source_authorization", copy_source_authorization, "str" + ) + if copy_source_tags is not None: + _headers["x-ms-copy-source-tag-option"] = _SERIALIZER.header("copy_source_tags", copy_source_tags, "str") + _headers["x-ms-blob-type"] = _SERIALIZER.header("blob_type", blob_type, "str") + if file_request_intent is not None: + _headers["x-ms-file-request-intent"] = _SERIALIZER.header("file_request_intent", file_request_intent, "str") + if source_encryption_key is not None: + _headers["x-ms-source-encryption-key"] = _SERIALIZER.header( + "source_encryption_key", source_encryption_key, "str" + ) + if source_encryption_key_sha256 is not None: + _headers["x-ms-source-encryption-key-sha256"] = _SERIALIZER.header( + "source_encryption_key_sha256", source_encryption_key_sha256, "str" + ) + if source_encryption_algorithm is not None: + _headers["x-ms-source-encryption-algorithm"] = _SERIALIZER.header( + "source_encryption_algorithm", source_encryption_algorithm, "str" + ) + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_block_blob_stage_block_request( + *, + block_id: bytes, + content_length: int, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + structured_body_type: Optional[str] = None, + structured_content_length: Optional[int] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=block" + + # Construct parameters + _params["blockid"] = _SERIALIZER.query("block_id", block_id, "bytearray") + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") + if transactional_content_md5 is not None: + _headers["Content-MD5"] = _SERIALIZER.header( + "transactional_content_md5", transactional_content_md5, "bytearray" + ) + if transactional_content_crc64 is not None: + _headers["x-ms-content-crc64"] = _SERIALIZER.header( + "transactional_content_crc64", transactional_content_crc64, "bytearray" + ) + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if structured_body_type is not None: + _headers["x-ms-structured-body"] = _SERIALIZER.header("structured_body_type", structured_body_type, "str") + if structured_content_length is not None: + _headers["x-ms-structured-content-length"] = _SERIALIZER.header( + "structured_content_length", structured_content_length, "int" + ) + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_block_blob_stage_block_from_url_request( # pylint: disable=name-too-long,too-many-locals + *, + block_id: bytes, + content_length: int, + source_url: str, + source_range: Optional[str] = None, + source_content_md5: Optional[bytes] = None, + source_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + lease_id: Optional[str] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + copy_source_authorization: Optional[str] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + source_encryption_key: Optional[str] = None, + source_encryption_key_sha256: Optional[str] = None, + source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=block&fromURL" + + # Construct parameters + _params["blockid"] = _SERIALIZER.query("block_id", block_id, "bytearray") + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") + _headers["x-ms-copy-source"] = _SERIALIZER.header("source_url", source_url, "str") + if source_range is not None: + _headers["x-ms-source-range"] = _SERIALIZER.header("source_range", source_range, "str") + if source_content_md5 is not None: + _headers["x-ms-source-content-md5"] = _SERIALIZER.header("source_content_md5", source_content_md5, "bytearray") + if source_content_crc64 is not None: + _headers["x-ms-source-content-crc64"] = _SERIALIZER.header( + "source_content_crc64", source_content_crc64, "bytearray" + ) + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if source_if_modified_since is not None: + _headers["x-ms-source-if-modified-since"] = _SERIALIZER.header( + "source_if_modified_since", source_if_modified_since, "rfc-1123" + ) + if source_if_unmodified_since is not None: + _headers["x-ms-source-if-unmodified-since"] = _SERIALIZER.header( + "source_if_unmodified_since", source_if_unmodified_since, "rfc-1123" + ) + if source_if_match is not None: + _headers["x-ms-source-if-match"] = _SERIALIZER.header("source_if_match", source_if_match, "str") + if source_if_none_match is not None: + _headers["x-ms-source-if-none-match"] = _SERIALIZER.header("source_if_none_match", source_if_none_match, "str") + if copy_source_authorization is not None: + _headers["x-ms-copy-source-authorization"] = _SERIALIZER.header( + "copy_source_authorization", copy_source_authorization, "str" + ) + if file_request_intent is not None: + _headers["x-ms-file-request-intent"] = _SERIALIZER.header("file_request_intent", file_request_intent, "str") + if source_encryption_key is not None: + _headers["x-ms-source-encryption-key"] = _SERIALIZER.header( + "source_encryption_key", source_encryption_key, "str" + ) + if source_encryption_key_sha256 is not None: + _headers["x-ms-source-encryption-key-sha256"] = _SERIALIZER.header( + "source_encryption_key_sha256", source_encryption_key_sha256, "str" + ) + if source_encryption_algorithm is not None: + _headers["x-ms-source-encryption-algorithm"] = _SERIALIZER.header( + "source_encryption_algorithm", source_encryption_algorithm, "str" + ) + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_block_blob_commit_block_list_request( # pylint: disable=name-too-long,too-many-locals + *, + timeout: Optional[int] = None, + blob_cache_control: Optional[str] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + metadata: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + # Construct URL + _url = "/?comp=blocklist" + + # Construct parameters + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if blob_cache_control is not None: + _headers["x-ms-blob-cache-control"] = _SERIALIZER.header("blob_cache_control", blob_cache_control, "str") + if blob_content_type is not None: + _headers["x-ms-blob-content-type"] = _SERIALIZER.header("blob_content_type", blob_content_type, "str") + if blob_content_encoding is not None: + _headers["x-ms-blob-content-encoding"] = _SERIALIZER.header( + "blob_content_encoding", blob_content_encoding, "str" + ) + if blob_content_language is not None: + _headers["x-ms-blob-content-language"] = _SERIALIZER.header( + "blob_content_language", blob_content_language, "str" + ) + if blob_content_md5 is not None: + _headers["x-ms-blob-content-md5"] = _SERIALIZER.header("blob_content_md5", blob_content_md5, "bytearray") + if transactional_content_md5 is not None: + _headers["Content-MD5"] = _SERIALIZER.header( + "transactional_content_md5", transactional_content_md5, "bytearray" + ) + if transactional_content_crc64 is not None: + _headers["x-ms-content-crc64"] = _SERIALIZER.header( + "transactional_content_crc64", transactional_content_crc64, "bytearray" + ) + if metadata is not None: + _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if blob_content_disposition is not None: + _headers["x-ms-blob-content-disposition"] = _SERIALIZER.header( + "blob_content_disposition", blob_content_disposition, "str" + ) + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if encryption_scope is not None: + _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") + if tier is not None: + _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + if blob_tags_string is not None: + _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") + if immutability_policy_expiry is not None: + _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header( + "immutability_policy_expiry", immutability_policy_expiry, "rfc-1123" + ) + if immutability_policy_mode is not None: + _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( + "immutability_policy_mode", immutability_policy_mode, "str" + ) + if legal_hold is not None: + _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_block_blob_get_block_list_request( + *, + list_type: Union[str, _models.BlockListType], + snapshot: Optional[str] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_tags: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/xml") + + # Construct URL + _url = "/?comp=blocklist" + + # Construct parameters + if snapshot is not None: + _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") + _params["blocklisttype"] = _SERIALIZER.query("list_type", list_type, "str") + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_block_blob_query_request( + *, + snapshot: Optional[str] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + version: str = kwargs.pop("version", _headers.pop("x-ms-version", "2026-04-06")) + accept = _headers.pop("Accept", "application/octet-stream") + + # Construct URL + _url = "/?comp=query" + + # Construct parameters + if snapshot is not None: + _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") + if timeout is not None: + _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int") + + # Construct headers + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") + if lease_id is not None: + _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") + if encryption_key is not None: + _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") + if encryption_key_sha256 is not None: + _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( + "encryption_key_sha256", encryption_key_sha256, "str" + ) + if encryption_algorithm is not None: + _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") + if if_modified_since is not None: + _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") + if if_unmodified_since is not None: + _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") + if if_tags is not None: + _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + if_match = prep_if_match(etag, match_condition) + if if_match is not None: + _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") + if_none_match = prep_if_none_match(etag, match_condition) + if if_none_match is not None: + _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +class _ServiceClientOperationsMixin( + ClientMixinABC[PipelineClient[HttpRequest, HttpResponse], ServiceClientConfiguration] +): + + @distributed_trace + def set_properties( # pylint: disable=inconsistent-return-statements + self, storage_service_properties: _models.BlobServiceProperties, *, timeout: Optional[int] = None, **kwargs: Any + ) -> None: + """Sets properties for a storage account's Blob service endpoint, including properties for Storage + Analytics and CORS (Cross-Origin Resource Sharing) rules. + + :param storage_service_properties: The storage service properties to set. Required. + :type storage_service_properties: ~azure.storage.blobs.models.BlobServiceProperties + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = _get_element(storage_service_properties) + + _request = build_service_set_properties_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def get_properties(self, *, timeout: Optional[int] = None, **kwargs: Any) -> _models.BlobServiceProperties: + """Retrieves properties of a storage account's Blob service, including properties for Storage + Analytics and CORS (Cross-Origin Resource Sharing) rules. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: BlobServiceProperties. The BlobServiceProperties is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.BlobServiceProperties + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.BlobServiceProperties] = kwargs.pop("cls", None) + + _request = build_service_get_properties_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.BlobServiceProperties, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_statistics(self, *, timeout: Optional[int] = None, **kwargs: Any) -> _models.StorageServiceStats: + """Retrieves statistics related to replication for the Blob service. It is only available on the + secondary location endpoint when read-access geo-redundant replication is enabled for the + storage account. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: StorageServiceStats. The StorageServiceStats is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.StorageServiceStats + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.StorageServiceStats] = kwargs.pop("cls", None) + + _request = build_service_get_statistics_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.StorageServiceStats, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def list_containers_segment( + self, + *, + prefix: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + timeout: Optional[int] = None, + include: Optional[list[Union[str, _models.ListContainersIncludeType]]] = None, + **kwargs: Any + ) -> _models.ListContainersSegmentResponse: + """The List Containers Segment operation returns a list of the containers under the specified + account. + + :keyword prefix: Filters the results to return only containers whose name begins with the + specified prefix. Default value is None. + :paramtype prefix: str + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword include: Include this parameter to specify that the container's metadata be returned + as part of the response body. Default value is None. + :paramtype include: list[str or ~azure.storage.blobs.models.ListContainersIncludeType] + :return: ListContainersSegmentResponse. The ListContainersSegmentResponse is compatible with + MutableMapping + :rtype: ~azure.storage.blobs.models.ListContainersSegmentResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.ListContainersSegmentResponse] = kwargs.pop("cls", None) + + _request = build_service_list_containers_segment_request( + prefix=prefix, + marker=marker, + maxresults=maxresults, + timeout=timeout, + include=include, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.ListContainersSegmentResponse, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_user_delegation_key( + self, key_info: _models.KeyInfo, *, timeout: Optional[int] = None, **kwargs: Any + ) -> _models.UserDelegationKey: + """Retrieves a user delegation key for the Blob service. This is only a valid operation when using + bearer token authentication. + + :param key_info: Key information provided in the request. Required. + :type key_info: ~azure.storage.blobs.models.KeyInfo + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: UserDelegationKey. The UserDelegationKey is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.UserDelegationKey + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.UserDelegationKey] = kwargs.pop("cls", None) + + _content = _get_element(key_info) + + _request = build_service_get_user_delegation_key_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.UserDelegationKey, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_account_info( # pylint: disable=inconsistent-return-statements + self, *, timeout: Optional[int] = None, **kwargs: Any + ) -> None: + """Returns the sku name and account kind. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_service_get_account_info_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-sku-name"] = self._deserialize("str", response.headers.get("x-ms-sku-name")) + response_headers["x-ms-account-kind"] = self._deserialize("str", response.headers.get("x-ms-account-kind")) + response_headers["x-ms-is-hns-enabled"] = self._deserialize("bool", response.headers.get("x-ms-is-hns-enabled")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def submit_batch( + self, body: _models.SubmitBatchRequest, *, content_length: int, timeout: Optional[int] = None, **kwargs: Any + ) -> _models.SubmitBatchRequest: + """The Batch operation allows multiple API calls to be embedded into a single HTTP request. + + :param body: The body of the request. Required. + :type body: ~azure.storage.blobs.models.SubmitBatchRequest + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: SubmitBatchRequest. The SubmitBatchRequest is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.SubmitBatchRequest + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + multipart_content_type: str = kwargs.pop( + "multipart_content_type", _headers.pop("Content-Type", "multipart/mixed") + ) + cls: ClsType[_models.SubmitBatchRequest] = kwargs.pop("cls", None) + + _body = body.as_dict() if isinstance(body, _Model) else body + _file_fields: list[str] = ["body"] + _data_fields: list[str] = ["name"] + _files = prepare_multipart_form_data(_body, _file_fields, _data_fields) + + _request = build_service_submit_batch_request( + content_length=content_length, + timeout=timeout, + multipart_content_type=multipart_content_type, + version=self._config.version, + files=_files, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.SubmitBatchRequest, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def find_blobs_by_tags( + self, + *, + filter_expression: str, + timeout: Optional[int] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + include: Optional[list[Union[str, _models.FilterBlobsIncludeItem]]] = None, + **kwargs: Any + ) -> _models.FilterBlobSegment: + """The Filter Blobs operation enables callers to list blobs across all containers whose tags match + a given search expression. + + :keyword filter_expression: Filters the results to return only to return only blobs whose tags + match the specified expression. Required. + :paramtype filter_expression: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword include: Include this parameter to specify one or more datasets to include in the + response. Default value is None. + :paramtype include: list[str or ~azure.storage.blobs.models.FilterBlobsIncludeItem] + :return: FilterBlobSegment. The FilterBlobSegment is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.FilterBlobSegment + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.FilterBlobSegment] = kwargs.pop("cls", None) + + _request = build_service_find_blobs_by_tags_request( + filter_expression=filter_expression, + timeout=timeout, + marker=marker, + maxresults=maxresults, + include=include, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.FilterBlobSegment, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + +class _ContainerClientOperationsMixin( + ClientMixinABC[PipelineClient[HttpRequest, HttpResponse], ContainerClientConfiguration] +): + + @distributed_trace + def create( # pylint: disable=inconsistent-return-statements + self, + *, + timeout: Optional[int] = None, + metadata: Optional[str] = None, + access: Optional[Union[str, _models.PublicAccessType]] = None, + default_encryption_scope: Optional[str] = None, + prevent_encryption_scope_override: Optional[bool] = None, + **kwargs: Any + ) -> None: + """Creates a new container under the specified account. If the container with the same name + already exists, the operation fails. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword access: The public access setting for the container. Known values are: "blob" and + "container". Default value is None. + :paramtype access: str or ~azure.storage.blobs.models.PublicAccessType + :keyword default_encryption_scope: Optional. Version 2019-07-07 and later. Specifies the + default encryption scope to set on the container and use for all future writes. Default value + is None. + :paramtype default_encryption_scope: str + :keyword prevent_encryption_scope_override: If a blob has a lease and the lease is of infinite + duration then the value of this header is set to true, otherwise it is set to false. Default + value is None. + :paramtype prevent_encryption_scope_override: bool + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_create_request( + timeout=timeout, + metadata=metadata, + access=access, + default_encryption_scope=default_encryption_scope, + prevent_encryption_scope_override=prevent_encryption_scope_override, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def get_properties( # pylint: disable=inconsistent-return-statements + self, *, timeout: Optional[int] = None, lease_id: Optional[str] = None, **kwargs: Any + ) -> None: + """returns all user-defined metadata and system properties for the specified container. The data + returned does not include the container's list of blobs. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_get_properties_request( + timeout=timeout, + lease_id=lease_id, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-meta"] = self._deserialize("str", response.headers.get("x-ms-meta")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-lease-duration"] = self._deserialize("str", response.headers.get("x-ms-lease-duration")) + response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) + response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) + response_headers["x-ms-blob-public-access"] = self._deserialize( + "str", response.headers.get("x-ms-blob-public-access") + ) + response_headers["x-ms-has-immutability-policy"] = self._deserialize( + "bool", response.headers.get("x-ms-has-immutability-policy") + ) + response_headers["x-ms-has-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-has-legal-hold")) + response_headers["x-ms-default-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-default-encryption-scope") + ) + response_headers["x-ms-deny-encryption-scope-override"] = self._deserialize( + "bool", response.headers.get("x-ms-deny-encryption-scope-override") + ) + response_headers["x-ms-immutable-storage-with-versioning-enabled"] = self._deserialize( + "bool", response.headers.get("x-ms-immutable-storage-with-versioning-enabled") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def delete( # pylint: disable=inconsistent-return-statements + self, + *, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """operation marks the specified container for deletion. The container and any blobs contained + within it are later deleted during garbage collection. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_delete_request( + timeout=timeout, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def set_metadata( # pylint: disable=inconsistent-return-statements + self, + *, + metadata: str, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """operation sets one or more user-defined name-value pairs for the specified container. + + :keyword metadata: The metadata headers. Required. + :paramtype metadata: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_set_metadata_request( + metadata=metadata, + timeout=timeout, + lease_id=lease_id, + if_modified_since=if_modified_since, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def get_access_policy( + self, *, timeout: Optional[int] = None, lease_id: Optional[str] = None, **kwargs: Any + ) -> _models.SignedIdentifiers: + """gets the permissions for the specified container. The permissions indicate whether container + data may be accessed publicly. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :return: SignedIdentifiers. The SignedIdentifiers is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.SignedIdentifiers + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.SignedIdentifiers] = kwargs.pop("cls", None) + + _request = build_container_get_access_policy_request( + timeout=timeout, + lease_id=lease_id, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-blob-public-access"] = self._deserialize( + "str", response.headers.get("x-ms-blob-public-access") + ) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.SignedIdentifiers, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def set_access_policy( # pylint: disable=inconsistent-return-statements + self, + container_acl: _models.SignedIdentifiers, + *, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + access: Optional[Union[str, _models.PublicAccessType]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """sets the permissions for the specified container. The permissions indicate whether blobs in a + container may be accessed publicly. + + :param container_acl: The access control list for the container. Required. + :type container_acl: ~azure.storage.blobs.models.SignedIdentifiers + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword access: The public access setting for the container. Known values are: "blob" and + "container". Default value is None. + :paramtype access: str or ~azure.storage.blobs.models.PublicAccessType + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = _get_element(container_acl) + + _request = build_container_set_access_policy_request( + timeout=timeout, + lease_id=lease_id, + access=access, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def restore( # pylint: disable=inconsistent-return-statements + self, + *, + deleted_container_name: Optional[str] = None, + deleted_container_version: Optional[str] = None, + timeout: Optional[int] = None, + **kwargs: Any + ) -> None: + """Restores a previously-deleted container. + + :keyword deleted_container_name: Optional. Version 2019-12-12 and later. Specifies the name + of the deleted container to restore. Default value is None. + :paramtype deleted_container_name: str + :keyword deleted_container_version: Optional. Version 2019-12-12 and later. Specifies the + version of the deleted container to restore. Default value is None. + :paramtype deleted_container_version: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_restore_request( + deleted_container_name=deleted_container_name, + deleted_container_version=deleted_container_version, + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def rename( # pylint: disable=inconsistent-return-statements + self, + *, + source_container_name: str, + source_lease_id: Optional[str] = None, + timeout: Optional[int] = None, + **kwargs: Any + ) -> None: + """Renames an existing container. + + :keyword source_container_name: Required. Specifies the name of the container to rename. + Required. + :paramtype source_container_name: str + :keyword source_lease_id: A lease ID for the source path. If specified, the source path must + have an active lease and the lease ID must match. Default value is None. + :paramtype source_lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_rename_request( + source_container_name=source_container_name, + source_lease_id=source_lease_id, + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def submit_batch( + self, body: _models.SubmitBatchRequest, *, content_length: int, timeout: Optional[int] = None, **kwargs: Any + ) -> _models.SubmitBatchRequest: + """The Batch operation allows multiple API calls to be embedded into a single HTTP request. + + :param body: The body of the request. Required. + :type body: ~azure.storage.blobs.models.SubmitBatchRequest + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: SubmitBatchRequest. The SubmitBatchRequest is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.SubmitBatchRequest + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + multipart_content_type: str = kwargs.pop( + "multipart_content_type", _headers.pop("Content-Type", "multipart/mixed") + ) + cls: ClsType[_models.SubmitBatchRequest] = kwargs.pop("cls", None) + + _body = body.as_dict() if isinstance(body, _Model) else body + _file_fields: list[str] = ["body"] + _data_fields: list[str] = ["name"] + _files = prepare_multipart_form_data(_body, _file_fields, _data_fields) + + _request = build_container_submit_batch_request( + content_length=content_length, + timeout=timeout, + multipart_content_type=multipart_content_type, + version=self._config.version, + files=_files, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.SubmitBatchRequest, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def find_blobs_by_tags( + self, + *, + filter_expression: str, + timeout: Optional[int] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + include: Optional[list[Union[str, _models.FilterBlobsIncludeItem]]] = None, + **kwargs: Any + ) -> _models.FilterBlobSegment: + """The Filter Blobs operation enables callers to list blobs in a container whose tags match a + given search expression. Filter blobs searches within the given container. + + :keyword filter_expression: Filters the results to return only to return only blobs whose tags + match the specified expression. Required. + :paramtype filter_expression: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword include: Include this parameter to specify one or more datasets to include in the + response. Default value is None. + :paramtype include: list[str or ~azure.storage.blobs.models.FilterBlobsIncludeItem] + :return: FilterBlobSegment. The FilterBlobSegment is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.FilterBlobSegment + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.FilterBlobSegment] = kwargs.pop("cls", None) + + _request = build_container_find_blobs_by_tags_request( + filter_expression=filter_expression, + timeout=timeout, + marker=marker, + maxresults=maxresults, + include=include, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.FilterBlobSegment, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def acquire_lease( # pylint: disable=inconsistent-return-statements + self, + *, + duration: int, + timeout: Optional[int] = None, + proposed_lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """The Acquire Lease operation requests a new lease on a container. The lease lock duration can be + 15 to 60 seconds, or can be infinite. + + :keyword duration: Specifies the duration of the lease, in seconds, or negative one (-1) for a + lease that never expires. A non-infinite lease can be between 15 and 60 seconds. A lease + duration cannot be changed using renew or change. Required. + :paramtype duration: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword proposed_lease_id: Optional. The proposed lease ID for the container. Default value + is None. + :paramtype proposed_lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + action: Literal["acquire"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "acquire")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_acquire_lease_request( + duration=duration, + timeout=timeout, + proposed_lease_id=proposed_lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def release_lease( # pylint: disable=inconsistent-return-statements + self, + *, + lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """The Release Lease operation frees the lease if it's no longer needed, so that another client + can immediately acquire a lease against the container. + + :keyword lease_id: Required. A lease ID for the source path. If specified, the source path + must have an active lease and the lease ID must match. Required. + :paramtype lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["release"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "release")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_release_lease_request( + lease_id=lease_id, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def renew_lease( # pylint: disable=inconsistent-return-statements + self, + *, + lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """The Renew Lease operation renews an existing lease. + + :keyword lease_id: Required. A lease ID for the source path. If specified, the source path + must have an active lease and the lease ID must match. Required. + :paramtype lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["renew"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "renew")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_renew_lease_request( + lease_id=lease_id, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def break_lease( # pylint: disable=inconsistent-return-statements + self, + *, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + break_period: Optional[int] = None, + **kwargs: Any + ) -> None: + """The Break Lease operation ends a lease and ensures that another client can't acquire a new + lease until the current lease period has expired. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword break_period: For a break operation, proposed duration the lease should continue + before it is broken, in seconds, between 0 and 60. This break period is only used if it is + shorter than the time remaining on the lease. If longer, the time remaining on the lease is + used. A new lease will not be available before the break period has expired, but the lease may + be held for longer than the break period. If this header does not appear with a break + operation, a fixed-duration lease breaks after the remaining lease period elapses, and an + infinite lease breaks immediately. Default value is None. + :paramtype break_period: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["break"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "break")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_break_lease_request( + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + break_period=break_period, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-lease-time"] = self._deserialize("int", response.headers.get("x-ms-lease-time")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def change_lease( # pylint: disable=inconsistent-return-statements + self, + *, + lease_id: str, + proposed_lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """The Change Lease operation is used to change the ID of an existing lease. + + :keyword lease_id: Required. A lease ID for the source path. If specified, the source path + must have an active lease and the lease ID must match. Required. + :paramtype lease_id: str + :keyword proposed_lease_id: Required. The proposed lease ID for the container. Required. + :paramtype proposed_lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["change"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "change")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_change_lease_request( + lease_id=lease_id, + proposed_lease_id=proposed_lease_id, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + @api_version_validation( + params_added_on={"2026-02-06": ["start_from"]}, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + def list_blob_flat_segment( + self, + *, + prefix: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + include: Optional[list[Union[str, _models.ListBlobsIncludeItem]]] = None, + timeout: Optional[int] = None, + start_from: Optional[str] = None, + **kwargs: Any + ) -> _models.ListBlobsFlatSegmentResponse: + """The List Blobs operation returns a list of the blobs under the specified container. + + :keyword prefix: Filters the results to return only containers whose name begins with the + specified prefix. Default value is None. + :paramtype prefix: str + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword include: Include this parameter to specify one or more datasets to include in the + response. Default value is None. + :paramtype include: list[str or ~azure.storage.blobs.models.ListBlobsIncludeItem] + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword start_from: Specifies the relative path to list paths from. For non-recursive list, + only one entity level is supported; For recursive list, multiple entity levels are supported. + (Inclusive). Default value is None. + :paramtype start_from: str + :return: ListBlobsFlatSegmentResponse. The ListBlobsFlatSegmentResponse is compatible with + MutableMapping + :rtype: ~azure.storage.blobs.models.ListBlobsFlatSegmentResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.ListBlobsFlatSegmentResponse] = kwargs.pop("cls", None) + + _request = build_container_list_blob_flat_segment_request( + prefix=prefix, + marker=marker, + maxresults=maxresults, + include=include, + timeout=timeout, + start_from=start_from, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.ListBlobsFlatSegmentResponse, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + @api_version_validation( + params_added_on={"2026-02-06": ["start_from"]}, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + def list_blob_hierarchy_segment( + self, + *, + delimiter: str, + prefix: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + include: Optional[list[Union[str, _models.ListBlobsIncludeItem]]] = None, + timeout: Optional[int] = None, + start_from: Optional[str] = None, + **kwargs: Any + ) -> _models.ListBlobsHierarchySegmentResponse: + """The List Blobs operation returns a list of the blobs under the specified container. A delimiter + can be used to traverse a virtual hierarchy of blobs as though it were a file system. + + :keyword delimiter: When the request includes this parameter, the operation returns a + BlobPrefix element in the response body that acts as a placeholder for all blobs whose names + begin with the same substring up to the appearance of the delimiter character. The delimiter + may be a single character or a string. Required. + :paramtype delimiter: str + :keyword prefix: Filters the results to return only containers whose name begins with the + specified prefix. Default value is None. + :paramtype prefix: str + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword include: Include this parameter to specify one or more datasets to include in the + response. Default value is None. + :paramtype include: list[str or ~azure.storage.blobs.models.ListBlobsIncludeItem] + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword start_from: Specifies the relative path to list paths from. For non-recursive list, + only one entity level is supported; For recursive list, multiple entity levels are supported. + (Inclusive). Default value is None. + :paramtype start_from: str + :return: ListBlobsHierarchySegmentResponse. The ListBlobsHierarchySegmentResponse is compatible + with MutableMapping + :rtype: ~azure.storage.blobs.models.ListBlobsHierarchySegmentResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.ListBlobsHierarchySegmentResponse] = kwargs.pop("cls", None) + + _request = build_container_list_blob_hierarchy_segment_request( + delimiter=delimiter, + prefix=prefix, + marker=marker, + maxresults=maxresults, + include=include, + timeout=timeout, + start_from=start_from, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.ListBlobsHierarchySegmentResponse, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_account_info( # pylint: disable=inconsistent-return-statements + self, *, timeout: Optional[int] = None, **kwargs: Any + ) -> None: + """Returns the sku name and account kind. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_get_account_info_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-sku-name"] = self._deserialize("str", response.headers.get("x-ms-sku-name")) + response_headers["x-ms-account-kind"] = self._deserialize("str", response.headers.get("x-ms-account-kind")) + response_headers["x-ms-is-hns-enabled"] = self._deserialize("bool", response.headers.get("x-ms-is-hns-enabled")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + +class _BlobClientOperationsMixin( # pylint: disable=too-many-public-methods + ClientMixinABC[PipelineClient[HttpRequest, HttpResponse], BlobClientConfiguration] +): + + @distributed_trace + def download( # pylint: disable=too-many-locals + self, + *, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + timeout: Optional[int] = None, + range: Optional[str] = None, + lease_id: Optional[str] = None, + range_get_content_md5: Optional[bool] = None, + range_get_content_crc64: Optional[bool] = None, + structured_body_type: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + if_tags: Optional[str] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_modified_since: Optional[datetime.datetime] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> Iterator[bytes]: + """The Download operation reads or downloads a blob from the system, including its metadata and + properties. You can also call Download to read a snapshot. + + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword range: Return only the bytes of the blob in the specified range. Default value is + None. + :paramtype range: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword range_get_content_md5: When set to true and specified together with the Range, the + service returns the MD5 hash for the range, as long as the range is less than or equal to 4 MB + in size. Default value is None. + :paramtype range_get_content_md5: bool + :keyword range_get_content_crc64: Optional. When this header is set to true and specified + together with the Range header, the service returns the CRC64 hash for the range, as long as + the range is less than or equal to 4 MB in size. Default value is None. + :paramtype range_get_content_crc64: bool + :keyword structured_body_type: Specifies the response content should be returned as a + structured message and specifies the message schema version and properties. Default value is + None. + :paramtype structured_body_type: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword if_unmodified_since: The request should only proceed if the entity was not modified + after this time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_modified_since: The request should only proceed if the entity was modified after + this time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: Iterator[bytes] + :rtype: Iterator[bytes] + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + + _request = build_blob_download_request( + snapshot=snapshot, + version_id=version_id, + timeout=timeout, + range=range, + lease_id=lease_id, + range_get_content_md5=range_get_content_md5, + range_get_content_crc64=range_get_content_crc64, + structured_body_type=structured_body_type, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + if_tags=if_tags, + if_unmodified_since=if_unmodified_since, + if_modified_since=if_modified_since, + etag=etag, + match_condition=match_condition, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", True) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 206]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + if response.status_code == 200: + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["x-ms-meta"] = self._deserialize("str", response.headers.get("x-ms-meta")) + response_headers["x-ms-or"] = self._deserialize("str", response.headers.get("x-ms-or")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-creation-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-creation-time") + ) + response_headers["x-ms-or-policy-id"] = self._deserialize("str", response.headers.get("x-ms-or-policy-id")) + response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) + response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) + response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) + response_headers["Content-Disposition"] = self._deserialize( + "str", response.headers.get("Content-Disposition") + ) + response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) + response_headers["x-ms-copy-completion-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-copy-completion-time") + ) + response_headers["x-ms-copy-status-description"] = self._deserialize( + "str", response.headers.get("x-ms-copy-status-description") + ) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-progress"] = self._deserialize( + "str", response.headers.get("x-ms-copy-progress") + ) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) + response_headers["x-ms-lease-duration"] = self._deserialize( + "str", response.headers.get("x-ms-lease-duration") + ) + response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) + response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-is-current-version"] = self._deserialize( + "bool", response.headers.get("x-ms-is-current-version") + ) + response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-blob-committed-block-count"] = self._deserialize( + "int", response.headers.get("x-ms-blob-committed-block-count") + ) + response_headers["x-ms-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-blob-content-md5"] = self._deserialize( + "bytearray", response.headers.get("x-ms-blob-content-md5") + ) + response_headers["x-ms-tag-count"] = self._deserialize("int", response.headers.get("x-ms-tag-count")) + response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) + response_headers["x-ms-last-access-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-last-access-time") + ) + response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") + ) + response_headers["x-ms-immutability-policy-mode"] = self._deserialize( + "str", response.headers.get("x-ms-immutability-policy-mode") + ) + response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) + response_headers["x-ms-structured-body"] = self._deserialize( + "str", response.headers.get("x-ms-structured-body") + ) + response_headers["x-ms-structured-content-length"] = self._deserialize( + "int", response.headers.get("x-ms-structured-content-length") + ) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if response.status_code == 206: + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["x-ms-meta"] = self._deserialize("str", response.headers.get("x-ms-meta")) + response_headers["x-ms-or"] = self._deserialize("str", response.headers.get("x-ms-or")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-creation-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-creation-time") + ) + response_headers["x-ms-or-policy-id"] = self._deserialize("str", response.headers.get("x-ms-or-policy-id")) + response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) + response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) + response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) + response_headers["Content-Disposition"] = self._deserialize( + "str", response.headers.get("Content-Disposition") + ) + response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-copy-completion-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-copy-completion-time") + ) + response_headers["x-ms-copy-status-description"] = self._deserialize( + "str", response.headers.get("x-ms-copy-status-description") + ) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-progress"] = self._deserialize( + "str", response.headers.get("x-ms-copy-progress") + ) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) + response_headers["x-ms-lease-duration"] = self._deserialize( + "str", response.headers.get("x-ms-lease-duration") + ) + response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) + response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-is-current-version"] = self._deserialize( + "bool", response.headers.get("x-ms-is-current-version") + ) + response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-blob-committed-block-count"] = self._deserialize( + "int", response.headers.get("x-ms-blob-committed-block-count") + ) + response_headers["x-ms-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-blob-content-md5"] = self._deserialize( + "bytearray", response.headers.get("x-ms-blob-content-md5") + ) + response_headers["x-ms-tag-count"] = self._deserialize("int", response.headers.get("x-ms-tag-count")) + response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) + response_headers["x-ms-last-access-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-last-access-time") + ) + response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") + ) + response_headers["x-ms-immutability-policy-mode"] = self._deserialize( + "str", response.headers.get("x-ms-immutability-policy-mode") + ) + response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) + response_headers["x-ms-structured-body"] = self._deserialize( + "str", response.headers.get("x-ms-structured-body") + ) + response_headers["x-ms-structured-content-length"] = self._deserialize( + "int", response.headers.get("x-ms-structured-content-length") + ) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + deserialized = response.iter_bytes() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_properties( # pylint: disable=too-many-locals + self, + *, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> bool: + """The Get Properties operation returns all user-defined metadata, standard HTTP properties, and + system properties for the blob. It does not return the content of the blob. + + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: bool + :rtype: bool + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_get_properties_request( + snapshot=snapshot, + version_id=version_id, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-meta"] = self._deserialize("str", response.headers.get("x-ms-meta")) + response_headers["x-ms-or"] = self._deserialize("str", response.headers.get("x-ms-or")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-creation-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-creation-time") + ) + response_headers["x-ms-or-policy-id"] = self._deserialize("str", response.headers.get("x-ms-or-policy-id")) + response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) + response_headers["x-ms-copy-completion-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-copy-completion-time") + ) + response_headers["x-ms-copy-status-description"] = self._deserialize( + "str", response.headers.get("x-ms-copy-status-description") + ) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-progress"] = self._deserialize("str", response.headers.get("x-ms-copy-progress")) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) + response_headers["x-ms-incremental-copy"] = self._deserialize( + "bool", response.headers.get("x-ms-incremental-copy") + ) + response_headers["x-ms-copy-destination-snapshot"] = self._deserialize( + "str", response.headers.get("x-ms-copy-destination-snapshot") + ) + response_headers["x-ms-lease-duration"] = self._deserialize("str", response.headers.get("x-ms-lease-duration")) + response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) + response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) + response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) + response_headers["Content-Disposition"] = self._deserialize("str", response.headers.get("Content-Disposition")) + response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) + response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) + response_headers["x-ms-blob-committed-block-count"] = self._deserialize( + "int", response.headers.get("x-ms-blob-committed-block-count") + ) + response_headers["x-ms-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-access-tier"] = self._deserialize("str", response.headers.get("x-ms-access-tier")) + response_headers["x-ms-access-tier-inferred"] = self._deserialize( + "bool", response.headers.get("x-ms-access-tier-inferred") + ) + response_headers["x-ms-archive-status"] = self._deserialize("str", response.headers.get("x-ms-archive-status")) + response_headers["x-ms-access-tier-change-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-access-tier-change-time") + ) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-is-current-version"] = self._deserialize( + "bool", response.headers.get("x-ms-is-current-version") + ) + response_headers["x-ms-tag-count"] = self._deserialize("int", response.headers.get("x-ms-tag-count")) + response_headers["x-ms-expiry-time"] = self._deserialize("rfc-1123", response.headers.get("x-ms-expiry-time")) + response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) + response_headers["x-ms-rehydrate-priority"] = self._deserialize( + "str", response.headers.get("x-ms-rehydrate-priority") + ) + response_headers["x-ms-last-access-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-last-access-time") + ) + response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") + ) + response_headers["x-ms-immutability-policy-mode"] = self._deserialize( + "str", response.headers.get("x-ms-immutability-policy-mode") + ) + response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + return 200 <= response.status_code <= 299 + + @distributed_trace + @api_version_validation( + params_added_on={"2026-04-06": ["access_tier_if_modified_since", "access_tier_if_unmodified_since"]}, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + def delete( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + delete_snapshots: Optional[Union[str, _models.DeleteSnapshotsOptionType]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_delete_type: Optional[Union[str, _models.BlobDeleteType]] = None, + access_tier_if_modified_since: Optional[datetime.datetime] = None, + access_tier_if_unmodified_since: Optional[datetime.datetime] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """If the storage account's soft delete feature is disabled then, when a blob is deleted, it is + permanently removed from the storage account. If the storage account's soft delete feature is + enabled, then, when a blob is deleted, it is marked for deletion and becomes inaccessible + immediately. However, the blob service retains the blob or snapshot for the number of days + specified by the DeleteRetentionPolicy section of [Storage service properties] + (Set-Blob-Service-Properties.md). After the specified number of days has passed, the blob's + data is permanently removed from the storage account. Note that you continue to be charged for + the soft-deleted blob's storage until it is permanently removed. Use the List Blobs API and + specify the \\"include=deleted\\" query parameter to discover which blobs and snapshots have + been soft deleted. You can then use the Undelete Blob API to restore a soft-deleted blob. All + other operations on a soft-deleted blob or snapshot causes the service to return an HTTP status + code of 404 (ResourceNotFound). + + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword delete_snapshots: Required if the blob has associated snapshots. Specify one of the + following two options: include: Delete the base blob and all of its snapshots. only: Delete + only the blob's snapshots and not the blob itself. Known values are: "only" and "include". + Default value is None. + :paramtype delete_snapshots: str or ~azure.storage.blobs.models.DeleteSnapshotsOptionType + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword blob_delete_type: Optional. Only possible value is 'permanent', which specifies to + permanently delete a blob if blob soft delete is enabled. "Permanent" Default value is None. + :paramtype blob_delete_type: str or ~azure.storage.blobs.models.BlobDeleteType + :keyword access_tier_if_modified_since: Specify this header value to operate only on a blob if + the access-tier has been modified since the specified date/time. Default value is None. + :paramtype access_tier_if_modified_since: ~datetime.datetime + :keyword access_tier_if_unmodified_since: Specify this header value to operate only on a blob + if the access-tier has not been modified since the specified date/time. Default value is None. + :paramtype access_tier_if_unmodified_since: ~datetime.datetime + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_delete_request( + snapshot=snapshot, + version_id=version_id, + timeout=timeout, + lease_id=lease_id, + delete_snapshots=delete_snapshots, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + blob_delete_type=blob_delete_type, + access_tier_if_modified_since=access_tier_if_modified_since, + access_tier_if_unmodified_since=access_tier_if_unmodified_since, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def undelete( # pylint: disable=inconsistent-return-statements + self, *, timeout: Optional[int] = None, **kwargs: Any + ) -> None: + """Undelete a blob that was previously soft deleted. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_undelete_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def set_expiry( # pylint: disable=inconsistent-return-statements + self, + *, + expiry_options: Union[str, _models.BlobExpiryOptions], + timeout: Optional[int] = None, + expires_on: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """Set the expiration time of a blob. + + :keyword expiry_options: Required. Indicates mode of the expiry time. Known values are: + "NeverExpire", "RelativeToCreation", "RelativeToNow", and "Absolute". Required. + :paramtype expiry_options: str or ~azure.storage.blobs.models.BlobExpiryOptions + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword expires_on: The time this blob will expire. Default value is None. + :paramtype expires_on: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_set_expiry_request( + expiry_options=expiry_options, + timeout=timeout, + expires_on=expires_on, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def set_properties( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + timeout: Optional[int] = None, + blob_cache_control: Optional[str] = None, + blob_content_type: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Set HTTP Headers operation sets system properties on the blob. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword blob_cache_control: Optional. Sets the blob's cache control. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_cache_control: str + :keyword blob_content_type: Optional. Sets the blob's content type. If specified, this property + is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_type: str + :keyword blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is + not validated, as the hashes for the individual blocks were validated when each was uploaded. + Default value is None. + :paramtype blob_content_md5: bytes + :keyword blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_encoding: str + :keyword blob_content_language: Optional. Set the blob's content language. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_language: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_content_disposition: Optional. Sets the blob's content disposition. If specified, + this property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_disposition: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_set_properties_request( + timeout=timeout, + blob_cache_control=blob_cache_control, + blob_content_type=blob_content_type, + blob_content_md5=blob_content_md5, + blob_content_encoding=blob_content_encoding, + blob_content_language=blob_content_language, + lease_id=lease_id, + blob_content_disposition=blob_content_disposition, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def set_immutability_policy( # pylint: disable=inconsistent-return-statements + self, + *, + expiry: datetime.datetime, + timeout: Optional[int] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + **kwargs: Any + ) -> None: + """Set the immutability policy of a blob. + + :keyword expiry: Specifies the date time when the blobs immutability policy is set to expire. + Required. + :paramtype expiry: ~datetime.datetime + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_set_immutability_policy_request( + expiry=expiry, + timeout=timeout, + if_unmodified_since=if_unmodified_since, + immutability_policy_mode=immutability_policy_mode, + snapshot=snapshot, + version_id=version_id, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") + ) + response_headers["x-ms-immutability-policy-mode"] = self._deserialize( + "str", response.headers.get("x-ms-immutability-policy-mode") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def delete_immutability_policy( # pylint: disable=inconsistent-return-statements + self, + *, + timeout: Optional[int] = None, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + **kwargs: Any + ) -> None: + """The Delete Immutability Policy operation deletes the immutability policy on the blob. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_delete_immutability_policy_request( + timeout=timeout, + snapshot=snapshot, + version_id=version_id, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def set_legal_hold( # pylint: disable=inconsistent-return-statements + self, + *, + legal_hold: bool, + timeout: Optional[int] = None, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + **kwargs: Any + ) -> None: + """The Set Legal Hold operation sets a legal hold on the blob. + + :keyword legal_hold: Required. Specifies the legal hold status to set on the blob. Required. + :paramtype legal_hold: bool + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_set_legal_hold_request( + legal_hold=legal_hold, + timeout=timeout, + snapshot=snapshot, + version_id=version_id, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def set_metadata( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + metadata: str, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Set Metadata operation sets user-defined metadata for the specified blob as one or more + name-value pairs. + + :keyword metadata: The metadata headers. Required. + :paramtype metadata: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_set_metadata_request( + metadata=metadata, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def acquire_lease( # pylint: disable=inconsistent-return-statements + self, + *, + duration: int, + timeout: Optional[int] = None, + proposed_lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Acquire Lease operation requests a new lease on a blob. The lease lock duration can be 15 + to 60 seconds, or can be infinite. + + :keyword duration: Specifies the duration of the lease, in seconds, or negative one (-1) for a + lease that never expires. A non-infinite lease can be between 15 and 60 seconds. A lease + duration cannot be changed using renew or change. Required. + :paramtype duration: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword proposed_lease_id: Optional. The proposed lease ID for the container. Default value + is None. + :paramtype proposed_lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + action: Literal["acquire"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "acquire")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_acquire_lease_request( + duration=duration, + timeout=timeout, + proposed_lease_id=proposed_lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def release_lease( # pylint: disable=inconsistent-return-statements + self, + *, + lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Release Lease operation frees the lease if it's no longer needed, so that another client + can immediately acquire a lease against the blob. + + :keyword lease_id: Required. A lease ID for the source path. If specified, the source path + must have an active lease and the lease ID must match. Required. + :paramtype lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["release"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "release")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_release_lease_request( + lease_id=lease_id, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def renew_lease( # pylint: disable=inconsistent-return-statements + self, + *, + lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Renew Lease operation renews an existing lease. + + :keyword lease_id: Required. A lease ID for the source path. If specified, the source path + must have an active lease and the lease ID must match. Required. + :paramtype lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["renew"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "renew")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_renew_lease_request( + lease_id=lease_id, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def change_lease( # pylint: disable=inconsistent-return-statements + self, + *, + lease_id: str, + proposed_lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Change Lease operation is used to change the ID of an existing lease. + + :keyword lease_id: Required. A lease ID for the source path. If specified, the source path + must have an active lease and the lease ID must match. Required. + :paramtype lease_id: str + :keyword proposed_lease_id: Required. The proposed lease ID for the container. Required. + :paramtype proposed_lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["change"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "change")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_change_lease_request( + lease_id=lease_id, + proposed_lease_id=proposed_lease_id, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def break_lease( # pylint: disable=inconsistent-return-statements + self, + *, + timeout: Optional[int] = None, + break_period: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Break Lease operation ends a lease and ensures that another client can't acquire a new + lease until the current lease period has expired. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword break_period: For a break operation, proposed duration the lease should continue + before it is broken, in seconds, between 0 and 60. This break period is only used if it is + shorter than the time remaining on the lease. If longer, the time remaining on the lease is + used. A new lease will not be available before the break period has expired, but the lease may + be held for longer than the break period. If this header does not appear with a break + operation, a fixed-duration lease breaks after the remaining lease period elapses, and an + infinite lease breaks immediately. Default value is None. + :paramtype break_period: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["break"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "break")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_break_lease_request( + timeout=timeout, + break_period=break_period, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-lease-time"] = self._deserialize("int", response.headers.get("x-ms-lease-time")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def create_snapshot( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + timeout: Optional[int] = None, + metadata: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + lease_id: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Create Snapshot operation creates a read-only snapshot of a blob. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_create_snapshot_request( + timeout=timeout, + metadata=metadata, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + lease_id=lease_id, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-snapshot"] = self._deserialize("str", response.headers.get("x-ms-snapshot")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def start_copy_from_url( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + copy_source: str, + timeout: Optional[int] = None, + metadata: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + rehydrate_priority: Optional[Union[str, _models.RehydratePriority]] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + source_if_tags: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + lease_id: Optional[str] = None, + blob_tags_string: Optional[str] = None, + seal_blob: Optional[bool] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Start Copy From URL operation copies a blob or an internet resource to a new blob. + + :keyword copy_source: Specifies the name of the source page blob snapshot. This value is a URL + of up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as + it would appear in a request URI. The source blob must either be public or must be + authenticated via a shared access signature. Required. + :paramtype copy_source: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword tier: The tier to be set on the blob. Known values are: "P4", "P6", "P10", "P15", + "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", and + "Cold". Default value is None. + :paramtype tier: str or ~azure.storage.blobs.models.AccessTier + :keyword rehydrate_priority: If an object is in rehydrate pending state then this header is + returned with priority of rehydrate. Valid values are High and Standard. Known values are: + "High" and "Standard". Default value is None. + :paramtype rehydrate_priority: str or ~azure.storage.blobs.models.RehydratePriority + :keyword source_if_modified_since: Specify this header value to operate only on a blob if it + has been modified since the specified date/time. Default value is None. + :paramtype source_if_modified_since: ~datetime.datetime + :keyword source_if_unmodified_since: Specify this header value to operate only on a blob if it + has not been modified since the specified date/time. Default value is None. + :paramtype source_if_unmodified_since: ~datetime.datetime + :keyword source_if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype source_if_match: str + :keyword source_if_none_match: Specify this header value to operate only on a blob if it has + been modified since the specified date/time. Default value is None. + :paramtype source_if_none_match: str + :keyword source_if_tags: Specify a SQL where clause on blob tags to operate only on blobs with + a matching value. Default value is None. + :paramtype source_if_tags: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword seal_blob: Overrides the sealed state of the destination blob. Service version + 2019-12-12 and newer. Default value is None. + :paramtype seal_blob: bool + :keyword immutability_policy_expiry: Specifies the date time when the blobs immutability policy + is set to expire. Default value is None. + :paramtype immutability_policy_expiry: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword legal_hold: Specified if a legal hold should be set on the blob. Default value is + None. + :paramtype legal_hold: bool + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + requires_sync: Literal[True] = kwargs.pop("requires_sync", _headers.pop("x-ms-requires-sync", True)) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_start_copy_from_url_request( + copy_source=copy_source, + timeout=timeout, + metadata=metadata, + tier=tier, + rehydrate_priority=rehydrate_priority, + source_if_modified_since=source_if_modified_since, + source_if_unmodified_since=source_if_unmodified_since, + source_if_match=source_if_match, + source_if_none_match=source_if_none_match, + source_if_tags=source_if_tags, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + lease_id=lease_id, + blob_tags_string=blob_tags_string, + seal_blob=seal_blob, + immutability_policy_expiry=immutability_policy_expiry, + immutability_policy_mode=immutability_policy_mode, + legal_hold=legal_hold, + etag=etag, + match_condition=match_condition, + content_type=content_type, + requires_sync=requires_sync, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def copy_from_url( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + copy_source: str, + timeout: Optional[int] = None, + metadata: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + lease_id: Optional[str] = None, + source_content_md5: Optional[bytes] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + copy_source_authorization: Optional[str] = None, + encryption_scope: Optional[str] = None, + copy_source_tags: Optional[Union[str, _models.BlobCopySourceTags]] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Copy From URL operation copies a blob or an internet resource to a new blob. It will not + return a response until the copy is complete. + + :keyword copy_source: Specifies the name of the source page blob snapshot. This value is a URL + of up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as + it would appear in a request URI. The source blob must either be public or must be + authenticated via a shared access signature. Required. + :paramtype copy_source: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword tier: The tier to be set on the blob. Known values are: "P4", "P6", "P10", "P15", + "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", and + "Cold". Default value is None. + :paramtype tier: str or ~azure.storage.blobs.models.AccessTier + :keyword source_if_modified_since: Specify this header value to operate only on a blob if it + has been modified since the specified date/time. Default value is None. + :paramtype source_if_modified_since: ~datetime.datetime + :keyword source_if_unmodified_since: Specify this header value to operate only on a blob if it + has not been modified since the specified date/time. Default value is None. + :paramtype source_if_unmodified_since: ~datetime.datetime + :keyword source_if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype source_if_match: str + :keyword source_if_none_match: Specify this header value to operate only on a blob if it has + been modified since the specified date/time. Default value is None. + :paramtype source_if_none_match: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword source_content_md5: Specify the md5 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_md5: bytes + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword immutability_policy_expiry: Specifies the date time when the blobs immutability policy + is set to expire. Default value is None. + :paramtype immutability_policy_expiry: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword legal_hold: Specified if a legal hold should be set on the blob. Default value is + None. + :paramtype legal_hold: bool + :keyword copy_source_authorization: Only Bearer type is supported. Credentials should be a + valid OAuth access token to copy source. Default value is None. + :paramtype copy_source_authorization: str + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword copy_source_tags: Optional, default 'replace'. Indicates if source tags should be + copied or replaced with the tags specified by x-ms-tags. Known values are: "REPLACE" and + "COPY". Default value is None. + :paramtype copy_source_tags: str or ~azure.storage.blobs.models.BlobCopySourceTags + :keyword file_request_intent: Valid value is backup. "backup" Default value is None. + :paramtype file_request_intent: str or ~azure.storage.blobs.models.FileShareTokenIntent + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + requires_sync: Literal["true"] = kwargs.pop("requires_sync", _headers.pop("x-ms-requires-sync", "true")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_copy_from_url_request( + copy_source=copy_source, + timeout=timeout, + metadata=metadata, + tier=tier, + source_if_modified_since=source_if_modified_since, + source_if_unmodified_since=source_if_unmodified_since, + source_if_match=source_if_match, + source_if_none_match=source_if_none_match, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + lease_id=lease_id, + source_content_md5=source_content_md5, + blob_tags_string=blob_tags_string, + immutability_policy_expiry=immutability_policy_expiry, + immutability_policy_mode=immutability_policy_mode, + legal_hold=legal_hold, + copy_source_authorization=copy_source_authorization, + encryption_scope=encryption_scope, + copy_source_tags=copy_source_tags, + file_request_intent=file_request_intent, + etag=etag, + match_condition=match_condition, + content_type=content_type, + requires_sync=requires_sync, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def abort_copy_from_url( # pylint: disable=inconsistent-return-statements + self, *, copy_id: str, timeout: Optional[int] = None, lease_id: Optional[str] = None, **kwargs: Any + ) -> None: + """The Abort Copy From URL operation aborts a pending Copy From URL operation, and leaves a + destination blob with zero length and full metadata. + + :keyword copy_id: The copy identifier provided in the x-ms-copy-id header of the original Copy + Blob operation. Required. + :paramtype copy_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + copy_action_abort_constant: Literal["abort"] = kwargs.pop( + "copy_action_abort_constant", _headers.pop("x-ms-copy-action", "abort") + ) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_abort_copy_from_url_request( + copy_id=copy_id, + timeout=timeout, + lease_id=lease_id, + content_type=content_type, + copy_action_abort_constant=copy_action_abort_constant, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def set_tier( # pylint: disable=inconsistent-return-statements + self, + *, + tier: Union[str, _models.AccessTier], + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + timeout: Optional[int] = None, + rehydrate_priority: Optional[Union[str, _models.RehydratePriority]] = None, + lease_id: Optional[str] = None, + if_tags: Optional[str] = None, + **kwargs: Any + ) -> None: + """The Set Tier operation sets the tier on a block blob. The operation is allowed on a page blob + or block blob, but not on an append blob. A block blob's tier determines Hot/Cool/Archive + storage type. This operation does not update the blob's ETag. + + :keyword tier: Indicates the tier to be set on the blob. Known values are: "P4", "P6", "P10", + "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", + and "Cold". Required. + :paramtype tier: str or ~azure.storage.blobs.models.AccessTier + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword rehydrate_priority: If an object is in rehydrate pending state then this header is + returned with priority of rehydrate. Valid values are High and Standard. Known values are: + "High" and "Standard". Default value is None. + :paramtype rehydrate_priority: str or ~azure.storage.blobs.models.RehydratePriority + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_set_tier_request( + tier=tier, + snapshot=snapshot, + version_id=version_id, + timeout=timeout, + rehydrate_priority=rehydrate_priority, + lease_id=lease_id, + if_tags=if_tags, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def get_account_info( # pylint: disable=inconsistent-return-statements + self, *, timeout: Optional[int] = None, **kwargs: Any + ) -> None: + """Returns the sku name and account kind. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_get_account_info_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-account-kind"] = self._deserialize("str", response.headers.get("x-ms-account-kind")) + response_headers["x-ms-sku-name"] = self._deserialize("str", response.headers.get("x-ms-sku-name")) + response_headers["x-ms-is-hns-enabled"] = self._deserialize("bool", response.headers.get("x-ms-is-hns-enabled")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + @api_version_validation( + params_added_on={"2026-02-06": ["if_modified_since", "if_unmodified_since", "if_match", "if_none_match"]}, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + def get_tags( + self, + *, + timeout: Optional[int] = None, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + lease_id: Optional[str] = None, + if_tags: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any + ) -> _models.BlobTags: + """The Get Blob Tags operation enables users to get tags on a blob. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword if_modified_since: Specify this header value to operate only on a blob if it has been + modified since the specified date/time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: Specify this header value to operate only on a blob if it has not + been modified since the specified date/time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype if_match: str + :keyword if_none_match: Specify an ETag value to operate only on blobs without a matching + value. Default value is None. + :paramtype if_none_match: str + :return: BlobTags. The BlobTags is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.BlobTags + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.BlobTags] = kwargs.pop("cls", None) + + _request = build_blob_get_tags_request( + timeout=timeout, + snapshot=snapshot, + version_id=version_id, + lease_id=lease_id, + if_tags=if_tags, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.BlobTags, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + @api_version_validation( + params_added_on={"2026-02-06": ["if_modified_since", "if_unmodified_since", "if_match", "if_none_match"]}, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + def set_tags( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + tags: _models.BlobTags, + *, + timeout: Optional[int] = None, + version_id: Optional[str] = None, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + if_tags: Optional[str] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any + ) -> None: + """The Set Tags operation enables users to set tags on a blob. + + :param tags: The blob tags. Required. + :type tags: ~azure.storage.blobs.models.BlobTags + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword transactional_content_crc64: Specify the transactional crc64 for the body, to be + validated by the service. Default value is None. + :paramtype transactional_content_crc64: bytes + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: Specify this header value to operate only on a blob if it has been + modified since the specified date/time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: Specify this header value to operate only on a blob if it has not + been modified since the specified date/time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype if_match: str + :keyword if_none_match: Specify an ETag value to operate only on blobs without a matching + value. Default value is None. + :paramtype if_none_match: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = _get_element(tags) + + _request = build_blob_set_tags_request( + timeout=timeout, + version_id=version_id, + transactional_content_md5=transactional_content_md5, + transactional_content_crc64=transactional_content_crc64, + if_tags=if_tags, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + +class _PageBlobClientOperationsMixin( + ClientMixinABC[PipelineClient[HttpRequest, HttpResponse], PageBlobClientConfiguration] +): + + @distributed_trace + def create( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + size: int, + metadata: Optional[str] = None, + timeout: Optional[int] = None, + tier: Optional[Union[str, _models.PremiumPageBlobAccessTier]] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_cache_control: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_sequence_number: Optional[int] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Create operation creates a new page blob. + + :keyword size: This header specifies the maximum size for the page blob, up to 1 TB. The page + blob size must be aligned to a 512-byte boundary. Required. + :paramtype size: int + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword tier: Optional. Indicates the tier to be set on the page blob. Known values are: "P4", + "P6", "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", and "P80". Default value is None. + :paramtype tier: str or ~azure.storage.blobs.models.PremiumPageBlobAccessTier + :keyword blob_content_type: Optional. Sets the blob's content type. If specified, this property + is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_type: str + :keyword blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_encoding: str + :keyword blob_content_language: Optional. Set the blob's content language. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_language: str + :keyword blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is + not validated, as the hashes for the individual blocks were validated when each was uploaded. + Default value is None. + :paramtype blob_content_md5: bytes + :keyword blob_cache_control: Optional. Sets the blob's cache control. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_cache_control: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_content_disposition: Optional. Sets the blob's content disposition. If specified, + this property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_disposition: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword blob_sequence_number: Set for page blobs only. The sequence number is a + user-controlled value that you can use to track requests. The value of the sequence number must + be between 0 and 2^63 - 1. Default value is None. + :paramtype blob_sequence_number: int + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword immutability_policy_expiry: Specifies the date time when the blobs immutability policy + is set to expire. Default value is None. + :paramtype immutability_policy_expiry: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword legal_hold: Specified if a legal hold should be set on the blob. Default value is + None. + :paramtype legal_hold: bool + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + content_length: Literal[0] = kwargs.pop("content_length", _headers.pop("Content-Length", 0)) + blob_type: Literal["PageBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "PageBlob")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_page_blob_create_request( + size=size, + metadata=metadata, + timeout=timeout, + tier=tier, + blob_content_type=blob_content_type, + blob_content_encoding=blob_content_encoding, + blob_content_language=blob_content_language, + blob_content_md5=blob_content_md5, + blob_cache_control=blob_cache_control, + lease_id=lease_id, + blob_content_disposition=blob_content_disposition, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + blob_sequence_number=blob_sequence_number, + blob_tags_string=blob_tags_string, + immutability_policy_expiry=immutability_policy_expiry, + immutability_policy_mode=immutability_policy_mode, + legal_hold=legal_hold, + etag=etag, + match_condition=match_condition, + content_length=content_length, + blob_type=blob_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def upload_pages( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + body: bytes, + *, + content_length: int, + range: str, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_sequence_number_less_than_or_equal_to: Optional[int] = None, + if_sequence_number_less_than: Optional[int] = None, + if_sequence_number_equal_to: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + structured_body_type: Optional[str] = None, + structured_content_length: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Upload Pages operation writes a range of pages to a page blob. + + :param body: The body of the request. Required. + :type body: bytes + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword range: Bytes of data in the specified range. Required. + :paramtype range: str + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword transactional_content_crc64: Specify the transactional crc64 for the body, to be + validated by the service. Default value is None. + :paramtype transactional_content_crc64: bytes + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_sequence_number_less_than_or_equal_to: Specify this header value to operate only on + a blob if it has a sequence number less than or equal to the specified. Default value is None. + :paramtype if_sequence_number_less_than_or_equal_to: int + :keyword if_sequence_number_less_than: Specify this header value to operate only on a blob if + it has a sequence number less than the specified. Default value is None. + :paramtype if_sequence_number_less_than: int + :keyword if_sequence_number_equal_to: Specify this header value to operate only on a blob if it + has the specified sequence number. Default value is None. + :paramtype if_sequence_number_equal_to: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword structured_body_type: Required if the request body is a structured message. Specifies + the message schema version and properties. Default value is None. + :paramtype structured_body_type: str + :keyword structured_content_length: Required if the request body is a structured message. + Specifies the length of the blob/file content inside the message body. Will always be smaller + than Content-Length. Default value is None. + :paramtype structured_content_length: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + page_write: Literal["update"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "update")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = body + + _request = build_page_blob_upload_pages_request( + content_length=content_length, + range=range, + transactional_content_md5=transactional_content_md5, + transactional_content_crc64=transactional_content_crc64, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_sequence_number_less_than_or_equal_to=if_sequence_number_less_than_or_equal_to, + if_sequence_number_less_than=if_sequence_number_less_than, + if_sequence_number_equal_to=if_sequence_number_equal_to, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + structured_body_type=structured_body_type, + structured_content_length=structured_content_length, + etag=etag, + match_condition=match_condition, + content_type=content_type, + page_write=page_write, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-structured-body"] = self._deserialize( + "str", response.headers.get("x-ms-structured-body") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def clear_pages( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + range: str, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_sequence_number_less_than_or_equal_to: Optional[int] = None, + if_sequence_number_less_than: Optional[int] = None, + if_sequence_number_equal_to: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Clear Pages operation clears a range of pages from a page blob. + + :keyword range: Bytes of data in the specified range. Required. + :paramtype range: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_sequence_number_less_than_or_equal_to: Specify this header value to operate only on + a blob if it has a sequence number less than or equal to the specified. Default value is None. + :paramtype if_sequence_number_less_than_or_equal_to: int + :keyword if_sequence_number_less_than: Specify this header value to operate only on a blob if + it has a sequence number less than the specified. Default value is None. + :paramtype if_sequence_number_less_than: int + :keyword if_sequence_number_equal_to: Specify this header value to operate only on a blob if it + has the specified sequence number. Default value is None. + :paramtype if_sequence_number_equal_to: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + content_length: Literal[0] = kwargs.pop("content_length", _headers.pop("Content-Length", 0)) + page_write: Literal["clear"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "clear")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_page_blob_clear_pages_request( + range=range, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_sequence_number_less_than_or_equal_to=if_sequence_number_less_than_or_equal_to, + if_sequence_number_less_than=if_sequence_number_less_than, + if_sequence_number_equal_to=if_sequence_number_equal_to, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_length=content_length, + page_write=page_write, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + @api_version_validation( + params_added_on={ + "2026-04-06": ["source_encryption_key", "source_encryption_key_sha256", "source_encryption_algorithm"] + }, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + def upload_pages_from_url( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + source_url: str, + source_range: str, + content_length: int, + range: str, + source_content_md5: Optional[bytes] = None, + source_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + lease_id: Optional[str] = None, + if_sequence_number_less_than_or_equal_to: Optional[int] = None, + if_sequence_number_less_than: Optional[int] = None, + if_sequence_number_equal_to: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + copy_source_authorization: Optional[str] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + source_encryption_key: Optional[str] = None, + source_encryption_key_sha256: Optional[str] = None, + source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Upload Pages operation writes a range of pages to a page blob where the contents are read + from a URL. + + :keyword source_url: Specify a URL to the copy source. Required. + :paramtype source_url: str + :keyword source_range: Bytes of source data in the specified range. The length of this range + should match the ContentLength header and x-ms-range/Range destination range header. Required. + :paramtype source_range: str + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword range: Bytes of source data in the specified range. The length of this range should + match the ContentLength header and x-ms-range/Range destination range header. Required. + :paramtype range: str + :keyword source_content_md5: Specify the md5 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_md5: bytes + :keyword source_content_crc64: Specify the crc64 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_crc64: bytes + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_sequence_number_less_than_or_equal_to: Specify this header value to operate only on + a blob if it has a sequence number less than or equal to the specified. Default value is None. + :paramtype if_sequence_number_less_than_or_equal_to: int + :keyword if_sequence_number_less_than: Specify this header value to operate only on a blob if + it has a sequence number less than the specified. Default value is None. + :paramtype if_sequence_number_less_than: int + :keyword if_sequence_number_equal_to: Specify this header value to operate only on a blob if it + has the specified sequence number. Default value is None. + :paramtype if_sequence_number_equal_to: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword source_if_modified_since: Specify this header value to operate only on a blob if it + has been modified since the specified date/time. Default value is None. + :paramtype source_if_modified_since: ~datetime.datetime + :keyword source_if_unmodified_since: Specify this header value to operate only on a blob if it + has not been modified since the specified date/time. Default value is None. + :paramtype source_if_unmodified_since: ~datetime.datetime + :keyword source_if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype source_if_match: str + :keyword source_if_none_match: Specify this header value to operate only on a blob if it has + been modified since the specified date/time. Default value is None. + :paramtype source_if_none_match: str + :keyword copy_source_authorization: Only Bearer type is supported. Credentials should be a + valid OAuth access token to copy source. Default value is None. + :paramtype copy_source_authorization: str + :keyword file_request_intent: Valid value is backup. "backup" Default value is None. + :paramtype file_request_intent: str or ~azure.storage.blobs.models.FileShareTokenIntent + :keyword source_encryption_key: Optional. Specifies the source encryption key to use to encrypt + the source data provided in the request. Default value is None. + :paramtype source_encryption_key: str + :keyword source_encryption_key_sha256: The SHA-256 hash of the provided source encryption key. + Must be provided if the x-ms-source-encryption-key header is provided. Default value is None. + :paramtype source_encryption_key_sha256: str + :keyword source_encryption_algorithm: The algorithm used to produce the source encryption key + hash. Currently, the only accepted value is "AES256". Must be provided if the + x-ms-source-encryption-key is provided. "AES256" Default value is None. + :paramtype source_encryption_algorithm: str or + ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + page_write: Literal["update"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "update")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_page_blob_upload_pages_from_url_request( + source_url=source_url, + source_range=source_range, + content_length=content_length, + range=range, + source_content_md5=source_content_md5, + source_content_crc64=source_content_crc64, + timeout=timeout, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + lease_id=lease_id, + if_sequence_number_less_than_or_equal_to=if_sequence_number_less_than_or_equal_to, + if_sequence_number_less_than=if_sequence_number_less_than, + if_sequence_number_equal_to=if_sequence_number_equal_to, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + source_if_modified_since=source_if_modified_since, + source_if_unmodified_since=source_if_unmodified_since, + source_if_match=source_if_match, + source_if_none_match=source_if_none_match, + copy_source_authorization=copy_source_authorization, + file_request_intent=file_request_intent, + source_encryption_key=source_encryption_key, + source_encryption_key_sha256=source_encryption_key_sha256, + source_encryption_algorithm=source_encryption_algorithm, + etag=etag, + match_condition=match_condition, + page_write=page_write, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def get_page_ranges( # pylint: disable=too-many-locals + self, + *, + snapshot: Optional[str] = None, + timeout: Optional[int] = None, + range: Optional[str] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> _models.PageList: + """The Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot + of a page blob. + + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword range: Return only the bytes of the blob in the specified range. Default value is + None. + :paramtype range: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: PageList. The PageList is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.PageList + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.PageList] = kwargs.pop("cls", None) + + _request = build_page_blob_get_page_ranges_request( + snapshot=snapshot, + timeout=timeout, + range=range, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + marker=marker, + maxresults=maxresults, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["x-ms-blob-content-length"] = self._deserialize( + "int", response.headers.get("x-ms-blob-content-length") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.PageList, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_page_ranges_diff( # pylint: disable=too-many-locals + self, + *, + snapshot: Optional[str] = None, + timeout: Optional[int] = None, + prevsnapshot: Optional[str] = None, + prev_snapshot_url: Optional[str] = None, + range: Optional[str] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> _models.PageList: + """The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob or + snapshot of a page blob. + + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword prevsnapshot: Optional in version 2015-07-08 and newer. The prevsnapshot parameter is + a DateTime value that specifies that the response will contain only pages that were changed + between target blob and previous snapshot. Changed pages include both updated and cleared + pages. The target blob may be a snapshot, as long as the snapshot specified by prevsnapshot is + the older of the two. Note that incremental snapshots are currently supported only for blobs + created on or after January 1, 2016. Default value is None. + :paramtype prevsnapshot: str + :keyword prev_snapshot_url: Optional. This header is only supported in service versions + 2019-04-19 and after and specifies the URL of a previous snapshot of the target blob. The + response will only contain pages that were changed between the target blob and its previous + snapshot. Default value is None. + :paramtype prev_snapshot_url: str + :keyword range: Return only the bytes of the blob in the specified range. Default value is + None. + :paramtype range: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: PageList. The PageList is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.PageList + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.PageList] = kwargs.pop("cls", None) + + _request = build_page_blob_get_page_ranges_diff_request( + snapshot=snapshot, + timeout=timeout, + prevsnapshot=prevsnapshot, + prev_snapshot_url=prev_snapshot_url, + range=range, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + marker=marker, + maxresults=maxresults, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["x-ms-blob-content-length"] = self._deserialize( + "int", response.headers.get("x-ms-blob-content-length") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.PageList, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def resize( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + size: int, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Resize operation increases the size of the page blob to the specified size. + + :keyword size: This header specifies the maximum size for the page blob, up to 1 TB. The page + blob size must be aligned to a 512-byte boundary. Required. + :paramtype size: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_page_blob_resize_request( + size=size, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def set_sequence_number( # pylint: disable=inconsistent-return-statements + self, + *, + sequence_number_action: Union[str, _models.SequenceNumberActionType], + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_sequence_number: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Update Sequence Number operation sets the blob's sequence number. The operation will fail + if the specified sequence number is less than the current sequence number of the blob. + + :keyword sequence_number_action: Required if the x-ms-blob-sequence-number header is set for + the request. This property applies to page blobs only. This property indicates how the service + should modify the blob's sequence number. Known values are: "increment", "max", and "update". + Required. + :paramtype sequence_number_action: str or ~azure.storage.blobs.models.SequenceNumberActionType + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword blob_sequence_number: Set for page blobs only. The sequence number is a + user-controlled value that you can use to track requests. The value of the sequence number must + be between 0 and 2^63 - 1. Default value is None. + :paramtype blob_sequence_number: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_page_blob_set_sequence_number_request( + sequence_number_action=sequence_number_action, + timeout=timeout, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + blob_sequence_number=blob_sequence_number, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def copy_incremental( # pylint: disable=inconsistent-return-statements + self, + *, + copy_source: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Copy Incremental operation copies a snapshot of the source page blob to a destination page + blob. The snapshot is copied such that only the differential changes between the previously + copied snapshot are transferred to the destination. The copied snapshots are complete copies of + the original snapshot and can be read or copied from as usual. This API is supported since REST + version 2016-05-31. + + :keyword copy_source: Specifies the name of the source page blob snapshot. This value is a URL + of up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as + it would appear in a request URI. The source blob must either be public or must be + authenticated via a shared access signature. Required. + :paramtype copy_source: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_page_blob_copy_incremental_request( + copy_source=copy_source, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + +class _AppendBlobClientOperationsMixin( + ClientMixinABC[PipelineClient[HttpRequest, HttpResponse], AppendBlobClientConfiguration] +): + + @distributed_trace + def create( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + metadata: Optional[str] = None, + timeout: Optional[int] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_cache_control: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Create operation creates a new append blob. + + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword blob_content_type: Optional. Sets the blob's content type. If specified, this property + is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_type: str + :keyword blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_encoding: str + :keyword blob_content_language: Optional. Set the blob's content language. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_language: str + :keyword blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is + not validated, as the hashes for the individual blocks were validated when each was uploaded. + Default value is None. + :paramtype blob_content_md5: bytes + :keyword blob_cache_control: Optional. Sets the blob's cache control. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_cache_control: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_content_disposition: Optional. Sets the blob's content disposition. If specified, + this property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_disposition: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword immutability_policy_expiry: Specifies the date time when the blobs immutability policy + is set to expire. Default value is None. + :paramtype immutability_policy_expiry: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword legal_hold: Specified if a legal hold should be set on the blob. Default value is + None. + :paramtype legal_hold: bool + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + content_length: Literal[0] = kwargs.pop("content_length", _headers.pop("Content-Length", 0)) + blob_type: Literal["AppendBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "AppendBlob")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_append_blob_create_request( + metadata=metadata, + timeout=timeout, + blob_content_type=blob_content_type, + blob_content_encoding=blob_content_encoding, + blob_content_language=blob_content_language, + blob_content_md5=blob_content_md5, + blob_cache_control=blob_cache_control, + lease_id=lease_id, + blob_content_disposition=blob_content_disposition, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + blob_tags_string=blob_tags_string, + immutability_policy_expiry=immutability_policy_expiry, + immutability_policy_mode=immutability_policy_mode, + legal_hold=legal_hold, + etag=etag, + match_condition=match_condition, + content_length=content_length, + blob_type=blob_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def append_block( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + body: bytes, + *, + content_length: int, + timeout: Optional[int] = None, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + lease_id: Optional[str] = None, + max_size: Optional[int] = None, + append_position: Optional[int] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + structured_body_type: Optional[str] = None, + structured_content_length: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Append Block operation commits a new block of data to the end of an append blob. + + :param body: The body of the request. Required. + :type body: bytes + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword transactional_content_crc64: Specify the transactional crc64 for the body, to be + validated by the service. Default value is None. + :paramtype transactional_content_crc64: bytes + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword max_size: Optional conditional header. The max length in bytes permitted for the + append blob. If the Append Block operation would cause the blob to exceed that limit or if the + blob size is already greater than the value specified in this header, the request will fail + with MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed). Default + value is None. + :paramtype max_size: int + :keyword append_position: Optional conditional header, used only for the Append Block + operation. A number indicating the byte offset to compare. Append Block will succeed only if + the append position is equal to this number. If it is not, the request will fail with the + AppendPositionConditionNotMet error (HTTP status code 412 - Precondition Failed). Default value + is None. + :paramtype append_position: int + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword structured_body_type: Required if the request body is a structured message. Specifies + the message schema version and properties. Default value is None. + :paramtype structured_body_type: str + :keyword structured_content_length: Required if the request body is a structured message. + Specifies the length of the blob/file content inside the message body. Will always be smaller + than Content-Length. Default value is None. + :paramtype structured_content_length: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = body + + _request = build_append_blob_append_block_request( + content_length=content_length, + timeout=timeout, + transactional_content_md5=transactional_content_md5, + transactional_content_crc64=transactional_content_crc64, + lease_id=lease_id, + max_size=max_size, + append_position=append_position, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + structured_body_type=structured_body_type, + structured_content_length=structured_content_length, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-blob-append-offset"] = self._deserialize( + "str", response.headers.get("x-ms-blob-append-offset") + ) + response_headers["x-ms-blob-committed-block-count"] = self._deserialize( + "int", response.headers.get("x-ms-blob-committed-block-count") + ) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-structured-body"] = self._deserialize( + "str", response.headers.get("x-ms-structured-body") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + @api_version_validation( + params_added_on={ + "2026-04-06": ["source_encryption_key", "source_encryption_key_sha256", "source_encryption_algorithm"] + }, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + def append_block_from_url( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + source_url: str, + content_length: int, + source_range: Optional[str] = None, + source_content_md5: Optional[bytes] = None, + source_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + transactional_content_md5: Optional[bytes] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + lease_id: Optional[str] = None, + max_size: Optional[int] = None, + append_position: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + copy_source_authorization: Optional[str] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + source_encryption_key: Optional[str] = None, + source_encryption_key_sha256: Optional[str] = None, + source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Append Block From URL operation creates a new block to be committed as part of an append + blob where the contents are read from a URL. + + :keyword source_url: Specify a URL to the copy source. Required. + :paramtype source_url: str + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword source_range: Bytes of source data in the specified range. Default value is None. + :paramtype source_range: str + :keyword source_content_md5: Specify the md5 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_md5: bytes + :keyword source_content_crc64: Specify the crc64 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_crc64: bytes + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword max_size: Optional conditional header. The max length in bytes permitted for the + append blob. If the Append Block operation would cause the blob to exceed that limit or if the + blob size is already greater than the value specified in this header, the request will fail + with MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed). Default + value is None. + :paramtype max_size: int + :keyword append_position: Optional conditional header, used only for the Append Block + operation. A number indicating the byte offset to compare. Append Block will succeed only if + the append position is equal to this number. If it is not, the request will fail with the + AppendPositionConditionNotMet error (HTTP status code 412 - Precondition Failed). Default value + is None. + :paramtype append_position: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword source_if_modified_since: Specify this header value to operate only on a blob if it + has been modified since the specified date/time. Default value is None. + :paramtype source_if_modified_since: ~datetime.datetime + :keyword source_if_unmodified_since: Specify this header value to operate only on a blob if it + has not been modified since the specified date/time. Default value is None. + :paramtype source_if_unmodified_since: ~datetime.datetime + :keyword source_if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype source_if_match: str + :keyword source_if_none_match: Specify this header value to operate only on a blob if it has + been modified since the specified date/time. Default value is None. + :paramtype source_if_none_match: str + :keyword copy_source_authorization: Only Bearer type is supported. Credentials should be a + valid OAuth access token to copy source. Default value is None. + :paramtype copy_source_authorization: str + :keyword file_request_intent: Valid value is backup. "backup" Default value is None. + :paramtype file_request_intent: str or ~azure.storage.blobs.models.FileShareTokenIntent + :keyword source_encryption_key: Optional. Specifies the source encryption key to use to encrypt + the source data provided in the request. Default value is None. + :paramtype source_encryption_key: str + :keyword source_encryption_key_sha256: The SHA-256 hash of the provided source encryption key. + Must be provided if the x-ms-source-encryption-key header is provided. Default value is None. + :paramtype source_encryption_key_sha256: str + :keyword source_encryption_algorithm: The algorithm used to produce the source encryption key + hash. Currently, the only accepted value is "AES256". Must be provided if the + x-ms-source-encryption-key is provided. "AES256" Default value is None. + :paramtype source_encryption_algorithm: str or + ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_append_blob_append_block_from_url_request( + source_url=source_url, + content_length=content_length, + source_range=source_range, + source_content_md5=source_content_md5, + source_content_crc64=source_content_crc64, + timeout=timeout, + transactional_content_md5=transactional_content_md5, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + lease_id=lease_id, + max_size=max_size, + append_position=append_position, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + source_if_modified_since=source_if_modified_since, + source_if_unmodified_since=source_if_unmodified_since, + source_if_match=source_if_match, + source_if_none_match=source_if_none_match, + copy_source_authorization=copy_source_authorization, + file_request_intent=file_request_intent, + source_encryption_key=source_encryption_key, + source_encryption_key_sha256=source_encryption_key_sha256, + source_encryption_algorithm=source_encryption_algorithm, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-blob-append-offset"] = self._deserialize( + "str", response.headers.get("x-ms-blob-append-offset") + ) + response_headers["x-ms-blob-committed-block-count"] = self._deserialize( + "int", response.headers.get("x-ms-blob-committed-block-count") + ) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def seal( # pylint: disable=inconsistent-return-statements + self, + *, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + append_position: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Seal operation seals the Append Blob to make it read-only. Seal is supported only on + version 2019-12-12 version or later. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword append_position: Optional conditional header, used only for the Append Block + operation. A number indicating the byte offset to compare. Append Block will succeed only if + the append position is equal to this number. If it is not, the request will fail with the + AppendPositionConditionNotMet error (HTTP status code 412 - Precondition Failed). Default value + is None. + :paramtype append_position: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_append_blob_seal_request( + timeout=timeout, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + append_position=append_position, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + +class _BlockBlobClientOperationsMixin( + ClientMixinABC[PipelineClient[HttpRequest, HttpResponse], BlockBlobClientConfiguration] +): + + @distributed_trace + def upload( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + body: bytes, + *, + content_length: int, + metadata: Optional[str] = None, + timeout: Optional[int] = None, + transactional_content_md5: Optional[bytes] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_cache_control: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + transactional_content_crc64: Optional[bytes] = None, + structured_body_type: Optional[str] = None, + structured_content_length: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Upload Block Blob operation updates the content of an existing block blob. Updating an + existing block blob overwrites any existing metadata on the blob. Partial updates are not + supported with Put Blob; the content of the existing blob is overwritten with the content of + the new blob. To perform a partial update of the content of a block blob, use the Put Block + List operation. + + :param body: The body of the request. Required. + :type body: bytes + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword blob_content_type: Optional. Sets the blob's content type. If specified, this property + is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_type: str + :keyword blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_encoding: str + :keyword blob_content_language: Optional. Set the blob's content language. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_language: str + :keyword blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is + not validated, as the hashes for the individual blocks were validated when each was uploaded. + Default value is None. + :paramtype blob_content_md5: bytes + :keyword blob_cache_control: Optional. Sets the blob's cache control. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_cache_control: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_content_disposition: Optional. Sets the blob's content disposition. If specified, + this property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_disposition: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword tier: The tier to be set on the blob. Known values are: "P4", "P6", "P10", "P15", + "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", and + "Cold". Default value is None. + :paramtype tier: str or ~azure.storage.blobs.models.AccessTier + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword immutability_policy_expiry: Specifies the date time when the blobs immutability policy + is set to expire. Default value is None. + :paramtype immutability_policy_expiry: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword legal_hold: Specified if a legal hold should be set on the blob. Default value is + None. + :paramtype legal_hold: bool + :keyword transactional_content_crc64: Specify the transactional crc64 for the body, to be + validated by the service. Default value is None. + :paramtype transactional_content_crc64: bytes + :keyword structured_body_type: Required if the request body is a structured message. Specifies + the message schema version and properties. Default value is None. + :paramtype structured_body_type: str + :keyword structured_content_length: Required if the request body is a structured message. + Specifies the length of the blob/file content inside the message body. Will always be smaller + than Content-Length. Default value is None. + :paramtype structured_content_length: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + blob_type: Literal["BlockBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "BlockBlob")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = body + + _request = build_block_blob_upload_request( + content_length=content_length, + metadata=metadata, + timeout=timeout, + transactional_content_md5=transactional_content_md5, + blob_content_type=blob_content_type, + blob_content_encoding=blob_content_encoding, + blob_content_language=blob_content_language, + blob_content_md5=blob_content_md5, + blob_cache_control=blob_cache_control, + lease_id=lease_id, + blob_content_disposition=blob_content_disposition, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + tier=tier, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + blob_tags_string=blob_tags_string, + immutability_policy_expiry=immutability_policy_expiry, + immutability_policy_mode=immutability_policy_mode, + legal_hold=legal_hold, + transactional_content_crc64=transactional_content_crc64, + structured_body_type=structured_body_type, + structured_content_length=structured_content_length, + etag=etag, + match_condition=match_condition, + content_type=content_type, + blob_type=blob_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-structured-body"] = self._deserialize( + "str", response.headers.get("x-ms-structured-body") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + @api_version_validation( + params_added_on={ + "2026-04-06": ["source_encryption_key", "source_encryption_key_sha256", "source_encryption_algorithm"] + }, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + def upload_blob_from_url( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + copy_source: str, + metadata: Optional[str] = None, + timeout: Optional[int] = None, + transactional_content_md5: Optional[bytes] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_cache_control: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + source_if_tags: Optional[str] = None, + source_content_md5: Optional[bytes] = None, + blob_tags_string: Optional[str] = None, + copy_source_blob_properties: Optional[bool] = None, + copy_source_authorization: Optional[str] = None, + copy_source_tags: Optional[Union[str, _models.BlobCopySourceTags]] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + source_encryption_key: Optional[str] = None, + source_encryption_key_sha256: Optional[str] = None, + source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Put Blob from URL operation creates a new Block Blob where the contents of the blob are + read from a given URL. This API is supported beginning with the 2020-04-08 version. Partial + updates are not supported with Put Blob from URL; the content of an existing blob is + overwritten with the content of the new blob. To perform partial updates to a block blob’s + contents using a source URL, use the Put Block from URL API in conjunction with Put Block List. + + :keyword copy_source: Specifies the name of the source page blob snapshot. This value is a URL + of up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as + it would appear in a request URI. The source blob must either be public or must be + authenticated via a shared access signature. Required. + :paramtype copy_source: str + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword blob_content_type: Optional. Sets the blob's content type. If specified, this property + is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_type: str + :keyword blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_encoding: str + :keyword blob_content_language: Optional. Set the blob's content language. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_language: str + :keyword blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is + not validated, as the hashes for the individual blocks were validated when each was uploaded. + Default value is None. + :paramtype blob_content_md5: bytes + :keyword blob_cache_control: Optional. Sets the blob's cache control. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_cache_control: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_content_disposition: Optional. Sets the blob's content disposition. If specified, + this property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_disposition: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword tier: The tier to be set on the blob. Known values are: "P4", "P6", "P10", "P15", + "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", and + "Cold". Default value is None. + :paramtype tier: str or ~azure.storage.blobs.models.AccessTier + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword source_if_modified_since: Specify this header value to operate only on a blob if it + has been modified since the specified date/time. Default value is None. + :paramtype source_if_modified_since: ~datetime.datetime + :keyword source_if_unmodified_since: Specify this header value to operate only on a blob if it + has not been modified since the specified date/time. Default value is None. + :paramtype source_if_unmodified_since: ~datetime.datetime + :keyword source_if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype source_if_match: str + :keyword source_if_none_match: Specify this header value to operate only on a blob if it has + been modified since the specified date/time. Default value is None. + :paramtype source_if_none_match: str + :keyword source_if_tags: Specify a SQL where clause on blob tags to operate only on blobs with + a matching value. Default value is None. + :paramtype source_if_tags: str + :keyword source_content_md5: Specify the md5 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_md5: bytes + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword copy_source_blob_properties: Optional, default is true. Indicates if properties from + the source blob should be copied. Default value is None. + :paramtype copy_source_blob_properties: bool + :keyword copy_source_authorization: Only Bearer type is supported. Credentials should be a + valid OAuth access token to copy source. Default value is None. + :paramtype copy_source_authorization: str + :keyword copy_source_tags: Optional, default 'replace'. Indicates if source tags should be + copied or replaced with the tags specified by x-ms-tags. Known values are: "REPLACE" and + "COPY". Default value is None. + :paramtype copy_source_tags: str or ~azure.storage.blobs.models.BlobCopySourceTags + :keyword file_request_intent: Valid value is backup. "backup" Default value is None. + :paramtype file_request_intent: str or ~azure.storage.blobs.models.FileShareTokenIntent + :keyword source_encryption_key: Optional. Specifies the source encryption key to use to encrypt + the source data provided in the request. Default value is None. + :paramtype source_encryption_key: str + :keyword source_encryption_key_sha256: The SHA-256 hash of the provided source encryption key. + Must be provided if the x-ms-source-encryption-key header is provided. Default value is None. + :paramtype source_encryption_key_sha256: str + :keyword source_encryption_algorithm: The algorithm used to produce the source encryption key + hash. Currently, the only accepted value is "AES256". Must be provided if the + x-ms-source-encryption-key is provided. "AES256" Default value is None. + :paramtype source_encryption_algorithm: str or + ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + content_length: Literal[0] = kwargs.pop("content_length", _headers.pop("Content-Length", 0)) + blob_type: Literal["BlockBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "BlockBlob")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_block_blob_upload_blob_from_url_request( + copy_source=copy_source, + metadata=metadata, + timeout=timeout, + transactional_content_md5=transactional_content_md5, + blob_content_type=blob_content_type, + blob_content_encoding=blob_content_encoding, + blob_content_language=blob_content_language, + blob_content_md5=blob_content_md5, + blob_cache_control=blob_cache_control, + lease_id=lease_id, + blob_content_disposition=blob_content_disposition, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + tier=tier, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + source_if_modified_since=source_if_modified_since, + source_if_unmodified_since=source_if_unmodified_since, + source_if_match=source_if_match, + source_if_none_match=source_if_none_match, + source_if_tags=source_if_tags, + source_content_md5=source_content_md5, + blob_tags_string=blob_tags_string, + copy_source_blob_properties=copy_source_blob_properties, + copy_source_authorization=copy_source_authorization, + copy_source_tags=copy_source_tags, + file_request_intent=file_request_intent, + source_encryption_key=source_encryption_key, + source_encryption_key_sha256=source_encryption_key_sha256, + source_encryption_algorithm=source_encryption_algorithm, + etag=etag, + match_condition=match_condition, + content_length=content_length, + blob_type=blob_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def stage_block( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + body: bytes, + *, + block_id: bytes, + content_length: int, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + structured_body_type: Optional[str] = None, + structured_content_length: Optional[int] = None, + **kwargs: Any + ) -> None: + """The Stage Block operation creates a new block to be committed as part of a blob. + + :param body: The body of the request. Required. + :type body: bytes + :keyword block_id: A valid Base64 string value that identifies the block. Prior to encoding, + the string must be less than or equal to 64 bytes in size. For a given blob, the length of the + value specified for the blockid parameter must be the same size for each block. Required. + :paramtype block_id: bytes + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword transactional_content_crc64: Specify the transactional crc64 for the body, to be + validated by the service. Default value is None. + :paramtype transactional_content_crc64: bytes + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword structured_body_type: Required if the request body is a structured message. Specifies + the message schema version and properties. Default value is None. + :paramtype structured_body_type: str + :keyword structured_content_length: Required if the request body is a structured message. + Specifies the length of the blob/file content inside the message body. Will always be smaller + than Content-Length. Default value is None. + :paramtype structured_content_length: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = body + + _request = build_block_blob_stage_block_request( + block_id=block_id, + content_length=content_length, + transactional_content_md5=transactional_content_md5, + transactional_content_crc64=transactional_content_crc64, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + structured_body_type=structured_body_type, + structured_content_length=structured_content_length, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-structured-body"] = self._deserialize( + "str", response.headers.get("x-ms-structured-body") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + @api_version_validation( + params_added_on={ + "2026-04-06": ["source_encryption_key", "source_encryption_key_sha256", "source_encryption_algorithm"] + }, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + def stage_block_from_url( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + *, + block_id: bytes, + content_length: int, + source_url: str, + source_range: Optional[str] = None, + source_content_md5: Optional[bytes] = None, + source_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + lease_id: Optional[str] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + copy_source_authorization: Optional[str] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + source_encryption_key: Optional[str] = None, + source_encryption_key_sha256: Optional[str] = None, + source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + **kwargs: Any + ) -> None: + """The Stage Block From URL operation creates a new block to be committed as part of a blob where + the contents are read from a URL. + + :keyword block_id: A valid Base64 string value that identifies the block. Prior to encoding, + the string must be less than or equal to 64 bytes in size. For a given blob, the length of the + value specified for the blockid parameter must be the same size for each block. Required. + :paramtype block_id: bytes + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword source_url: Specify a URL to the copy source. Required. + :paramtype source_url: str + :keyword source_range: Bytes of source data in the specified range. Default value is None. + :paramtype source_range: str + :keyword source_content_md5: Specify the md5 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_md5: bytes + :keyword source_content_crc64: Specify the crc64 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_crc64: bytes + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword source_if_modified_since: Specify this header value to operate only on a blob if it + has been modified since the specified date/time. Default value is None. + :paramtype source_if_modified_since: ~datetime.datetime + :keyword source_if_unmodified_since: Specify this header value to operate only on a blob if it + has not been modified since the specified date/time. Default value is None. + :paramtype source_if_unmodified_since: ~datetime.datetime + :keyword source_if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype source_if_match: str + :keyword source_if_none_match: Specify this header value to operate only on a blob if it has + been modified since the specified date/time. Default value is None. + :paramtype source_if_none_match: str + :keyword copy_source_authorization: Only Bearer type is supported. Credentials should be a + valid OAuth access token to copy source. Default value is None. + :paramtype copy_source_authorization: str + :keyword file_request_intent: Valid value is backup. "backup" Default value is None. + :paramtype file_request_intent: str or ~azure.storage.blobs.models.FileShareTokenIntent + :keyword source_encryption_key: Optional. Specifies the source encryption key to use to encrypt + the source data provided in the request. Default value is None. + :paramtype source_encryption_key: str + :keyword source_encryption_key_sha256: The SHA-256 hash of the provided source encryption key. + Must be provided if the x-ms-source-encryption-key header is provided. Default value is None. + :paramtype source_encryption_key_sha256: str + :keyword source_encryption_algorithm: The algorithm used to produce the source encryption key + hash. Currently, the only accepted value is "AES256". Must be provided if the + x-ms-source-encryption-key is provided. "AES256" Default value is None. + :paramtype source_encryption_algorithm: str or + ~azure.storage.blobs.models.EncryptionAlgorithmType + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_block_blob_stage_block_from_url_request( + block_id=block_id, + content_length=content_length, + source_url=source_url, + source_range=source_range, + source_content_md5=source_content_md5, + source_content_crc64=source_content_crc64, + timeout=timeout, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + lease_id=lease_id, + source_if_modified_since=source_if_modified_since, + source_if_unmodified_since=source_if_unmodified_since, + source_if_match=source_if_match, + source_if_none_match=source_if_none_match, + copy_source_authorization=copy_source_authorization, + file_request_intent=file_request_intent, + source_encryption_key=source_encryption_key, + source_encryption_key_sha256=source_encryption_key_sha256, + source_encryption_algorithm=source_encryption_algorithm, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def commit_block_list( # pylint: disable=inconsistent-return-statements,too-many-locals + self, + blocks: _models.BlockLookupList, + *, + timeout: Optional[int] = None, + blob_cache_control: Optional[str] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + metadata: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Commit Block List operation writes a blob by specifying the list of block IDs that make up + the blob. In order to be written as part of a blob, a block must have been successfully written + to the server in a prior Put Block operation. You can call Put Block List to update a blob by + uploading only those blocks that have changed, then committing the new and existing blocks + together. You can do this by specifying whether to commit a block from the committed block list + or from the uncommitted block list, or to commit the most recently uploaded version of the + block, whichever list it may belong to. + + :param blocks: Blob Blocks. Required. + :type blocks: ~azure.storage.blobs.models.BlockLookupList + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword blob_cache_control: Optional. Sets the blob's cache control. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_cache_control: str + :keyword blob_content_type: Optional. Sets the blob's content type. If specified, this property + is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_type: str + :keyword blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_encoding: str + :keyword blob_content_language: Optional. Set the blob's content language. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_language: str + :keyword blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is + not validated, as the hashes for the individual blocks were validated when each was uploaded. + Default value is None. + :paramtype blob_content_md5: bytes + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword transactional_content_crc64: Specify the transactional crc64 for the body, to be + validated by the service. Default value is None. + :paramtype transactional_content_crc64: bytes + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_content_disposition: Optional. Sets the blob's content disposition. If specified, + this property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_disposition: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword tier: The tier to be set on the blob. Known values are: "P4", "P6", "P10", "P15", + "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", and + "Cold". Default value is None. + :paramtype tier: str or ~azure.storage.blobs.models.AccessTier + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword immutability_policy_expiry: Specifies the date time when the blobs immutability policy + is set to expire. Default value is None. + :paramtype immutability_policy_expiry: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword legal_hold: Specified if a legal hold should be set on the blob. Default value is + None. + :paramtype legal_hold: bool + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = _get_element(blocks) + + _request = build_block_blob_commit_block_list_request( + timeout=timeout, + blob_cache_control=blob_cache_control, + blob_content_type=blob_content_type, + blob_content_encoding=blob_content_encoding, + blob_content_language=blob_content_language, + blob_content_md5=blob_content_md5, + transactional_content_md5=transactional_content_md5, + transactional_content_crc64=transactional_content_crc64, + metadata=metadata, + lease_id=lease_id, + blob_content_disposition=blob_content_disposition, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + tier=tier, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + blob_tags_string=blob_tags_string, + immutability_policy_expiry=immutability_policy_expiry, + immutability_policy_mode=immutability_policy_mode, + legal_hold=legal_hold, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace + def get_block_list( + self, + *, + list_type: Union[str, _models.BlockListType], + snapshot: Optional[str] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_tags: Optional[str] = None, + **kwargs: Any + ) -> _models.BlockList: + """The Get Block List operation retrieves the list of blocks that have been uploaded as part of a + block blob. + + :keyword list_type: Specifies whether to return the list of committed blocks, the list of + uncommitted blocks, or both lists together. Known values are: "committed", "uncommitted", and + "all". Required. + :paramtype list_type: str or ~azure.storage.blobs.models.BlockListType + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :return: BlockList. The BlockList is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.BlockList + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.BlockList] = kwargs.pop("cls", None) + + _request = build_block_blob_get_block_list_request( + list_type=list_type, + snapshot=snapshot, + timeout=timeout, + lease_id=lease_id, + if_tags=if_tags, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["x-ms-blob-content-length"] = self._deserialize( + "int", response.headers.get("x-ms-blob-content-length") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.BlockList, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def query( # pylint: disable=too-many-locals + self, + query_request: _models.QueryRequest, + *, + snapshot: Optional[str] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> Iterator[bytes]: + """The Query operation enables users to select/project on blob data by providing simple query + expressions. + + :param query_request: The query request. Required. + :type query_request: ~azure.storage.blobs.models.QueryRequest + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: Iterator[bytes] + :rtype: Iterator[bytes] + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + + _content = _get_element(query_request) + + _request = build_block_blob_query_request( + snapshot=snapshot, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", True) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 206]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-meta"] = self._deserialize("str", response.headers.get("x-ms-meta")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) + response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) + response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) + response_headers["Content-Disposition"] = self._deserialize("str", response.headers.get("Content-Disposition")) + response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-copy-completion-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-copy-completion-time") + ) + response_headers["x-ms-copy-status-description"] = self._deserialize( + "str", response.headers.get("x-ms-copy-status-description") + ) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-progress"] = self._deserialize("str", response.headers.get("x-ms-copy-progress")) + response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["x-ms-lease-duration"] = self._deserialize("str", response.headers.get("x-ms-lease-duration")) + response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) + response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) + response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) + response_headers["x-ms-blob-committed-block-count"] = self._deserialize( + "int", response.headers.get("x-ms-blob-committed-block-count") + ) + response_headers["x-ms-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-blob-content-md5"] = self._deserialize( + "bytearray", response.headers.get("x-ms-blob-content-md5") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + deserialized = response.iter_bytes() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_patch.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_operations/_patch.py similarity index 52% rename from sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_patch.py rename to sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_operations/_patch.py index f7dd32510333..87676c65a8f0 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/_patch.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_operations/_patch.py @@ -1,14 +1,15 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------- """Customize generated code here. Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize """ -from typing import List -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + +__all__: list[str] = [] # Add all objects you want publicly available to users at this package level def patch_sdk(): diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_patch.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_patch.py new file mode 100644 index 000000000000..1c2c7be6c971 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_patch.py @@ -0,0 +1,205 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------- +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" + +from typing import Any, TYPE_CHECKING + +from azure.core import PipelineClient +from azure.core.pipeline import PipelineRequest, PipelineResponse +from azure.core.rest import HttpRequest, HttpResponse + +from ._operations import ( + _AppendBlobClientOperationsMixin, + _BlobClientOperationsMixin, + _BlockBlobClientOperationsMixin, + _ContainerClientOperationsMixin, + _PageBlobClientOperationsMixin, + _ServiceClientOperationsMixin, +) +from ._utils.serialization import Deserializer, Serializer + +if TYPE_CHECKING: + from azure.core.credentials import TokenCredential + + +class _ServiceOperationsWrapper(_ServiceClientOperationsMixin): + """Wrapper to provide service operations with shared pipeline client.""" + + def __init__(self, config: Any, client: PipelineClient, serialize: Serializer, deserialize: Deserializer) -> None: + self._config = config + self._client = client + self._serialize = serialize + self._deserialize = deserialize + + # Alias for backward compatibility + def filter_blobs(self, *args: Any, **kwargs: Any) -> Any: + """Alias for find_blobs_by_tags for backward compatibility.""" + return self.find_blobs_by_tags(*args, **kwargs) + + +class _ContainerOperationsWrapper(_ContainerClientOperationsMixin): + """Wrapper to provide container operations with shared pipeline client.""" + + def __init__(self, config: Any, client: PipelineClient, serialize: Serializer, deserialize: Deserializer) -> None: + self._config = config + self._client = client + self._serialize = serialize + self._deserialize = deserialize + + # Alias for backward compatibility + def filter_blobs(self, *args: Any, **kwargs: Any) -> Any: + """Alias for find_blobs_by_tags for backward compatibility.""" + return self.find_blobs_by_tags(*args, **kwargs) + + +class _BlobOperationsWrapper(_BlobClientOperationsMixin): + """Wrapper to provide blob operations with shared pipeline client.""" + + def __init__(self, config: Any, client: PipelineClient, serialize: Serializer, deserialize: Deserializer) -> None: + self._config = config + self._client = client + self._serialize = serialize + self._deserialize = deserialize + + # Aliases for backward compatibility + def set_http_headers(self, *args: Any, **kwargs: Any) -> Any: + """Alias for set_properties for backward compatibility.""" + return self.set_properties(*args, **kwargs) + + def get_account_info(self, *args: Any, **kwargs: Any) -> Any: + """Wrapper for get_account_info - already exists in mixin.""" + return super().get_account_info(*args, **kwargs) + + +class _PageBlobOperationsWrapper(_PageBlobClientOperationsMixin): + """Wrapper to provide page blob operations with shared pipeline client.""" + + def __init__(self, config: Any, client: PipelineClient, serialize: Serializer, deserialize: Deserializer) -> None: + self._config = config + self._client = client + self._serialize = serialize + self._deserialize = deserialize + + # Alias for backward compatibility + def update_sequence_number(self, *args: Any, **kwargs: Any) -> Any: + """Alias for set_sequence_number for backward compatibility.""" + return self.set_sequence_number(*args, **kwargs) + + +class _AppendBlobOperationsWrapper(_AppendBlobClientOperationsMixin): + """Wrapper to provide append blob operations with shared pipeline client.""" + + def __init__(self, config: Any, client: PipelineClient, serialize: Serializer, deserialize: Deserializer) -> None: + self._config = config + self._client = client + self._serialize = serialize + self._deserialize = deserialize + + +class _BlockBlobOperationsWrapper(_BlockBlobClientOperationsMixin): + """Wrapper to provide block blob operations with shared pipeline client.""" + + def __init__(self, config: Any, client: PipelineClient, serialize: Serializer, deserialize: Deserializer) -> None: + self._config = config + self._client = client + self._serialize = serialize + self._deserialize = deserialize + + # Alias for backward compatibility + def put_blob_from_url(self, *args: Any, **kwargs: Any) -> Any: + """Alias for upload_blob_from_url for backward compatibility.""" + return self.upload_blob_from_url(*args, **kwargs) + + +class CombinedBlobClient: + """Combined client that exposes all blob storage operations as attributes. + + This class wraps the individual operation mixins and exposes them as attributes + to maintain backward compatibility with the previous autorest-generated client structure. + + :param url: The host name of the blob storage account. + :type url: str + :param credential: Credential used to authenticate requests to the service. + :type credential: ~azure.core.credentials.TokenCredential + :keyword version: Specifies the version of the operation to use for this request. + :paramtype version: str + """ + + def __init__( + self, + url: str, + credential: "TokenCredential", + *, + base_url: str = None, # type: ignore + pipeline: Any = None, + **kwargs: Any + ) -> None: + from ._configuration import BlobClientConfiguration + + _endpoint = "{url}" + self._config = BlobClientConfiguration(url=url, credential=credential, **kwargs) + + if pipeline is not None: + self._client = PipelineClient(base_url=_endpoint, pipeline=pipeline) + else: + from azure.core.pipeline import policies + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + # Create operation wrappers as attributes + self.service = _ServiceOperationsWrapper(self._config, self._client, self._serialize, self._deserialize) + self.container = _ContainerOperationsWrapper(self._config, self._client, self._serialize, self._deserialize) + self.blob = _BlobOperationsWrapper(self._config, self._client, self._serialize, self._deserialize) + self.page_blob = _PageBlobOperationsWrapper(self._config, self._client, self._serialize, self._deserialize) + self.append_blob = _AppendBlobOperationsWrapper(self._config, self._client, self._serialize, self._deserialize) + self.block_blob = _BlockBlobOperationsWrapper(self._config, self._client, self._serialize, self._deserialize) + + def close(self) -> None: + self._client.close() + + def __enter__(self) -> "CombinedBlobClient": + self._client.__enter__() + return self + + def __exit__(self, *exc_details: Any) -> None: + self._client.__exit__(*exc_details) + + +# Add all objects you want publicly available to users at this package level +__all__: list[str] = ["CombinedBlobClient"] + + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_utils/__init__.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_utils/__init__.py similarity index 86% rename from sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_utils/__init__.py rename to sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_utils/__init__.py index 0af9b28f6607..8026245c2abc 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_utils/__init__.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_utils/__init__.py @@ -1,6 +1,6 @@ # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. +# Code generated by Microsoft (R) Python Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_utils/model_base.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_utils/model_base.py new file mode 100644 index 000000000000..5e1a2d0fa5ec --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_utils/model_base.py @@ -0,0 +1,1356 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=protected-access, broad-except + +import copy +import calendar +import decimal +import functools +import sys +import logging +import base64 +import re +import typing +import enum +import email.utils +from datetime import datetime, date, time, timedelta, timezone +from json import JSONEncoder +import xml.etree.ElementTree as ET +from collections.abc import MutableMapping +from typing_extensions import Self +import isodate +from azure.core.exceptions import DeserializationError +from azure.core import CaseInsensitiveEnumMeta +from azure.core.pipeline import PipelineResponse +from azure.core.serialization import _Null +from azure.core.rest import HttpResponse + +_LOGGER = logging.getLogger(__name__) + +__all__ = ["SdkJSONEncoder", "Model", "rest_field", "rest_discriminator"] + +TZ_UTC = timezone.utc +_T = typing.TypeVar("_T") +_NONE_TYPE = type(None) + + +def _timedelta_as_isostr(td: timedelta) -> str: + """Converts a datetime.timedelta object into an ISO 8601 formatted string, e.g. 'P4DT12H30M05S' + + Function adapted from the Tin Can Python project: https://github.com/RusticiSoftware/TinCanPython + + :param timedelta td: The timedelta to convert + :rtype: str + :return: ISO8601 version of this timedelta + """ + + # Split seconds to larger units + seconds = td.total_seconds() + minutes, seconds = divmod(seconds, 60) + hours, minutes = divmod(minutes, 60) + days, hours = divmod(hours, 24) + + days, hours, minutes = list(map(int, (days, hours, minutes))) + seconds = round(seconds, 6) + + # Build date + date_str = "" + if days: + date_str = "%sD" % days + + if hours or minutes or seconds: + # Build time + time_str = "T" + + # Hours + bigger_exists = date_str or hours + if bigger_exists: + time_str += "{:02}H".format(hours) + + # Minutes + bigger_exists = bigger_exists or minutes + if bigger_exists: + time_str += "{:02}M".format(minutes) + + # Seconds + try: + if seconds.is_integer(): + seconds_string = "{:02}".format(int(seconds)) + else: + # 9 chars long w/ leading 0, 6 digits after decimal + seconds_string = "%09.6f" % seconds + # Remove trailing zeros + seconds_string = seconds_string.rstrip("0") + except AttributeError: # int.is_integer() raises + seconds_string = "{:02}".format(seconds) + + time_str += "{}S".format(seconds_string) + else: + time_str = "" + + return "P" + date_str + time_str + + +def _serialize_bytes(o, format: typing.Optional[str] = None) -> str: + encoded = base64.b64encode(o).decode() + if format == "base64url": + return encoded.strip("=").replace("+", "-").replace("/", "_") + return encoded + + +def _serialize_datetime(o, format: typing.Optional[str] = None): + if hasattr(o, "year") and hasattr(o, "hour"): + if format == "rfc7231": + return email.utils.format_datetime(o, usegmt=True) + if format == "unix-timestamp": + return int(calendar.timegm(o.utctimetuple())) + + # astimezone() fails for naive times in Python 2.7, so make make sure o is aware (tzinfo is set) + if not o.tzinfo: + iso_formatted = o.replace(tzinfo=TZ_UTC).isoformat() + else: + iso_formatted = o.astimezone(TZ_UTC).isoformat() + # Replace the trailing "+00:00" UTC offset with "Z" (RFC 3339: https://www.ietf.org/rfc/rfc3339.txt) + return iso_formatted.replace("+00:00", "Z") + # Next try datetime.date or datetime.time + return o.isoformat() + + +def _is_readonly(p): + try: + return p._visibility == ["read"] + except AttributeError: + return False + + +class SdkJSONEncoder(JSONEncoder): + """A JSON encoder that's capable of serializing datetime objects and bytes.""" + + def __init__(self, *args, exclude_readonly: bool = False, format: typing.Optional[str] = None, **kwargs): + super().__init__(*args, **kwargs) + self.exclude_readonly = exclude_readonly + self.format = format + + def default(self, o): # pylint: disable=too-many-return-statements + if _is_model(o): + if self.exclude_readonly: + readonly_props = [p._rest_name for p in o._attr_to_rest_field.values() if _is_readonly(p)] + return {k: v for k, v in o.items() if k not in readonly_props} + return dict(o.items()) + try: + return super(SdkJSONEncoder, self).default(o) + except TypeError: + if isinstance(o, _Null): + return None + if isinstance(o, decimal.Decimal): + return float(o) + if isinstance(o, (bytes, bytearray)): + return _serialize_bytes(o, self.format) + try: + # First try datetime.datetime + return _serialize_datetime(o, self.format) + except AttributeError: + pass + # Last, try datetime.timedelta + try: + return _timedelta_as_isostr(o) + except AttributeError: + # This will be raised when it hits value.total_seconds in the method above + pass + return super(SdkJSONEncoder, self).default(o) + + +_VALID_DATE = re.compile(r"\d{4}[-]\d{2}[-]\d{2}T\d{2}:\d{2}:\d{2}" + r"\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") +_VALID_RFC7231 = re.compile( + r"(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{2}\s" + r"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT" +) + +_ARRAY_ENCODE_MAPPING = { + "pipeDelimited": "|", + "spaceDelimited": " ", + "commaDelimited": ",", + "newlineDelimited": "\n", +} + + +def _deserialize_array_encoded(delimit: str, attr): + if isinstance(attr, str): + if attr == "": + return [] + return attr.split(delimit) + return attr + + +def _deserialize_datetime(attr: typing.Union[str, datetime]) -> datetime: + """Deserialize ISO-8601 formatted string into Datetime object. + + :param str attr: response string to be deserialized. + :rtype: ~datetime.datetime + :returns: The datetime object from that input + """ + if isinstance(attr, datetime): + # i'm already deserialized + return attr + attr = attr.upper() + match = _VALID_DATE.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + return date_obj # type: ignore[no-any-return] + + +def _deserialize_datetime_rfc7231(attr: typing.Union[str, datetime]) -> datetime: + """Deserialize RFC7231 formatted string into Datetime object. + + :param str attr: response string to be deserialized. + :rtype: ~datetime.datetime + :returns: The datetime object from that input + """ + if isinstance(attr, datetime): + # i'm already deserialized + return attr + match = _VALID_RFC7231.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + return email.utils.parsedate_to_datetime(attr) + + +def _deserialize_datetime_unix_timestamp(attr: typing.Union[float, datetime]) -> datetime: + """Deserialize unix timestamp into Datetime object. + + :param str attr: response string to be deserialized. + :rtype: ~datetime.datetime + :returns: The datetime object from that input + """ + if isinstance(attr, datetime): + # i'm already deserialized + return attr + return datetime.fromtimestamp(attr, TZ_UTC) + + +def _deserialize_date(attr: typing.Union[str, date]) -> date: + """Deserialize ISO-8601 formatted string into Date object. + :param str attr: response string to be deserialized. + :rtype: date + :returns: The date object from that input + """ + # This must NOT use defaultmonth/defaultday. Using None ensure this raises an exception. + if isinstance(attr, date): + return attr + return isodate.parse_date(attr, defaultmonth=None, defaultday=None) # type: ignore + + +def _deserialize_time(attr: typing.Union[str, time]) -> time: + """Deserialize ISO-8601 formatted string into time object. + + :param str attr: response string to be deserialized. + :rtype: datetime.time + :returns: The time object from that input + """ + if isinstance(attr, time): + return attr + return isodate.parse_time(attr) # type: ignore[no-any-return] + + +def _deserialize_bytes(attr): + if isinstance(attr, (bytes, bytearray)): + return attr + return bytes(base64.b64decode(attr)) + + +def _deserialize_bytes_base64(attr): + if isinstance(attr, (bytes, bytearray)): + return attr + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return bytes(base64.b64decode(encoded)) + + +def _deserialize_duration(attr): + if isinstance(attr, timedelta): + return attr + return isodate.parse_duration(attr) + + +def _deserialize_decimal(attr): + if isinstance(attr, decimal.Decimal): + return attr + return decimal.Decimal(str(attr)) + + +def _deserialize_int_as_str(attr): + if isinstance(attr, int): + return attr + return int(attr) + + +_DESERIALIZE_MAPPING = { + datetime: _deserialize_datetime, + date: _deserialize_date, + time: _deserialize_time, + bytes: _deserialize_bytes, + bytearray: _deserialize_bytes, + timedelta: _deserialize_duration, + typing.Any: lambda x: x, + decimal.Decimal: _deserialize_decimal, +} + +_DESERIALIZE_MAPPING_WITHFORMAT = { + "rfc3339": _deserialize_datetime, + "rfc7231": _deserialize_datetime_rfc7231, + "unix-timestamp": _deserialize_datetime_unix_timestamp, + "base64": _deserialize_bytes, + "base64url": _deserialize_bytes_base64, +} + + +def get_deserializer(annotation: typing.Any, rf: typing.Optional["_RestField"] = None): + if annotation is int and rf and rf._format == "str": + return _deserialize_int_as_str + if annotation is str and rf and rf._format in _ARRAY_ENCODE_MAPPING: + return functools.partial(_deserialize_array_encoded, _ARRAY_ENCODE_MAPPING[rf._format]) + if rf and rf._format: + return _DESERIALIZE_MAPPING_WITHFORMAT.get(rf._format) + return _DESERIALIZE_MAPPING.get(annotation) # pyright: ignore + + +def _get_type_alias_type(module_name: str, alias_name: str): + types = { + k: v + for k, v in sys.modules[module_name].__dict__.items() + if isinstance(v, typing._GenericAlias) # type: ignore + } + if alias_name not in types: + return alias_name + return types[alias_name] + + +def _get_model(module_name: str, model_name: str): + models = {k: v for k, v in sys.modules[module_name].__dict__.items() if isinstance(v, type)} + module_end = module_name.rsplit(".", 1)[0] + models.update({k: v for k, v in sys.modules[module_end].__dict__.items() if isinstance(v, type)}) + if isinstance(model_name, str): + model_name = model_name.split(".")[-1] + if model_name not in models: + return model_name + return models[model_name] + + +_UNSET = object() + + +class _MyMutableMapping(MutableMapping[str, typing.Any]): + def __init__(self, data: dict[str, typing.Any]) -> None: + self._data = data + + def __contains__(self, key: typing.Any) -> bool: + return key in self._data + + def __getitem__(self, key: str) -> typing.Any: + # If this key has been deserialized (for mutable types), we need to handle serialization + if hasattr(self, "_attr_to_rest_field"): + cache_attr = f"_deserialized_{key}" + if hasattr(self, cache_attr): + rf = _get_rest_field(getattr(self, "_attr_to_rest_field"), key) + if rf: + value = self._data.get(key) + if isinstance(value, (dict, list, set)): + # For mutable types, serialize and return + # But also update _data with serialized form and clear flag + # so mutations via this returned value affect _data + serialized = _serialize(value, rf._format) + # If serialized form is same type (no transformation needed), + # return _data directly so mutations work + if isinstance(serialized, type(value)) and serialized == value: + return self._data.get(key) + # Otherwise return serialized copy and clear flag + try: + object.__delattr__(self, cache_attr) + except AttributeError: + pass + # Store serialized form back + self._data[key] = serialized + return serialized + return self._data.__getitem__(key) + + def __setitem__(self, key: str, value: typing.Any) -> None: + # Clear any cached deserialized value when setting through dictionary access + cache_attr = f"_deserialized_{key}" + try: + object.__delattr__(self, cache_attr) + except AttributeError: + pass + self._data.__setitem__(key, value) + + def __delitem__(self, key: str) -> None: + self._data.__delitem__(key) + + def __iter__(self) -> typing.Iterator[typing.Any]: + return self._data.__iter__() + + def __len__(self) -> int: + return self._data.__len__() + + def __ne__(self, other: typing.Any) -> bool: + return not self.__eq__(other) + + def keys(self) -> typing.KeysView[str]: + """ + :returns: a set-like object providing a view on D's keys + :rtype: ~typing.KeysView + """ + return self._data.keys() + + def values(self) -> typing.ValuesView[typing.Any]: + """ + :returns: an object providing a view on D's values + :rtype: ~typing.ValuesView + """ + return self._data.values() + + def items(self) -> typing.ItemsView[str, typing.Any]: + """ + :returns: set-like object providing a view on D's items + :rtype: ~typing.ItemsView + """ + return self._data.items() + + def get(self, key: str, default: typing.Any = None) -> typing.Any: + """ + Get the value for key if key is in the dictionary, else default. + :param str key: The key to look up. + :param any default: The value to return if key is not in the dictionary. Defaults to None + :returns: D[k] if k in D, else d. + :rtype: any + """ + try: + return self[key] + except KeyError: + return default + + @typing.overload + def pop(self, key: str) -> typing.Any: ... # pylint: disable=arguments-differ + + @typing.overload + def pop(self, key: str, default: _T) -> _T: ... # pylint: disable=signature-differs + + @typing.overload + def pop(self, key: str, default: typing.Any) -> typing.Any: ... # pylint: disable=signature-differs + + def pop(self, key: str, default: typing.Any = _UNSET) -> typing.Any: + """ + Removes specified key and return the corresponding value. + :param str key: The key to pop. + :param any default: The value to return if key is not in the dictionary + :returns: The value corresponding to the key. + :rtype: any + :raises KeyError: If key is not found and default is not given. + """ + if default is _UNSET: + return self._data.pop(key) + return self._data.pop(key, default) + + def popitem(self) -> tuple[str, typing.Any]: + """ + Removes and returns some (key, value) pair + :returns: The (key, value) pair. + :rtype: tuple + :raises KeyError: if D is empty. + """ + return self._data.popitem() + + def clear(self) -> None: + """ + Remove all items from D. + """ + self._data.clear() + + def update(self, *args: typing.Any, **kwargs: typing.Any) -> None: # pylint: disable=arguments-differ + """ + Updates D from mapping/iterable E and F. + :param any args: Either a mapping object or an iterable of key-value pairs. + """ + self._data.update(*args, **kwargs) + + @typing.overload + def setdefault(self, key: str, default: None = None) -> None: ... + + @typing.overload + def setdefault(self, key: str, default: typing.Any) -> typing.Any: ... # pylint: disable=signature-differs + + def setdefault(self, key: str, default: typing.Any = _UNSET) -> typing.Any: + """ + Same as calling D.get(k, d), and setting D[k]=d if k not found + :param str key: The key to look up. + :param any default: The value to set if key is not in the dictionary + :returns: D[k] if k in D, else d. + :rtype: any + """ + if default is _UNSET: + return self._data.setdefault(key) + return self._data.setdefault(key, default) + + def __eq__(self, other: typing.Any) -> bool: + try: + other_model = self.__class__(other) + except Exception: + return False + return self._data == other_model._data + + def __repr__(self) -> str: + return str(self._data) + + +def _is_model(obj: typing.Any) -> bool: + return getattr(obj, "_is_model", False) + + +def _serialize(o, format: typing.Optional[str] = None): # pylint: disable=too-many-return-statements + if isinstance(o, list): + if format in _ARRAY_ENCODE_MAPPING and all(isinstance(x, str) for x in o): + return _ARRAY_ENCODE_MAPPING[format].join(o) + return [_serialize(x, format) for x in o] + if isinstance(o, dict): + return {k: _serialize(v, format) for k, v in o.items()} + if isinstance(o, set): + return {_serialize(x, format) for x in o} + if isinstance(o, tuple): + return tuple(_serialize(x, format) for x in o) + if isinstance(o, (bytes, bytearray)): + return _serialize_bytes(o, format) + if isinstance(o, decimal.Decimal): + return float(o) + if isinstance(o, enum.Enum): + return o.value + if isinstance(o, int): + if format == "str": + return str(o) + return o + try: + # First try datetime.datetime + return _serialize_datetime(o, format) + except AttributeError: + pass + # Last, try datetime.timedelta + try: + return _timedelta_as_isostr(o) + except AttributeError: + # This will be raised when it hits value.total_seconds in the method above + pass + return o + + +def _get_rest_field(attr_to_rest_field: dict[str, "_RestField"], rest_name: str) -> typing.Optional["_RestField"]: + try: + return next(rf for rf in attr_to_rest_field.values() if rf._rest_name == rest_name) + except StopIteration: + return None + + +def _create_value(rf: typing.Optional["_RestField"], value: typing.Any) -> typing.Any: + if not rf: + return _serialize(value, None) + if rf._is_multipart_file_input: + return value + if rf._is_model: + return _deserialize(rf._type, value) + if isinstance(value, ET.Element): + value = _deserialize(rf._type, value) + return _serialize(value, rf._format) + + +class Model(_MyMutableMapping): + _is_model = True + # label whether current class's _attr_to_rest_field has been calculated + # could not see _attr_to_rest_field directly because subclass inherits it from parent class + _calculated: set[str] = set() + + def __init__(self, *args: typing.Any, **kwargs: typing.Any) -> None: + class_name = self.__class__.__name__ + if len(args) > 1: + raise TypeError(f"{class_name}.__init__() takes 2 positional arguments but {len(args) + 1} were given") + dict_to_pass = { + rest_field._rest_name: rest_field._default + for rest_field in self._attr_to_rest_field.values() + if rest_field._default is not _UNSET + } + if args: # pylint: disable=too-many-nested-blocks + if isinstance(args[0], ET.Element): + existed_attr_keys = [] + model_meta = getattr(self, "_xml", {}) + + for rf in self._attr_to_rest_field.values(): + prop_meta = getattr(rf, "_xml", {}) + xml_name = prop_meta.get("name", rf._rest_name) + xml_ns = prop_meta.get("ns", model_meta.get("ns", None)) + if xml_ns: + xml_name = "{" + xml_ns + "}" + xml_name + + # attribute + if prop_meta.get("attribute", False) and args[0].get(xml_name) is not None: + existed_attr_keys.append(xml_name) + dict_to_pass[rf._rest_name] = _deserialize(rf._type, args[0].get(xml_name)) + continue + + # unwrapped element is array + if prop_meta.get("unwrapped", False): + # unwrapped array could either use prop items meta/prop meta + if prop_meta.get("itemsName"): + xml_name = prop_meta.get("itemsName") + xml_ns = prop_meta.get("itemNs") + if xml_ns: + xml_name = "{" + xml_ns + "}" + xml_name + items = args[0].findall(xml_name) # pyright: ignore + if len(items) > 0: + existed_attr_keys.append(xml_name) + dict_to_pass[rf._rest_name] = _deserialize(rf._type, items) + continue + + # text element is primitive type + if prop_meta.get("text", False): + if args[0].text is not None: + dict_to_pass[rf._rest_name] = _deserialize(rf._type, args[0].text) + continue + + # wrapped element could be normal property or array, it should only have one element + item = args[0].find(xml_name) + if item is not None: + existed_attr_keys.append(xml_name) + dict_to_pass[rf._rest_name] = _deserialize(rf._type, item) + + # rest thing is additional properties + for e in args[0]: + if e.tag not in existed_attr_keys: + dict_to_pass[e.tag] = _convert_element(e) + else: + dict_to_pass.update( + {k: _create_value(_get_rest_field(self._attr_to_rest_field, k), v) for k, v in args[0].items()} + ) + else: + non_attr_kwargs = [k for k in kwargs if k not in self._attr_to_rest_field] + if non_attr_kwargs: + # actual type errors only throw the first wrong keyword arg they see, so following that. + raise TypeError(f"{class_name}.__init__() got an unexpected keyword argument '{non_attr_kwargs[0]}'") + dict_to_pass.update( + { + self._attr_to_rest_field[k]._rest_name: _create_value(self._attr_to_rest_field[k], v) + for k, v in kwargs.items() + if v is not None + } + ) + super().__init__(dict_to_pass) + + def copy(self) -> "Model": + return Model(self.__dict__) + + def __new__(cls, *args: typing.Any, **kwargs: typing.Any) -> Self: + if f"{cls.__module__}.{cls.__qualname__}" not in cls._calculated: + # we know the last nine classes in mro are going to be 'Model', '_MyMutableMapping', 'MutableMapping', + # 'Mapping', 'Collection', 'Sized', 'Iterable', 'Container' and 'object' + mros = cls.__mro__[:-9][::-1] # ignore parents, and reverse the mro order + attr_to_rest_field: dict[str, _RestField] = { # map attribute name to rest_field property + k: v for mro_class in mros for k, v in mro_class.__dict__.items() if k[0] != "_" and hasattr(v, "_type") + } + annotations = { + k: v + for mro_class in mros + if hasattr(mro_class, "__annotations__") + for k, v in mro_class.__annotations__.items() + } + for attr, rf in attr_to_rest_field.items(): + rf._module = cls.__module__ + if not rf._type: + rf._type = rf._get_deserialize_callable_from_annotation(annotations.get(attr, None)) + if not rf._rest_name_input: + rf._rest_name_input = attr + cls._attr_to_rest_field: dict[str, _RestField] = dict(attr_to_rest_field.items()) + cls._backcompat_attr_to_rest_field: dict[str, _RestField] = { + Model._get_backcompat_attribute_name(cls._attr_to_rest_field, attr): rf + for attr, rf in cls._attr_to_rest_field.items() + } + cls._calculated.add(f"{cls.__module__}.{cls.__qualname__}") + + return super().__new__(cls) + + def __init_subclass__(cls, discriminator: typing.Optional[str] = None) -> None: + for base in cls.__bases__: + if hasattr(base, "__mapping__"): + base.__mapping__[discriminator or cls.__name__] = cls # type: ignore + + @classmethod + def _get_backcompat_attribute_name(cls, attr_to_rest_field: dict[str, "_RestField"], attr_name: str) -> str: + rest_field_obj = attr_to_rest_field.get(attr_name) # pylint: disable=protected-access + if rest_field_obj is None: + return attr_name + original_tsp_name = getattr(rest_field_obj, "_original_tsp_name", None) # pylint: disable=protected-access + if original_tsp_name: + return original_tsp_name + return attr_name + + @classmethod + def _get_discriminator(cls, exist_discriminators) -> typing.Optional["_RestField"]: + for v in cls.__dict__.values(): + if isinstance(v, _RestField) and v._is_discriminator and v._rest_name not in exist_discriminators: + return v + return None + + @classmethod + def _deserialize(cls, data, exist_discriminators): + if not hasattr(cls, "__mapping__"): + return cls(data) + discriminator = cls._get_discriminator(exist_discriminators) + if discriminator is None: + return cls(data) + exist_discriminators.append(discriminator._rest_name) + if isinstance(data, ET.Element): + model_meta = getattr(cls, "_xml", {}) + prop_meta = getattr(discriminator, "_xml", {}) + xml_name = prop_meta.get("name", discriminator._rest_name) + xml_ns = prop_meta.get("ns", model_meta.get("ns", None)) + if xml_ns: + xml_name = "{" + xml_ns + "}" + xml_name + + if data.get(xml_name) is not None: + discriminator_value = data.get(xml_name) + else: + discriminator_value = data.find(xml_name).text # pyright: ignore + else: + discriminator_value = data.get(discriminator._rest_name) + mapped_cls = cls.__mapping__.get(discriminator_value, cls) # pyright: ignore # pylint: disable=no-member + return mapped_cls._deserialize(data, exist_discriminators) + + def as_dict(self, *, exclude_readonly: bool = False) -> dict[str, typing.Any]: + """Return a dict that can be turned into json using json.dump. + + :keyword bool exclude_readonly: Whether to remove the readonly properties. + :returns: A dict JSON compatible object + :rtype: dict + """ + + result = {} + readonly_props = [] + if exclude_readonly: + readonly_props = [p._rest_name for p in self._attr_to_rest_field.values() if _is_readonly(p)] + for k, v in self.items(): + if exclude_readonly and k in readonly_props: # pyright: ignore + continue + is_multipart_file_input = False + try: + is_multipart_file_input = next( + rf for rf in self._attr_to_rest_field.values() if rf._rest_name == k + )._is_multipart_file_input + except StopIteration: + pass + result[k] = v if is_multipart_file_input else Model._as_dict_value(v, exclude_readonly=exclude_readonly) + return result + + @staticmethod + def _as_dict_value(v: typing.Any, exclude_readonly: bool = False) -> typing.Any: + if v is None or isinstance(v, _Null): + return None + if isinstance(v, (list, tuple, set)): + return type(v)(Model._as_dict_value(x, exclude_readonly=exclude_readonly) for x in v) + if isinstance(v, dict): + return {dk: Model._as_dict_value(dv, exclude_readonly=exclude_readonly) for dk, dv in v.items()} + return v.as_dict(exclude_readonly=exclude_readonly) if hasattr(v, "as_dict") else v + + +def _deserialize_model(model_deserializer: typing.Optional[typing.Callable], obj): + if _is_model(obj): + return obj + return _deserialize(model_deserializer, obj) + + +def _deserialize_with_optional(if_obj_deserializer: typing.Optional[typing.Callable], obj): + if obj is None: + return obj + return _deserialize_with_callable(if_obj_deserializer, obj) + + +def _deserialize_with_union(deserializers, obj): + for deserializer in deserializers: + try: + return _deserialize(deserializer, obj) + except DeserializationError: + pass + raise DeserializationError() + + +def _deserialize_dict( + value_deserializer: typing.Optional[typing.Callable], + module: typing.Optional[str], + obj: dict[typing.Any, typing.Any], +): + if obj is None: + return obj + if isinstance(obj, ET.Element): + obj = {child.tag: child for child in obj} + return {k: _deserialize(value_deserializer, v, module) for k, v in obj.items()} + + +def _deserialize_multiple_sequence( + entry_deserializers: list[typing.Optional[typing.Callable]], + module: typing.Optional[str], + obj, +): + if obj is None: + return obj + return type(obj)(_deserialize(deserializer, entry, module) for entry, deserializer in zip(obj, entry_deserializers)) + + +def _is_array_encoded_deserializer(deserializer: functools.partial) -> bool: + return ( + isinstance(deserializer, functools.partial) + and isinstance(deserializer.args[0], functools.partial) + and deserializer.args[0].func == _deserialize_array_encoded # pylint: disable=comparison-with-callable + ) + + +def _deserialize_sequence( + deserializer: typing.Optional[typing.Callable], + module: typing.Optional[str], + obj, +): + if obj is None: + return obj + if isinstance(obj, ET.Element): + obj = list(obj) + + # encoded string may be deserialized to sequence + if isinstance(obj, str) and isinstance(deserializer, functools.partial): + # for list[str] + if _is_array_encoded_deserializer(deserializer): + return deserializer(obj) + + # for list[Union[...]] + if isinstance(deserializer.args[0], list): + for sub_deserializer in deserializer.args[0]: + if _is_array_encoded_deserializer(sub_deserializer): + return sub_deserializer(obj) + + return type(obj)(_deserialize(deserializer, entry, module) for entry in obj) + + +def _sorted_annotations(types: list[typing.Any]) -> list[typing.Any]: + return sorted( + types, + key=lambda x: hasattr(x, "__name__") and x.__name__.lower() in ("str", "float", "int", "bool"), + ) + + +def _get_deserialize_callable_from_annotation( # pylint: disable=too-many-return-statements, too-many-statements, too-many-branches + annotation: typing.Any, + module: typing.Optional[str], + rf: typing.Optional["_RestField"] = None, +) -> typing.Optional[typing.Callable[[typing.Any], typing.Any]]: + if not annotation: + return None + + # is it a type alias? + if isinstance(annotation, str): + if module is not None: + annotation = _get_type_alias_type(module, annotation) + + # is it a forward ref / in quotes? + if isinstance(annotation, (str, typing.ForwardRef)): + try: + model_name = annotation.__forward_arg__ # type: ignore + except AttributeError: + model_name = annotation + if module is not None: + annotation = _get_model(module, model_name) # type: ignore + + try: + if module and _is_model(annotation): + if rf: + rf._is_model = True + + return functools.partial(_deserialize_model, annotation) # pyright: ignore + except Exception: + pass + + # is it a literal? + try: + if annotation.__origin__ is typing.Literal: # pyright: ignore + return None + except AttributeError: + pass + + # is it optional? + try: + if any(a is _NONE_TYPE for a in annotation.__args__): # pyright: ignore + if len(annotation.__args__) <= 2: # pyright: ignore + if_obj_deserializer = _get_deserialize_callable_from_annotation( + next(a for a in annotation.__args__ if a is not _NONE_TYPE), module, rf # pyright: ignore + ) + + return functools.partial(_deserialize_with_optional, if_obj_deserializer) + # the type is Optional[Union[...]], we need to remove the None type from the Union + annotation_copy = copy.copy(annotation) + annotation_copy.__args__ = [a for a in annotation_copy.__args__ if a is not _NONE_TYPE] # pyright: ignore + return _get_deserialize_callable_from_annotation(annotation_copy, module, rf) + except AttributeError: + pass + + # is it union? + if getattr(annotation, "__origin__", None) is typing.Union: + # initial ordering is we make `string` the last deserialization option, because it is often them most generic + deserializers = [ + _get_deserialize_callable_from_annotation(arg, module, rf) + for arg in _sorted_annotations(annotation.__args__) # pyright: ignore + ] + + return functools.partial(_deserialize_with_union, deserializers) + + try: + annotation_name = ( + annotation.__name__ if hasattr(annotation, "__name__") else annotation._name # pyright: ignore + ) + if annotation_name.lower() == "dict": + value_deserializer = _get_deserialize_callable_from_annotation( + annotation.__args__[1], module, rf # pyright: ignore + ) + + return functools.partial( + _deserialize_dict, + value_deserializer, + module, + ) + except (AttributeError, IndexError): + pass + try: + annotation_name = ( + annotation.__name__ if hasattr(annotation, "__name__") else annotation._name # pyright: ignore + ) + if annotation_name.lower() in ["list", "set", "tuple", "sequence"]: + if len(annotation.__args__) > 1: # pyright: ignore + entry_deserializers = [ + _get_deserialize_callable_from_annotation(dt, module, rf) + for dt in annotation.__args__ # pyright: ignore + ] + return functools.partial(_deserialize_multiple_sequence, entry_deserializers, module) + deserializer = _get_deserialize_callable_from_annotation( + annotation.__args__[0], module, rf # pyright: ignore + ) + + return functools.partial(_deserialize_sequence, deserializer, module) + except (TypeError, IndexError, AttributeError, SyntaxError): + pass + + def _deserialize_default( + deserializer, + obj, + ): + if obj is None: + return obj + try: + return _deserialize_with_callable(deserializer, obj) + except Exception: + pass + return obj + + if get_deserializer(annotation, rf): + return functools.partial(_deserialize_default, get_deserializer(annotation, rf)) + + return functools.partial(_deserialize_default, annotation) + + +def _deserialize_with_callable( + deserializer: typing.Optional[typing.Callable[[typing.Any], typing.Any]], + value: typing.Any, +): # pylint: disable=too-many-return-statements + try: + if value is None or isinstance(value, _Null): + return None + if isinstance(value, ET.Element): + if deserializer is str: + return value.text or "" + if deserializer is int: + return int(value.text) if value.text else None + if deserializer is float: + return float(value.text) if value.text else None + if deserializer is bool: + return value.text == "true" if value.text else None + if deserializer is None: + return value + if deserializer in [int, float, bool]: + return deserializer(value) + if isinstance(deserializer, CaseInsensitiveEnumMeta): + try: + return deserializer(value) + except ValueError: + # for unknown value, return raw value + return value + if isinstance(deserializer, type) and issubclass(deserializer, Model): + return deserializer._deserialize(value, []) + return typing.cast(typing.Callable[[typing.Any], typing.Any], deserializer)(value) + except Exception as e: + raise DeserializationError() from e + + +def _deserialize( + deserializer: typing.Any, + value: typing.Any, + module: typing.Optional[str] = None, + rf: typing.Optional["_RestField"] = None, + format: typing.Optional[str] = None, +) -> typing.Any: + if isinstance(value, PipelineResponse): + value = value.http_response.json() + if rf is None and format: + rf = _RestField(format=format) + if not isinstance(deserializer, functools.partial): + deserializer = _get_deserialize_callable_from_annotation(deserializer, module, rf) + return _deserialize_with_callable(deserializer, value) + + +def _failsafe_deserialize( + deserializer: typing.Any, + response: HttpResponse, + module: typing.Optional[str] = None, + rf: typing.Optional["_RestField"] = None, + format: typing.Optional[str] = None, +) -> typing.Any: + try: + return _deserialize(deserializer, response.json(), module, rf, format) + except DeserializationError: + _LOGGER.warning( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + +def _failsafe_deserialize_xml( + deserializer: typing.Any, + response: HttpResponse, +) -> typing.Any: + try: + return _deserialize_xml(deserializer, response.text()) + except DeserializationError: + _LOGGER.warning( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + +# pylint: disable=too-many-instance-attributes +class _RestField: + def __init__( + self, + *, + name: typing.Optional[str] = None, + type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin + is_discriminator: bool = False, + visibility: typing.Optional[list[str]] = None, + default: typing.Any = _UNSET, + format: typing.Optional[str] = None, + is_multipart_file_input: bool = False, + xml: typing.Optional[dict[str, typing.Any]] = None, + original_tsp_name: typing.Optional[str] = None, + ): + self._type = type + self._rest_name_input = name + self._module: typing.Optional[str] = None + self._is_discriminator = is_discriminator + self._visibility = visibility + self._is_model = False + self._default = default + self._format = format + self._is_multipart_file_input = is_multipart_file_input + self._xml = xml if xml is not None else {} + self._original_tsp_name = original_tsp_name + + @property + def _class_type(self) -> typing.Any: + result = getattr(self._type, "args", [None])[0] + # type may be wrapped by nested functools.partial so we need to check for that + if isinstance(result, functools.partial): + return getattr(result, "args", [None])[0] + return result + + @property + def _rest_name(self) -> str: + if self._rest_name_input is None: + raise ValueError("Rest name was never set") + return self._rest_name_input + + def __get__(self, obj: Model, type=None): # pylint: disable=redefined-builtin + # by this point, type and rest_name will have a value bc we default + # them in __new__ of the Model class + # Use _data.get() directly to avoid triggering __getitem__ which clears the cache + item = obj._data.get(self._rest_name) + if item is None: + return item + if self._is_model: + return item + + # For mutable types, we want mutations to directly affect _data + # Check if we've already deserialized this value + cache_attr = f"_deserialized_{self._rest_name}" + if hasattr(obj, cache_attr): + # Return the value from _data directly (it's been deserialized in place) + return obj._data.get(self._rest_name) + + deserialized = _deserialize(self._type, _serialize(item, self._format), rf=self) + + # For mutable types, store the deserialized value back in _data + # so mutations directly affect _data + if isinstance(deserialized, (dict, list, set)): + obj._data[self._rest_name] = deserialized + object.__setattr__(obj, cache_attr, True) # Mark as deserialized + return deserialized + + return deserialized + + def __set__(self, obj: Model, value) -> None: + # Clear the cached deserialized object when setting a new value + cache_attr = f"_deserialized_{self._rest_name}" + if hasattr(obj, cache_attr): + object.__delattr__(obj, cache_attr) + + if value is None: + # we want to wipe out entries if users set attr to None + try: + obj.__delitem__(self._rest_name) + except KeyError: + pass + return + if self._is_model: + if not _is_model(value): + value = _deserialize(self._type, value) + obj.__setitem__(self._rest_name, value) + return + obj.__setitem__(self._rest_name, _serialize(value, self._format)) + + def _get_deserialize_callable_from_annotation( + self, annotation: typing.Any + ) -> typing.Optional[typing.Callable[[typing.Any], typing.Any]]: + return _get_deserialize_callable_from_annotation(annotation, self._module, self) + + +def rest_field( + *, + name: typing.Optional[str] = None, + type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin + visibility: typing.Optional[list[str]] = None, + default: typing.Any = _UNSET, + format: typing.Optional[str] = None, + is_multipart_file_input: bool = False, + xml: typing.Optional[dict[str, typing.Any]] = None, + original_tsp_name: typing.Optional[str] = None, +) -> typing.Any: + return _RestField( + name=name, + type=type, + visibility=visibility, + default=default, + format=format, + is_multipart_file_input=is_multipart_file_input, + xml=xml, + original_tsp_name=original_tsp_name, + ) + + +def rest_discriminator( + *, + name: typing.Optional[str] = None, + type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin + visibility: typing.Optional[list[str]] = None, + xml: typing.Optional[dict[str, typing.Any]] = None, +) -> typing.Any: + return _RestField(name=name, type=type, is_discriminator=True, visibility=visibility, xml=xml) + + +def serialize_xml(model: Model, exclude_readonly: bool = False) -> str: + """Serialize a model to XML. + + :param Model model: The model to serialize. + :param bool exclude_readonly: Whether to exclude readonly properties. + :returns: The XML representation of the model. + :rtype: str + """ + return ET.tostring(_get_element(model, exclude_readonly), encoding="unicode") # type: ignore + + +def _get_element( + o: typing.Any, + exclude_readonly: bool = False, + parent_meta: typing.Optional[dict[str, typing.Any]] = None, + wrapped_element: typing.Optional[ET.Element] = None, +) -> typing.Union[ET.Element, list[ET.Element]]: + if _is_model(o): + model_meta = getattr(o, "_xml", {}) + + # if prop is a model, then use the prop element directly, else generate a wrapper of model + if wrapped_element is None: + wrapped_element = _create_xml_element( + model_meta.get("name", o.__class__.__name__), + model_meta.get("prefix"), + model_meta.get("ns"), + ) + + readonly_props = [] + if exclude_readonly: + readonly_props = [p._rest_name for p in o._attr_to_rest_field.values() if _is_readonly(p)] + + for k, v in o.items(): + # do not serialize readonly properties + if exclude_readonly and k in readonly_props: + continue + + prop_rest_field = _get_rest_field(o._attr_to_rest_field, k) + if prop_rest_field: + prop_meta = getattr(prop_rest_field, "_xml").copy() + # use the wire name as xml name if no specific name is set + if prop_meta.get("name") is None: + prop_meta["name"] = k + else: + # additional properties will not have rest field, use the wire name as xml name + prop_meta = {"name": k} + + # if no ns for prop, use model's + if prop_meta.get("ns") is None and model_meta.get("ns"): + prop_meta["ns"] = model_meta.get("ns") + prop_meta["prefix"] = model_meta.get("prefix") + + if prop_meta.get("unwrapped", False): + # unwrapped could only set on array + wrapped_element.extend(_get_element(v, exclude_readonly, prop_meta)) + elif prop_meta.get("text", False): + # text could only set on primitive type + wrapped_element.text = _get_primitive_type_value(v) + elif prop_meta.get("attribute", False): + xml_name = prop_meta.get("name", k) + if prop_meta.get("ns"): + ET.register_namespace(prop_meta.get("prefix"), prop_meta.get("ns")) # pyright: ignore + xml_name = "{" + prop_meta.get("ns") + "}" + xml_name # pyright: ignore + # attribute should be primitive type + wrapped_element.set(xml_name, _get_primitive_type_value(v)) + else: + # other wrapped prop element + wrapped_element.append(_get_wrapped_element(v, exclude_readonly, prop_meta)) + return wrapped_element + if isinstance(o, list): + return [_get_element(x, exclude_readonly, parent_meta) for x in o] # type: ignore + if isinstance(o, dict): + result = [] + for k, v in o.items(): + result.append( + _get_wrapped_element( + v, + exclude_readonly, + { + "name": k, + "ns": parent_meta.get("ns") if parent_meta else None, + "prefix": parent_meta.get("prefix") if parent_meta else None, + }, + ) + ) + return result + + # primitive case need to create element based on parent_meta + if parent_meta: + return _get_wrapped_element( + o, + exclude_readonly, + { + "name": parent_meta.get("itemsName", parent_meta.get("name")), + "prefix": parent_meta.get("itemsPrefix", parent_meta.get("prefix")), + "ns": parent_meta.get("itemsNs", parent_meta.get("ns")), + }, + ) + + raise ValueError("Could not serialize value into xml: " + o) + + +def _get_wrapped_element( + v: typing.Any, + exclude_readonly: bool, + meta: typing.Optional[dict[str, typing.Any]], +) -> ET.Element: + wrapped_element = _create_xml_element( + meta.get("name") if meta else None, meta.get("prefix") if meta else None, meta.get("ns") if meta else None + ) + if isinstance(v, (dict, list)): + wrapped_element.extend(_get_element(v, exclude_readonly, meta)) + elif _is_model(v): + _get_element(v, exclude_readonly, meta, wrapped_element) + else: + wrapped_element.text = _get_primitive_type_value(v) + return wrapped_element # type: ignore[no-any-return] + + +def _get_primitive_type_value(v) -> str: + if v is True: + return "true" + if v is False: + return "false" + if isinstance(v, _Null): + return "" + return str(v) + + +def _create_xml_element( + tag: typing.Any, prefix: typing.Optional[str] = None, ns: typing.Optional[str] = None +) -> ET.Element: + if prefix and ns: + ET.register_namespace(prefix, ns) + if ns: + return ET.Element("{" + ns + "}" + tag) + return ET.Element(tag) + + +def _deserialize_xml( + deserializer: typing.Any, + value: str, +) -> typing.Any: + element = ET.fromstring(value) # nosec + return _deserialize(deserializer, element) + + +def _convert_element(e: ET.Element): + # dict case + if len(e.attrib) > 0 or len({child.tag for child in e}) > 1: + dict_result: dict[str, typing.Any] = {} + for child in e: + if dict_result.get(child.tag) is not None: + if isinstance(dict_result[child.tag], list): + dict_result[child.tag].append(_convert_element(child)) + else: + dict_result[child.tag] = [dict_result[child.tag], _convert_element(child)] + else: + dict_result[child.tag] = _convert_element(child) + dict_result.update(e.attrib) + return dict_result + # array case + if len(e) > 0: + array_result: list[typing.Any] = [] + for child in e: + array_result.append(_convert_element(child)) + return array_result + # primitive case + return e.text diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_utils/serialization.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_utils/serialization.py similarity index 99% rename from sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_utils/serialization.py rename to sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_utils/serialization.py index 6da830e0cf4a..81ec1de5922b 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/_utils/serialization.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_utils/serialization.py @@ -3,7 +3,7 @@ # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. +# Code generated by Microsoft (R) Python Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_utils/utils.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_utils/utils.py new file mode 100644 index 000000000000..cdf7730ea820 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_utils/utils.py @@ -0,0 +1,100 @@ +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from abc import ABC +import json +from typing import Any, Generic, IO, Mapping, Optional, TYPE_CHECKING, TypeVar, Union + +from azure.core import MatchConditions + +from .._utils.model_base import Model, SdkJSONEncoder + +if TYPE_CHECKING: + from .serialization import Deserializer, Serializer + + +TClient = TypeVar("TClient") +TConfig = TypeVar("TConfig") + + +class ClientMixinABC(ABC, Generic[TClient, TConfig]): + """DO NOT use this class. It is for internal typing use only.""" + + _client: TClient + _config: TConfig + _serialize: "Serializer" + _deserialize: "Deserializer" + + +def quote_etag(etag: Optional[str]) -> Optional[str]: + if not etag or etag == "*": + return etag + if etag.startswith("W/"): + return etag + if etag.startswith('"') and etag.endswith('"'): + return etag + if etag.startswith("'") and etag.endswith("'"): + return etag + return '"' + etag + '"' + + +def prep_if_match(etag: Optional[str], match_condition: Optional[MatchConditions]) -> Optional[str]: + if match_condition == MatchConditions.IfNotModified: + if_match = quote_etag(etag) if etag else None + return if_match + if match_condition == MatchConditions.IfPresent: + return "*" + return None + + +def prep_if_none_match(etag: Optional[str], match_condition: Optional[MatchConditions]) -> Optional[str]: + if match_condition == MatchConditions.IfModified: + if_none_match = quote_etag(etag) if etag else None + return if_none_match + if match_condition == MatchConditions.IfMissing: + return "*" + return None + + +# file-like tuple could be `(filename, IO (or bytes))` or `(filename, IO (or bytes), content_type)` +FileContent = Union[str, bytes, IO[str], IO[bytes]] + +FileType = Union[ + # file (or bytes) + FileContent, + # (filename, file (or bytes)) + tuple[Optional[str], FileContent], + # (filename, file (or bytes), content_type) + tuple[Optional[str], FileContent, Optional[str]], +] + + +def serialize_multipart_data_entry(data_entry: Any) -> Any: + if isinstance(data_entry, (list, tuple, dict, Model)): + return json.dumps(data_entry, cls=SdkJSONEncoder, exclude_readonly=True) + return data_entry + + +def prepare_multipart_form_data( + body: Mapping[str, Any], multipart_fields: list[str], data_fields: list[str] +) -> list[FileType]: + files: list[FileType] = [] + for multipart_field in multipart_fields: + multipart_entry = body.get(multipart_field) + if isinstance(multipart_entry, list): + files.extend([(multipart_field, e) for e in multipart_entry]) + elif multipart_entry: + files.append((multipart_field, multipart_entry)) + + # if files is empty, sdk core library can't handle multipart/form-data correctly, so + # we put data fields into files with filename as None to avoid that scenario. + for data_field in data_fields: + data_entry = body.get(data_field) + if data_entry: + files.append((data_field, str(serialize_multipart_data_entry(data_entry)))) + + return files diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_validation.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_validation.py new file mode 100644 index 000000000000..f5af3a4eb8a2 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_validation.py @@ -0,0 +1,66 @@ +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import functools + + +def api_version_validation(**kwargs): + params_added_on = kwargs.pop("params_added_on", {}) + method_added_on = kwargs.pop("method_added_on", "") + api_versions_list = kwargs.pop("api_versions_list", []) + + def _index_with_default(value: str, default: int = -1) -> int: + """Get the index of value in lst, or return default if not found. + + :param value: The value to search for in the api_versions_list. + :type value: str + :param default: The default value to return if the value is not found. + :type default: int + :return: The index of the value in the list, or the default value if not found. + :rtype: int + """ + try: + return api_versions_list.index(value) + except ValueError: + return default + + def decorator(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + try: + # this assumes the client has an _api_version attribute + client = args[0] + client_api_version = client._config.api_version # pylint: disable=protected-access + except AttributeError: + return func(*args, **kwargs) + + if _index_with_default(method_added_on) > _index_with_default(client_api_version): + raise ValueError( + f"'{func.__name__}' is not available in API version " + f"{client_api_version}. Pass service API version {method_added_on} or newer to your client." + ) + + unsupported = { + parameter: api_version + for api_version, parameters in params_added_on.items() + for parameter in parameters + if parameter in kwargs and _index_with_default(api_version) > _index_with_default(client_api_version) + } + if unsupported: + raise ValueError( + "".join( + [ + f"'{param}' is not available in API version {client_api_version}. " + f"Use service API version {version} or newer.\n" + for param, version in unsupported.items() + ] + ) + ) + return func(*args, **kwargs) + + return wrapper + + return decorator diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_version.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_version.py new file mode 100644 index 000000000000..be71c81bd282 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/_version.py @@ -0,0 +1,9 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +VERSION = "1.0.0b1" diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/__init__.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/__init__.py similarity index 62% rename from sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/__init__.py rename to sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/__init__.py index c57ce36e4daa..b7f5d43a84bf 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/__init__.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/__init__.py @@ -2,7 +2,7 @@ # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. +# Code generated by Microsoft (R) Python Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- # pylint: disable=wrong-import-position @@ -12,7 +12,12 @@ if TYPE_CHECKING: from ._patch import * # pylint: disable=unused-wildcard-import -from ._azure_blob_storage import AzureBlobStorage # type: ignore +from ._client import ServiceClient # type: ignore +from ._client import ContainerClient # type: ignore +from ._client import BlobClient # type: ignore +from ._client import PageBlobClient # type: ignore +from ._client import AppendBlobClient # type: ignore +from ._client import BlockBlobClient # type: ignore try: from ._patch import __all__ as _patch_all @@ -22,7 +27,12 @@ from ._patch import patch_sdk as _patch_sdk __all__ = [ - "AzureBlobStorage", + "ServiceClient", + "ContainerClient", + "BlobClient", + "PageBlobClient", + "AppendBlobClient", + "BlockBlobClient", ] __all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_client.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_client.py new file mode 100644 index 000000000000..de8ae6c4eca5 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_client.py @@ -0,0 +1,510 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from copy import deepcopy +from typing import Any, Awaitable, TYPE_CHECKING +from typing_extensions import Self + +from azure.core import AsyncPipelineClient +from azure.core.pipeline import policies +from azure.core.rest import AsyncHttpResponse, HttpRequest + +from .._utils.serialization import Deserializer, Serializer +from ._configuration import ( + AppendBlobClientConfiguration, + BlobClientConfiguration, + BlockBlobClientConfiguration, + ContainerClientConfiguration, + PageBlobClientConfiguration, + ServiceClientConfiguration, +) +from ._operations import ( + _AppendBlobClientOperationsMixin, + _BlobClientOperationsMixin, + _BlockBlobClientOperationsMixin, + _ContainerClientOperationsMixin, + _PageBlobClientOperationsMixin, + _ServiceClientOperationsMixin, +) + +if TYPE_CHECKING: + from azure.core.credentials_async import AsyncTokenCredential + + +class ServiceClient(_ServiceClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword + """ServiceClient. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + _endpoint = "{url}" + self._config = ServiceClientConfiguration(url=url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request( + self, request: HttpRequest, *, stream: bool = False, **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = await client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.AsyncHttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> Self: + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details: Any) -> None: + await self._client.__aexit__(*exc_details) + + +class ContainerClient(_ContainerClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword + """ContainerClient. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + _endpoint = "{url}" + self._config = ContainerClientConfiguration(url=url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request( + self, request: HttpRequest, *, stream: bool = False, **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = await client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.AsyncHttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> Self: + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details: Any) -> None: + await self._client.__aexit__(*exc_details) + + +class BlobClient(_BlobClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword + """BlobClient. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + _endpoint = "{url}" + self._config = BlobClientConfiguration(url=url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request( + self, request: HttpRequest, *, stream: bool = False, **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = await client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.AsyncHttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> Self: + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details: Any) -> None: + await self._client.__aexit__(*exc_details) + + +class PageBlobClient(_PageBlobClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword + """PageBlobClient. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + _endpoint = "{url}" + self._config = PageBlobClientConfiguration(url=url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request( + self, request: HttpRequest, *, stream: bool = False, **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = await client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.AsyncHttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> Self: + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details: Any) -> None: + await self._client.__aexit__(*exc_details) + + +class AppendBlobClient(_AppendBlobClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword + """AppendBlobClient. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + _endpoint = "{url}" + self._config = AppendBlobClientConfiguration(url=url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request( + self, request: HttpRequest, *, stream: bool = False, **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = await client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.AsyncHttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> Self: + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details: Any) -> None: + await self._client.__aexit__(*exc_details) + + +class BlockBlobClient(_BlockBlobClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword + """BlockBlobClient. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + _endpoint = "{url}" + self._config = BlockBlobClientConfiguration(url=url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request( + self, request: HttpRequest, *, stream: bool = False, **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = await client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.AsyncHttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> Self: + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details: Any) -> None: + await self._client.__aexit__(*exc_details) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_configuration.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_configuration.py new file mode 100644 index 000000000000..0364d295e3b9 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_configuration.py @@ -0,0 +1,304 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any, TYPE_CHECKING + +from azure.core.pipeline import policies + +from .._version import VERSION + +if TYPE_CHECKING: + from azure.core.credentials_async import AsyncTokenCredential + + +class ServiceClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for ServiceClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + version: str = kwargs.pop("version", "2026-04-06") + + if url is None: + raise ValueError("Parameter 'url' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.url = url + self.credential = credential + self.version = version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://storage.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "storage-blob/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class ContainerClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for ContainerClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + version: str = kwargs.pop("version", "2026-04-06") + + if url is None: + raise ValueError("Parameter 'url' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.url = url + self.credential = credential + self.version = version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://storage.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "storage-blob/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class BlobClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for BlobClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + version: str = kwargs.pop("version", "2026-04-06") + + if url is None: + raise ValueError("Parameter 'url' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.url = url + self.credential = credential + self.version = version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://storage.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "storage-blob/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class PageBlobClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for PageBlobClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + version: str = kwargs.pop("version", "2026-04-06") + + if url is None: + raise ValueError("Parameter 'url' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.url = url + self.credential = credential + self.version = version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://storage.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "storage-blob/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class AppendBlobClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for AppendBlobClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + version: str = kwargs.pop("version", "2026-04-06") + + if url is None: + raise ValueError("Parameter 'url' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.url = url + self.credential = credential + self.version = version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://storage.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "storage-blob/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class BlockBlobClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for BlockBlobClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param url: The host name of the blob storage account, e.g. accountName.blob.core.windows.net. + Required. + :type url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword version: Specifies the version of the operation to use for this request. Default value + is "2026-04-06". Note that overriding this default value may result in unsupported behavior. + :paramtype version: str + """ + + def __init__(self, url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + version: str = kwargs.pop("version", "2026-04-06") + + if url is None: + raise ValueError("Parameter 'url' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.url = url + self.credential = credential + self.version = version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://storage.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "storage-blob/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/__init__.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_operations/__init__.py similarity index 52% rename from sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/__init__.py rename to sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_operations/__init__.py index 4a5bb8327756..981fb79f900d 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/operations/__init__.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_operations/__init__.py @@ -2,7 +2,7 @@ # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. +# Code generated by Microsoft (R) Python Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- # pylint: disable=wrong-import-position @@ -12,24 +12,17 @@ if TYPE_CHECKING: from ._patch import * # pylint: disable=unused-wildcard-import -from ._service_operations import ServiceOperations # type: ignore -from ._container_operations import ContainerOperations # type: ignore -from ._blob_operations import BlobOperations # type: ignore -from ._page_blob_operations import PageBlobOperations # type: ignore -from ._append_blob_operations import AppendBlobOperations # type: ignore -from ._block_blob_operations import BlockBlobOperations # type: ignore +from ._operations import _ServiceClientOperationsMixin # type: ignore # pylint: disable=unused-import +from ._operations import _ContainerClientOperationsMixin # type: ignore # pylint: disable=unused-import +from ._operations import _BlobClientOperationsMixin # type: ignore # pylint: disable=unused-import +from ._operations import _PageBlobClientOperationsMixin # type: ignore # pylint: disable=unused-import +from ._operations import _AppendBlobClientOperationsMixin # type: ignore # pylint: disable=unused-import +from ._operations import _BlockBlobClientOperationsMixin # type: ignore # pylint: disable=unused-import from ._patch import __all__ as _patch_all from ._patch import * from ._patch import patch_sdk as _patch_sdk -__all__ = [ - "ServiceOperations", - "ContainerOperations", - "BlobOperations", - "PageBlobOperations", - "AppendBlobOperations", - "BlockBlobOperations", -] +__all__ = [] __all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore _patch_sdk() diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_operations/_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_operations/_operations.py new file mode 100644 index 000000000000..d4e32cb5f98e --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_operations/_operations.py @@ -0,0 +1,9201 @@ +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from collections.abc import MutableMapping +import datetime +from typing import Any, AsyncIterator, Callable, Literal, Optional, TypeVar, Union + +from azure.core import AsyncPipelineClient, MatchConditions +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceModifiedError, + ResourceNotFoundError, + ResourceNotModifiedError, + StreamClosedError, + StreamConsumedError, + map_error, +) +from azure.core.pipeline import PipelineResponse +from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict + +from ... import models as _models +from ..._operations._operations import ( + build_append_blob_append_block_from_url_request, + build_append_blob_append_block_request, + build_append_blob_create_request, + build_append_blob_seal_request, + build_blob_abort_copy_from_url_request, + build_blob_acquire_lease_request, + build_blob_break_lease_request, + build_blob_change_lease_request, + build_blob_copy_from_url_request, + build_blob_create_snapshot_request, + build_blob_delete_immutability_policy_request, + build_blob_delete_request, + build_blob_download_request, + build_blob_get_account_info_request, + build_blob_get_properties_request, + build_blob_get_tags_request, + build_blob_release_lease_request, + build_blob_renew_lease_request, + build_blob_set_expiry_request, + build_blob_set_immutability_policy_request, + build_blob_set_legal_hold_request, + build_blob_set_metadata_request, + build_blob_set_properties_request, + build_blob_set_tags_request, + build_blob_set_tier_request, + build_blob_start_copy_from_url_request, + build_blob_undelete_request, + build_block_blob_commit_block_list_request, + build_block_blob_get_block_list_request, + build_block_blob_query_request, + build_block_blob_stage_block_from_url_request, + build_block_blob_stage_block_request, + build_block_blob_upload_blob_from_url_request, + build_block_blob_upload_request, + build_container_acquire_lease_request, + build_container_break_lease_request, + build_container_change_lease_request, + build_container_create_request, + build_container_delete_request, + build_container_find_blobs_by_tags_request, + build_container_get_access_policy_request, + build_container_get_account_info_request, + build_container_get_properties_request, + build_container_list_blob_flat_segment_request, + build_container_list_blob_hierarchy_segment_request, + build_container_release_lease_request, + build_container_rename_request, + build_container_renew_lease_request, + build_container_restore_request, + build_container_set_access_policy_request, + build_container_set_metadata_request, + build_container_submit_batch_request, + build_page_blob_clear_pages_request, + build_page_blob_copy_incremental_request, + build_page_blob_create_request, + build_page_blob_get_page_ranges_diff_request, + build_page_blob_get_page_ranges_request, + build_page_blob_resize_request, + build_page_blob_set_sequence_number_request, + build_page_blob_upload_pages_from_url_request, + build_page_blob_upload_pages_request, + build_service_find_blobs_by_tags_request, + build_service_get_account_info_request, + build_service_get_properties_request, + build_service_get_statistics_request, + build_service_get_user_delegation_key_request, + build_service_list_containers_segment_request, + build_service_set_properties_request, + build_service_submit_batch_request, +) +from ..._utils.model_base import Model as _Model, _deserialize_xml, _failsafe_deserialize, _get_element +from ..._utils.utils import ClientMixinABC, prepare_multipart_form_data +from ..._validation import api_version_validation +from .._configuration import ( + AppendBlobClientConfiguration, + BlobClientConfiguration, + BlockBlobClientConfiguration, + ContainerClientConfiguration, + PageBlobClientConfiguration, + ServiceClientConfiguration, +) + +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, dict[str, Any]], Any]] + + +class _ServiceClientOperationsMixin( + ClientMixinABC[AsyncPipelineClient[HttpRequest, AsyncHttpResponse], ServiceClientConfiguration] +): + + @distributed_trace_async + async def set_properties( + self, storage_service_properties: _models.BlobServiceProperties, *, timeout: Optional[int] = None, **kwargs: Any + ) -> None: + """Sets properties for a storage account's Blob service endpoint, including properties for Storage + Analytics and CORS (Cross-Origin Resource Sharing) rules. + + :param storage_service_properties: The storage service properties to set. Required. + :type storage_service_properties: ~azure.storage.blobs.models.BlobServiceProperties + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = _get_element(storage_service_properties) + + _request = build_service_set_properties_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def get_properties(self, *, timeout: Optional[int] = None, **kwargs: Any) -> _models.BlobServiceProperties: + """Retrieves properties of a storage account's Blob service, including properties for Storage + Analytics and CORS (Cross-Origin Resource Sharing) rules. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: BlobServiceProperties. The BlobServiceProperties is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.BlobServiceProperties + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.BlobServiceProperties] = kwargs.pop("cls", None) + + _request = build_service_get_properties_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.BlobServiceProperties, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_statistics(self, *, timeout: Optional[int] = None, **kwargs: Any) -> _models.StorageServiceStats: + """Retrieves statistics related to replication for the Blob service. It is only available on the + secondary location endpoint when read-access geo-redundant replication is enabled for the + storage account. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: StorageServiceStats. The StorageServiceStats is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.StorageServiceStats + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.StorageServiceStats] = kwargs.pop("cls", None) + + _request = build_service_get_statistics_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.StorageServiceStats, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def list_containers_segment( + self, + *, + prefix: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + timeout: Optional[int] = None, + include: Optional[list[Union[str, _models.ListContainersIncludeType]]] = None, + **kwargs: Any + ) -> _models.ListContainersSegmentResponse: + """The List Containers Segment operation returns a list of the containers under the specified + account. + + :keyword prefix: Filters the results to return only containers whose name begins with the + specified prefix. Default value is None. + :paramtype prefix: str + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword include: Include this parameter to specify that the container's metadata be returned + as part of the response body. Default value is None. + :paramtype include: list[str or ~azure.storage.blobs.models.ListContainersIncludeType] + :return: ListContainersSegmentResponse. The ListContainersSegmentResponse is compatible with + MutableMapping + :rtype: ~azure.storage.blobs.models.ListContainersSegmentResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.ListContainersSegmentResponse] = kwargs.pop("cls", None) + + _request = build_service_list_containers_segment_request( + prefix=prefix, + marker=marker, + maxresults=maxresults, + timeout=timeout, + include=include, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.ListContainersSegmentResponse, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_user_delegation_key( + self, key_info: _models.KeyInfo, *, timeout: Optional[int] = None, **kwargs: Any + ) -> _models.UserDelegationKey: + """Retrieves a user delegation key for the Blob service. This is only a valid operation when using + bearer token authentication. + + :param key_info: Key information provided in the request. Required. + :type key_info: ~azure.storage.blobs.models.KeyInfo + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: UserDelegationKey. The UserDelegationKey is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.UserDelegationKey + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.UserDelegationKey] = kwargs.pop("cls", None) + + _content = _get_element(key_info) + + _request = build_service_get_user_delegation_key_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.UserDelegationKey, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_account_info(self, *, timeout: Optional[int] = None, **kwargs: Any) -> None: + """Returns the sku name and account kind. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_service_get_account_info_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-sku-name"] = self._deserialize("str", response.headers.get("x-ms-sku-name")) + response_headers["x-ms-account-kind"] = self._deserialize("str", response.headers.get("x-ms-account-kind")) + response_headers["x-ms-is-hns-enabled"] = self._deserialize("bool", response.headers.get("x-ms-is-hns-enabled")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def submit_batch( + self, body: _models.SubmitBatchRequest, *, content_length: int, timeout: Optional[int] = None, **kwargs: Any + ) -> _models.SubmitBatchRequest: + """The Batch operation allows multiple API calls to be embedded into a single HTTP request. + + :param body: The body of the request. Required. + :type body: ~azure.storage.blobs.models.SubmitBatchRequest + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: SubmitBatchRequest. The SubmitBatchRequest is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.SubmitBatchRequest + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + multipart_content_type: str = kwargs.pop( + "multipart_content_type", _headers.pop("Content-Type", "multipart/mixed") + ) + cls: ClsType[_models.SubmitBatchRequest] = kwargs.pop("cls", None) + + _body = body.as_dict() if isinstance(body, _Model) else body + _file_fields: list[str] = ["body"] + _data_fields: list[str] = ["name"] + _files = prepare_multipart_form_data(_body, _file_fields, _data_fields) + + _request = build_service_submit_batch_request( + content_length=content_length, + timeout=timeout, + multipart_content_type=multipart_content_type, + version=self._config.version, + files=_files, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.SubmitBatchRequest, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def find_blobs_by_tags( + self, + *, + filter_expression: str, + timeout: Optional[int] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + include: Optional[list[Union[str, _models.FilterBlobsIncludeItem]]] = None, + **kwargs: Any + ) -> _models.FilterBlobSegment: + """The Filter Blobs operation enables callers to list blobs across all containers whose tags match + a given search expression. + + :keyword filter_expression: Filters the results to return only to return only blobs whose tags + match the specified expression. Required. + :paramtype filter_expression: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword include: Include this parameter to specify one or more datasets to include in the + response. Default value is None. + :paramtype include: list[str or ~azure.storage.blobs.models.FilterBlobsIncludeItem] + :return: FilterBlobSegment. The FilterBlobSegment is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.FilterBlobSegment + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.FilterBlobSegment] = kwargs.pop("cls", None) + + _request = build_service_find_blobs_by_tags_request( + filter_expression=filter_expression, + timeout=timeout, + marker=marker, + maxresults=maxresults, + include=include, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.FilterBlobSegment, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + +class _ContainerClientOperationsMixin( + ClientMixinABC[AsyncPipelineClient[HttpRequest, AsyncHttpResponse], ContainerClientConfiguration] +): + + @distributed_trace_async + async def create( + self, + *, + timeout: Optional[int] = None, + metadata: Optional[str] = None, + access: Optional[Union[str, _models.PublicAccessType]] = None, + default_encryption_scope: Optional[str] = None, + prevent_encryption_scope_override: Optional[bool] = None, + **kwargs: Any + ) -> None: + """Creates a new container under the specified account. If the container with the same name + already exists, the operation fails. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword access: The public access setting for the container. Known values are: "blob" and + "container". Default value is None. + :paramtype access: str or ~azure.storage.blobs.models.PublicAccessType + :keyword default_encryption_scope: Optional. Version 2019-07-07 and later. Specifies the + default encryption scope to set on the container and use for all future writes. Default value + is None. + :paramtype default_encryption_scope: str + :keyword prevent_encryption_scope_override: If a blob has a lease and the lease is of infinite + duration then the value of this header is set to true, otherwise it is set to false. Default + value is None. + :paramtype prevent_encryption_scope_override: bool + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_create_request( + timeout=timeout, + metadata=metadata, + access=access, + default_encryption_scope=default_encryption_scope, + prevent_encryption_scope_override=prevent_encryption_scope_override, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def get_properties( + self, *, timeout: Optional[int] = None, lease_id: Optional[str] = None, **kwargs: Any + ) -> None: + """returns all user-defined metadata and system properties for the specified container. The data + returned does not include the container's list of blobs. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_get_properties_request( + timeout=timeout, + lease_id=lease_id, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-meta"] = self._deserialize("str", response.headers.get("x-ms-meta")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-lease-duration"] = self._deserialize("str", response.headers.get("x-ms-lease-duration")) + response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) + response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) + response_headers["x-ms-blob-public-access"] = self._deserialize( + "str", response.headers.get("x-ms-blob-public-access") + ) + response_headers["x-ms-has-immutability-policy"] = self._deserialize( + "bool", response.headers.get("x-ms-has-immutability-policy") + ) + response_headers["x-ms-has-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-has-legal-hold")) + response_headers["x-ms-default-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-default-encryption-scope") + ) + response_headers["x-ms-deny-encryption-scope-override"] = self._deserialize( + "bool", response.headers.get("x-ms-deny-encryption-scope-override") + ) + response_headers["x-ms-immutable-storage-with-versioning-enabled"] = self._deserialize( + "bool", response.headers.get("x-ms-immutable-storage-with-versioning-enabled") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def delete( + self, + *, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """operation marks the specified container for deletion. The container and any blobs contained + within it are later deleted during garbage collection. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_delete_request( + timeout=timeout, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def set_metadata( + self, + *, + metadata: str, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """operation sets one or more user-defined name-value pairs for the specified container. + + :keyword metadata: The metadata headers. Required. + :paramtype metadata: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_set_metadata_request( + metadata=metadata, + timeout=timeout, + lease_id=lease_id, + if_modified_since=if_modified_since, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def get_access_policy( + self, *, timeout: Optional[int] = None, lease_id: Optional[str] = None, **kwargs: Any + ) -> _models.SignedIdentifiers: + """gets the permissions for the specified container. The permissions indicate whether container + data may be accessed publicly. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :return: SignedIdentifiers. The SignedIdentifiers is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.SignedIdentifiers + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.SignedIdentifiers] = kwargs.pop("cls", None) + + _request = build_container_get_access_policy_request( + timeout=timeout, + lease_id=lease_id, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-blob-public-access"] = self._deserialize( + "str", response.headers.get("x-ms-blob-public-access") + ) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.SignedIdentifiers, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def set_access_policy( + self, + container_acl: _models.SignedIdentifiers, + *, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + access: Optional[Union[str, _models.PublicAccessType]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """sets the permissions for the specified container. The permissions indicate whether blobs in a + container may be accessed publicly. + + :param container_acl: The access control list for the container. Required. + :type container_acl: ~azure.storage.blobs.models.SignedIdentifiers + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword access: The public access setting for the container. Known values are: "blob" and + "container". Default value is None. + :paramtype access: str or ~azure.storage.blobs.models.PublicAccessType + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = _get_element(container_acl) + + _request = build_container_set_access_policy_request( + timeout=timeout, + lease_id=lease_id, + access=access, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def restore( + self, + *, + deleted_container_name: Optional[str] = None, + deleted_container_version: Optional[str] = None, + timeout: Optional[int] = None, + **kwargs: Any + ) -> None: + """Restores a previously-deleted container. + + :keyword deleted_container_name: Optional. Version 2019-12-12 and later. Specifies the name + of the deleted container to restore. Default value is None. + :paramtype deleted_container_name: str + :keyword deleted_container_version: Optional. Version 2019-12-12 and later. Specifies the + version of the deleted container to restore. Default value is None. + :paramtype deleted_container_version: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_restore_request( + deleted_container_name=deleted_container_name, + deleted_container_version=deleted_container_version, + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def rename( + self, + *, + source_container_name: str, + source_lease_id: Optional[str] = None, + timeout: Optional[int] = None, + **kwargs: Any + ) -> None: + """Renames an existing container. + + :keyword source_container_name: Required. Specifies the name of the container to rename. + Required. + :paramtype source_container_name: str + :keyword source_lease_id: A lease ID for the source path. If specified, the source path must + have an active lease and the lease ID must match. Default value is None. + :paramtype source_lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_rename_request( + source_container_name=source_container_name, + source_lease_id=source_lease_id, + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def submit_batch( + self, body: _models.SubmitBatchRequest, *, content_length: int, timeout: Optional[int] = None, **kwargs: Any + ) -> _models.SubmitBatchRequest: + """The Batch operation allows multiple API calls to be embedded into a single HTTP request. + + :param body: The body of the request. Required. + :type body: ~azure.storage.blobs.models.SubmitBatchRequest + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: SubmitBatchRequest. The SubmitBatchRequest is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.SubmitBatchRequest + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + multipart_content_type: str = kwargs.pop( + "multipart_content_type", _headers.pop("Content-Type", "multipart/mixed") + ) + cls: ClsType[_models.SubmitBatchRequest] = kwargs.pop("cls", None) + + _body = body.as_dict() if isinstance(body, _Model) else body + _file_fields: list[str] = ["body"] + _data_fields: list[str] = ["name"] + _files = prepare_multipart_form_data(_body, _file_fields, _data_fields) + + _request = build_container_submit_batch_request( + content_length=content_length, + timeout=timeout, + multipart_content_type=multipart_content_type, + version=self._config.version, + files=_files, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.SubmitBatchRequest, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def find_blobs_by_tags( + self, + *, + filter_expression: str, + timeout: Optional[int] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + include: Optional[list[Union[str, _models.FilterBlobsIncludeItem]]] = None, + **kwargs: Any + ) -> _models.FilterBlobSegment: + """The Filter Blobs operation enables callers to list blobs in a container whose tags match a + given search expression. Filter blobs searches within the given container. + + :keyword filter_expression: Filters the results to return only to return only blobs whose tags + match the specified expression. Required. + :paramtype filter_expression: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword include: Include this parameter to specify one or more datasets to include in the + response. Default value is None. + :paramtype include: list[str or ~azure.storage.blobs.models.FilterBlobsIncludeItem] + :return: FilterBlobSegment. The FilterBlobSegment is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.FilterBlobSegment + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.FilterBlobSegment] = kwargs.pop("cls", None) + + _request = build_container_find_blobs_by_tags_request( + filter_expression=filter_expression, + timeout=timeout, + marker=marker, + maxresults=maxresults, + include=include, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.FilterBlobSegment, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def acquire_lease( + self, + *, + duration: int, + timeout: Optional[int] = None, + proposed_lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """The Acquire Lease operation requests a new lease on a container. The lease lock duration can be + 15 to 60 seconds, or can be infinite. + + :keyword duration: Specifies the duration of the lease, in seconds, or negative one (-1) for a + lease that never expires. A non-infinite lease can be between 15 and 60 seconds. A lease + duration cannot be changed using renew or change. Required. + :paramtype duration: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword proposed_lease_id: Optional. The proposed lease ID for the container. Default value + is None. + :paramtype proposed_lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + action: Literal["acquire"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "acquire")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_acquire_lease_request( + duration=duration, + timeout=timeout, + proposed_lease_id=proposed_lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def release_lease( + self, + *, + lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """The Release Lease operation frees the lease if it's no longer needed, so that another client + can immediately acquire a lease against the container. + + :keyword lease_id: Required. A lease ID for the source path. If specified, the source path + must have an active lease and the lease ID must match. Required. + :paramtype lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["release"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "release")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_release_lease_request( + lease_id=lease_id, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def renew_lease( + self, + *, + lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """The Renew Lease operation renews an existing lease. + + :keyword lease_id: Required. A lease ID for the source path. If specified, the source path + must have an active lease and the lease ID must match. Required. + :paramtype lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["renew"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "renew")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_renew_lease_request( + lease_id=lease_id, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def break_lease( + self, + *, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + break_period: Optional[int] = None, + **kwargs: Any + ) -> None: + """The Break Lease operation ends a lease and ensures that another client can't acquire a new + lease until the current lease period has expired. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword break_period: For a break operation, proposed duration the lease should continue + before it is broken, in seconds, between 0 and 60. This break period is only used if it is + shorter than the time remaining on the lease. If longer, the time remaining on the lease is + used. A new lease will not be available before the break period has expired, but the lease may + be held for longer than the break period. If this header does not appear with a break + operation, a fixed-duration lease breaks after the remaining lease period elapses, and an + infinite lease breaks immediately. Default value is None. + :paramtype break_period: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["break"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "break")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_break_lease_request( + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + break_period=break_period, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-lease-time"] = self._deserialize("int", response.headers.get("x-ms-lease-time")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def change_lease( + self, + *, + lease_id: str, + proposed_lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """The Change Lease operation is used to change the ID of an existing lease. + + :keyword lease_id: Required. A lease ID for the source path. If specified, the source path + must have an active lease and the lease ID must match. Required. + :paramtype lease_id: str + :keyword proposed_lease_id: Required. The proposed lease ID for the container. Required. + :paramtype proposed_lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["change"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "change")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_change_lease_request( + lease_id=lease_id, + proposed_lease_id=proposed_lease_id, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + @api_version_validation( + params_added_on={"2026-02-06": ["start_from"]}, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + async def list_blob_flat_segment( + self, + *, + prefix: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + include: Optional[list[Union[str, _models.ListBlobsIncludeItem]]] = None, + timeout: Optional[int] = None, + start_from: Optional[str] = None, + **kwargs: Any + ) -> _models.ListBlobsFlatSegmentResponse: + """The List Blobs operation returns a list of the blobs under the specified container. + + :keyword prefix: Filters the results to return only containers whose name begins with the + specified prefix. Default value is None. + :paramtype prefix: str + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword include: Include this parameter to specify one or more datasets to include in the + response. Default value is None. + :paramtype include: list[str or ~azure.storage.blobs.models.ListBlobsIncludeItem] + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword start_from: Specifies the relative path to list paths from. For non-recursive list, + only one entity level is supported; For recursive list, multiple entity levels are supported. + (Inclusive). Default value is None. + :paramtype start_from: str + :return: ListBlobsFlatSegmentResponse. The ListBlobsFlatSegmentResponse is compatible with + MutableMapping + :rtype: ~azure.storage.blobs.models.ListBlobsFlatSegmentResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.ListBlobsFlatSegmentResponse] = kwargs.pop("cls", None) + + _request = build_container_list_blob_flat_segment_request( + prefix=prefix, + marker=marker, + maxresults=maxresults, + include=include, + timeout=timeout, + start_from=start_from, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.ListBlobsFlatSegmentResponse, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + @api_version_validation( + params_added_on={"2026-02-06": ["start_from"]}, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + async def list_blob_hierarchy_segment( + self, + *, + delimiter: str, + prefix: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + include: Optional[list[Union[str, _models.ListBlobsIncludeItem]]] = None, + timeout: Optional[int] = None, + start_from: Optional[str] = None, + **kwargs: Any + ) -> _models.ListBlobsHierarchySegmentResponse: + """The List Blobs operation returns a list of the blobs under the specified container. A delimiter + can be used to traverse a virtual hierarchy of blobs as though it were a file system. + + :keyword delimiter: When the request includes this parameter, the operation returns a + BlobPrefix element in the response body that acts as a placeholder for all blobs whose names + begin with the same substring up to the appearance of the delimiter character. The delimiter + may be a single character or a string. Required. + :paramtype delimiter: str + :keyword prefix: Filters the results to return only containers whose name begins with the + specified prefix. Default value is None. + :paramtype prefix: str + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword include: Include this parameter to specify one or more datasets to include in the + response. Default value is None. + :paramtype include: list[str or ~azure.storage.blobs.models.ListBlobsIncludeItem] + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword start_from: Specifies the relative path to list paths from. For non-recursive list, + only one entity level is supported; For recursive list, multiple entity levels are supported. + (Inclusive). Default value is None. + :paramtype start_from: str + :return: ListBlobsHierarchySegmentResponse. The ListBlobsHierarchySegmentResponse is compatible + with MutableMapping + :rtype: ~azure.storage.blobs.models.ListBlobsHierarchySegmentResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.ListBlobsHierarchySegmentResponse] = kwargs.pop("cls", None) + + _request = build_container_list_blob_hierarchy_segment_request( + delimiter=delimiter, + prefix=prefix, + marker=marker, + maxresults=maxresults, + include=include, + timeout=timeout, + start_from=start_from, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.ListBlobsHierarchySegmentResponse, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_account_info(self, *, timeout: Optional[int] = None, **kwargs: Any) -> None: + """Returns the sku name and account kind. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_container_get_account_info_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-sku-name"] = self._deserialize("str", response.headers.get("x-ms-sku-name")) + response_headers["x-ms-account-kind"] = self._deserialize("str", response.headers.get("x-ms-account-kind")) + response_headers["x-ms-is-hns-enabled"] = self._deserialize("bool", response.headers.get("x-ms-is-hns-enabled")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + +class _BlobClientOperationsMixin( # pylint: disable=too-many-public-methods + ClientMixinABC[AsyncPipelineClient[HttpRequest, AsyncHttpResponse], BlobClientConfiguration] +): + + @distributed_trace_async + async def download( # pylint: disable=too-many-locals + self, + *, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + timeout: Optional[int] = None, + range: Optional[str] = None, + lease_id: Optional[str] = None, + range_get_content_md5: Optional[bool] = None, + range_get_content_crc64: Optional[bool] = None, + structured_body_type: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + if_tags: Optional[str] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_modified_since: Optional[datetime.datetime] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> AsyncIterator[bytes]: + """The Download operation reads or downloads a blob from the system, including its metadata and + properties. You can also call Download to read a snapshot. + + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword range: Return only the bytes of the blob in the specified range. Default value is + None. + :paramtype range: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword range_get_content_md5: When set to true and specified together with the Range, the + service returns the MD5 hash for the range, as long as the range is less than or equal to 4 MB + in size. Default value is None. + :paramtype range_get_content_md5: bool + :keyword range_get_content_crc64: Optional. When this header is set to true and specified + together with the Range header, the service returns the CRC64 hash for the range, as long as + the range is less than or equal to 4 MB in size. Default value is None. + :paramtype range_get_content_crc64: bool + :keyword structured_body_type: Specifies the response content should be returned as a + structured message and specifies the message schema version and properties. Default value is + None. + :paramtype structured_body_type: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword if_unmodified_since: The request should only proceed if the entity was not modified + after this time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_modified_since: The request should only proceed if the entity was modified after + this time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: AsyncIterator[bytes] + :rtype: AsyncIterator[bytes] + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + + _request = build_blob_download_request( + snapshot=snapshot, + version_id=version_id, + timeout=timeout, + range=range, + lease_id=lease_id, + range_get_content_md5=range_get_content_md5, + range_get_content_crc64=range_get_content_crc64, + structured_body_type=structured_body_type, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + if_tags=if_tags, + if_unmodified_since=if_unmodified_since, + if_modified_since=if_modified_since, + etag=etag, + match_condition=match_condition, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", True) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 206]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + if response.status_code == 200: + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["x-ms-meta"] = self._deserialize("str", response.headers.get("x-ms-meta")) + response_headers["x-ms-or"] = self._deserialize("str", response.headers.get("x-ms-or")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-creation-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-creation-time") + ) + response_headers["x-ms-or-policy-id"] = self._deserialize("str", response.headers.get("x-ms-or-policy-id")) + response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) + response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) + response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) + response_headers["Content-Disposition"] = self._deserialize( + "str", response.headers.get("Content-Disposition") + ) + response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) + response_headers["x-ms-copy-completion-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-copy-completion-time") + ) + response_headers["x-ms-copy-status-description"] = self._deserialize( + "str", response.headers.get("x-ms-copy-status-description") + ) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-progress"] = self._deserialize( + "str", response.headers.get("x-ms-copy-progress") + ) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) + response_headers["x-ms-lease-duration"] = self._deserialize( + "str", response.headers.get("x-ms-lease-duration") + ) + response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) + response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-is-current-version"] = self._deserialize( + "bool", response.headers.get("x-ms-is-current-version") + ) + response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-blob-committed-block-count"] = self._deserialize( + "int", response.headers.get("x-ms-blob-committed-block-count") + ) + response_headers["x-ms-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-blob-content-md5"] = self._deserialize( + "bytearray", response.headers.get("x-ms-blob-content-md5") + ) + response_headers["x-ms-tag-count"] = self._deserialize("int", response.headers.get("x-ms-tag-count")) + response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) + response_headers["x-ms-last-access-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-last-access-time") + ) + response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") + ) + response_headers["x-ms-immutability-policy-mode"] = self._deserialize( + "str", response.headers.get("x-ms-immutability-policy-mode") + ) + response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) + response_headers["x-ms-structured-body"] = self._deserialize( + "str", response.headers.get("x-ms-structured-body") + ) + response_headers["x-ms-structured-content-length"] = self._deserialize( + "int", response.headers.get("x-ms-structured-content-length") + ) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if response.status_code == 206: + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["x-ms-meta"] = self._deserialize("str", response.headers.get("x-ms-meta")) + response_headers["x-ms-or"] = self._deserialize("str", response.headers.get("x-ms-or")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-creation-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-creation-time") + ) + response_headers["x-ms-or-policy-id"] = self._deserialize("str", response.headers.get("x-ms-or-policy-id")) + response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) + response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) + response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) + response_headers["Content-Disposition"] = self._deserialize( + "str", response.headers.get("Content-Disposition") + ) + response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-copy-completion-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-copy-completion-time") + ) + response_headers["x-ms-copy-status-description"] = self._deserialize( + "str", response.headers.get("x-ms-copy-status-description") + ) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-progress"] = self._deserialize( + "str", response.headers.get("x-ms-copy-progress") + ) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) + response_headers["x-ms-lease-duration"] = self._deserialize( + "str", response.headers.get("x-ms-lease-duration") + ) + response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) + response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-is-current-version"] = self._deserialize( + "bool", response.headers.get("x-ms-is-current-version") + ) + response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-blob-committed-block-count"] = self._deserialize( + "int", response.headers.get("x-ms-blob-committed-block-count") + ) + response_headers["x-ms-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-blob-content-md5"] = self._deserialize( + "bytearray", response.headers.get("x-ms-blob-content-md5") + ) + response_headers["x-ms-tag-count"] = self._deserialize("int", response.headers.get("x-ms-tag-count")) + response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) + response_headers["x-ms-last-access-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-last-access-time") + ) + response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") + ) + response_headers["x-ms-immutability-policy-mode"] = self._deserialize( + "str", response.headers.get("x-ms-immutability-policy-mode") + ) + response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) + response_headers["x-ms-structured-body"] = self._deserialize( + "str", response.headers.get("x-ms-structured-body") + ) + response_headers["x-ms-structured-content-length"] = self._deserialize( + "int", response.headers.get("x-ms-structured-content-length") + ) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + deserialized = response.iter_bytes() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_properties( # pylint: disable=too-many-locals + self, + *, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> bool: + """The Get Properties operation returns all user-defined metadata, standard HTTP properties, and + system properties for the blob. It does not return the content of the blob. + + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: bool + :rtype: bool + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_get_properties_request( + snapshot=snapshot, + version_id=version_id, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-meta"] = self._deserialize("str", response.headers.get("x-ms-meta")) + response_headers["x-ms-or"] = self._deserialize("str", response.headers.get("x-ms-or")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-creation-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-creation-time") + ) + response_headers["x-ms-or-policy-id"] = self._deserialize("str", response.headers.get("x-ms-or-policy-id")) + response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) + response_headers["x-ms-copy-completion-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-copy-completion-time") + ) + response_headers["x-ms-copy-status-description"] = self._deserialize( + "str", response.headers.get("x-ms-copy-status-description") + ) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-progress"] = self._deserialize("str", response.headers.get("x-ms-copy-progress")) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) + response_headers["x-ms-incremental-copy"] = self._deserialize( + "bool", response.headers.get("x-ms-incremental-copy") + ) + response_headers["x-ms-copy-destination-snapshot"] = self._deserialize( + "str", response.headers.get("x-ms-copy-destination-snapshot") + ) + response_headers["x-ms-lease-duration"] = self._deserialize("str", response.headers.get("x-ms-lease-duration")) + response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) + response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) + response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) + response_headers["Content-Disposition"] = self._deserialize("str", response.headers.get("Content-Disposition")) + response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) + response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) + response_headers["x-ms-blob-committed-block-count"] = self._deserialize( + "int", response.headers.get("x-ms-blob-committed-block-count") + ) + response_headers["x-ms-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-access-tier"] = self._deserialize("str", response.headers.get("x-ms-access-tier")) + response_headers["x-ms-access-tier-inferred"] = self._deserialize( + "bool", response.headers.get("x-ms-access-tier-inferred") + ) + response_headers["x-ms-archive-status"] = self._deserialize("str", response.headers.get("x-ms-archive-status")) + response_headers["x-ms-access-tier-change-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-access-tier-change-time") + ) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-is-current-version"] = self._deserialize( + "bool", response.headers.get("x-ms-is-current-version") + ) + response_headers["x-ms-tag-count"] = self._deserialize("int", response.headers.get("x-ms-tag-count")) + response_headers["x-ms-expiry-time"] = self._deserialize("rfc-1123", response.headers.get("x-ms-expiry-time")) + response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) + response_headers["x-ms-rehydrate-priority"] = self._deserialize( + "str", response.headers.get("x-ms-rehydrate-priority") + ) + response_headers["x-ms-last-access-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-last-access-time") + ) + response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") + ) + response_headers["x-ms-immutability-policy-mode"] = self._deserialize( + "str", response.headers.get("x-ms-immutability-policy-mode") + ) + response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + return 200 <= response.status_code <= 299 + + @distributed_trace_async + @api_version_validation( + params_added_on={"2026-04-06": ["access_tier_if_modified_since", "access_tier_if_unmodified_since"]}, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + async def delete( # pylint: disable=too-many-locals + self, + *, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + delete_snapshots: Optional[Union[str, _models.DeleteSnapshotsOptionType]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_delete_type: Optional[Union[str, _models.BlobDeleteType]] = None, + access_tier_if_modified_since: Optional[datetime.datetime] = None, + access_tier_if_unmodified_since: Optional[datetime.datetime] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """If the storage account's soft delete feature is disabled then, when a blob is deleted, it is + permanently removed from the storage account. If the storage account's soft delete feature is + enabled, then, when a blob is deleted, it is marked for deletion and becomes inaccessible + immediately. However, the blob service retains the blob or snapshot for the number of days + specified by the DeleteRetentionPolicy section of [Storage service properties] + (Set-Blob-Service-Properties.md). After the specified number of days has passed, the blob's + data is permanently removed from the storage account. Note that you continue to be charged for + the soft-deleted blob's storage until it is permanently removed. Use the List Blobs API and + specify the \\"include=deleted\\" query parameter to discover which blobs and snapshots have + been soft deleted. You can then use the Undelete Blob API to restore a soft-deleted blob. All + other operations on a soft-deleted blob or snapshot causes the service to return an HTTP status + code of 404 (ResourceNotFound). + + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword delete_snapshots: Required if the blob has associated snapshots. Specify one of the + following two options: include: Delete the base blob and all of its snapshots. only: Delete + only the blob's snapshots and not the blob itself. Known values are: "only" and "include". + Default value is None. + :paramtype delete_snapshots: str or ~azure.storage.blobs.models.DeleteSnapshotsOptionType + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword blob_delete_type: Optional. Only possible value is 'permanent', which specifies to + permanently delete a blob if blob soft delete is enabled. "Permanent" Default value is None. + :paramtype blob_delete_type: str or ~azure.storage.blobs.models.BlobDeleteType + :keyword access_tier_if_modified_since: Specify this header value to operate only on a blob if + the access-tier has been modified since the specified date/time. Default value is None. + :paramtype access_tier_if_modified_since: ~datetime.datetime + :keyword access_tier_if_unmodified_since: Specify this header value to operate only on a blob + if the access-tier has not been modified since the specified date/time. Default value is None. + :paramtype access_tier_if_unmodified_since: ~datetime.datetime + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_delete_request( + snapshot=snapshot, + version_id=version_id, + timeout=timeout, + lease_id=lease_id, + delete_snapshots=delete_snapshots, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + blob_delete_type=blob_delete_type, + access_tier_if_modified_since=access_tier_if_modified_since, + access_tier_if_unmodified_since=access_tier_if_unmodified_since, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def undelete(self, *, timeout: Optional[int] = None, **kwargs: Any) -> None: + """Undelete a blob that was previously soft deleted. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_undelete_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def set_expiry( + self, + *, + expiry_options: Union[str, _models.BlobExpiryOptions], + timeout: Optional[int] = None, + expires_on: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> None: + """Set the expiration time of a blob. + + :keyword expiry_options: Required. Indicates mode of the expiry time. Known values are: + "NeverExpire", "RelativeToCreation", "RelativeToNow", and "Absolute". Required. + :paramtype expiry_options: str or ~azure.storage.blobs.models.BlobExpiryOptions + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword expires_on: The time this blob will expire. Default value is None. + :paramtype expires_on: ~datetime.datetime + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_set_expiry_request( + expiry_options=expiry_options, + timeout=timeout, + expires_on=expires_on, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def set_properties( # pylint: disable=too-many-locals + self, + *, + timeout: Optional[int] = None, + blob_cache_control: Optional[str] = None, + blob_content_type: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Set HTTP Headers operation sets system properties on the blob. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword blob_cache_control: Optional. Sets the blob's cache control. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_cache_control: str + :keyword blob_content_type: Optional. Sets the blob's content type. If specified, this property + is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_type: str + :keyword blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is + not validated, as the hashes for the individual blocks were validated when each was uploaded. + Default value is None. + :paramtype blob_content_md5: bytes + :keyword blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_encoding: str + :keyword blob_content_language: Optional. Set the blob's content language. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_language: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_content_disposition: Optional. Sets the blob's content disposition. If specified, + this property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_disposition: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_set_properties_request( + timeout=timeout, + blob_cache_control=blob_cache_control, + blob_content_type=blob_content_type, + blob_content_md5=blob_content_md5, + blob_content_encoding=blob_content_encoding, + blob_content_language=blob_content_language, + lease_id=lease_id, + blob_content_disposition=blob_content_disposition, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def set_immutability_policy( + self, + *, + expiry: datetime.datetime, + timeout: Optional[int] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + **kwargs: Any + ) -> None: + """Set the immutability policy of a blob. + + :keyword expiry: Specifies the date time when the blobs immutability policy is set to expire. + Required. + :paramtype expiry: ~datetime.datetime + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_set_immutability_policy_request( + expiry=expiry, + timeout=timeout, + if_unmodified_since=if_unmodified_since, + immutability_policy_mode=immutability_policy_mode, + snapshot=snapshot, + version_id=version_id, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") + ) + response_headers["x-ms-immutability-policy-mode"] = self._deserialize( + "str", response.headers.get("x-ms-immutability-policy-mode") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def delete_immutability_policy( + self, + *, + timeout: Optional[int] = None, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + **kwargs: Any + ) -> None: + """The Delete Immutability Policy operation deletes the immutability policy on the blob. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_delete_immutability_policy_request( + timeout=timeout, + snapshot=snapshot, + version_id=version_id, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def set_legal_hold( + self, + *, + legal_hold: bool, + timeout: Optional[int] = None, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + **kwargs: Any + ) -> None: + """The Set Legal Hold operation sets a legal hold on the blob. + + :keyword legal_hold: Required. Specifies the legal hold status to set on the blob. Required. + :paramtype legal_hold: bool + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_set_legal_hold_request( + legal_hold=legal_hold, + timeout=timeout, + snapshot=snapshot, + version_id=version_id, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def set_metadata( # pylint: disable=too-many-locals + self, + *, + metadata: str, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Set Metadata operation sets user-defined metadata for the specified blob as one or more + name-value pairs. + + :keyword metadata: The metadata headers. Required. + :paramtype metadata: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_set_metadata_request( + metadata=metadata, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def acquire_lease( + self, + *, + duration: int, + timeout: Optional[int] = None, + proposed_lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Acquire Lease operation requests a new lease on a blob. The lease lock duration can be 15 + to 60 seconds, or can be infinite. + + :keyword duration: Specifies the duration of the lease, in seconds, or negative one (-1) for a + lease that never expires. A non-infinite lease can be between 15 and 60 seconds. A lease + duration cannot be changed using renew or change. Required. + :paramtype duration: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword proposed_lease_id: Optional. The proposed lease ID for the container. Default value + is None. + :paramtype proposed_lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + action: Literal["acquire"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "acquire")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_acquire_lease_request( + duration=duration, + timeout=timeout, + proposed_lease_id=proposed_lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def release_lease( + self, + *, + lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Release Lease operation frees the lease if it's no longer needed, so that another client + can immediately acquire a lease against the blob. + + :keyword lease_id: Required. A lease ID for the source path. If specified, the source path + must have an active lease and the lease ID must match. Required. + :paramtype lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["release"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "release")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_release_lease_request( + lease_id=lease_id, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def renew_lease( + self, + *, + lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Renew Lease operation renews an existing lease. + + :keyword lease_id: Required. A lease ID for the source path. If specified, the source path + must have an active lease and the lease ID must match. Required. + :paramtype lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["renew"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "renew")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_renew_lease_request( + lease_id=lease_id, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def change_lease( + self, + *, + lease_id: str, + proposed_lease_id: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Change Lease operation is used to change the ID of an existing lease. + + :keyword lease_id: Required. A lease ID for the source path. If specified, the source path + must have an active lease and the lease ID must match. Required. + :paramtype lease_id: str + :keyword proposed_lease_id: Required. The proposed lease ID for the container. Required. + :paramtype proposed_lease_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["change"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "change")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_change_lease_request( + lease_id=lease_id, + proposed_lease_id=proposed_lease_id, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def break_lease( + self, + *, + timeout: Optional[int] = None, + break_period: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Break Lease operation ends a lease and ensures that another client can't acquire a new + lease until the current lease period has expired. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword break_period: For a break operation, proposed duration the lease should continue + before it is broken, in seconds, between 0 and 60. This break period is only used if it is + shorter than the time remaining on the lease. If longer, the time remaining on the lease is + used. A new lease will not be available before the break period has expired, but the lease may + be held for longer than the break period. If this header does not appear with a break + operation, a fixed-duration lease breaks after the remaining lease period elapses, and an + infinite lease breaks immediately. Default value is None. + :paramtype break_period: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + action: Literal["break"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "break")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_break_lease_request( + timeout=timeout, + break_period=break_period, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + action=action, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-lease-time"] = self._deserialize("int", response.headers.get("x-ms-lease-time")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def create_snapshot( # pylint: disable=too-many-locals + self, + *, + timeout: Optional[int] = None, + metadata: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + lease_id: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Create Snapshot operation creates a read-only snapshot of a blob. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_create_snapshot_request( + timeout=timeout, + metadata=metadata, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + lease_id=lease_id, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-snapshot"] = self._deserialize("str", response.headers.get("x-ms-snapshot")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def start_copy_from_url( # pylint: disable=too-many-locals + self, + *, + copy_source: str, + timeout: Optional[int] = None, + metadata: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + rehydrate_priority: Optional[Union[str, _models.RehydratePriority]] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + source_if_tags: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + lease_id: Optional[str] = None, + blob_tags_string: Optional[str] = None, + seal_blob: Optional[bool] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Start Copy From URL operation copies a blob or an internet resource to a new blob. + + :keyword copy_source: Specifies the name of the source page blob snapshot. This value is a URL + of up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as + it would appear in a request URI. The source blob must either be public or must be + authenticated via a shared access signature. Required. + :paramtype copy_source: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword tier: The tier to be set on the blob. Known values are: "P4", "P6", "P10", "P15", + "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", and + "Cold". Default value is None. + :paramtype tier: str or ~azure.storage.blobs.models.AccessTier + :keyword rehydrate_priority: If an object is in rehydrate pending state then this header is + returned with priority of rehydrate. Valid values are High and Standard. Known values are: + "High" and "Standard". Default value is None. + :paramtype rehydrate_priority: str or ~azure.storage.blobs.models.RehydratePriority + :keyword source_if_modified_since: Specify this header value to operate only on a blob if it + has been modified since the specified date/time. Default value is None. + :paramtype source_if_modified_since: ~datetime.datetime + :keyword source_if_unmodified_since: Specify this header value to operate only on a blob if it + has not been modified since the specified date/time. Default value is None. + :paramtype source_if_unmodified_since: ~datetime.datetime + :keyword source_if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype source_if_match: str + :keyword source_if_none_match: Specify this header value to operate only on a blob if it has + been modified since the specified date/time. Default value is None. + :paramtype source_if_none_match: str + :keyword source_if_tags: Specify a SQL where clause on blob tags to operate only on blobs with + a matching value. Default value is None. + :paramtype source_if_tags: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword seal_blob: Overrides the sealed state of the destination blob. Service version + 2019-12-12 and newer. Default value is None. + :paramtype seal_blob: bool + :keyword immutability_policy_expiry: Specifies the date time when the blobs immutability policy + is set to expire. Default value is None. + :paramtype immutability_policy_expiry: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword legal_hold: Specified if a legal hold should be set on the blob. Default value is + None. + :paramtype legal_hold: bool + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + requires_sync: Literal[True] = kwargs.pop("requires_sync", _headers.pop("x-ms-requires-sync", True)) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_start_copy_from_url_request( + copy_source=copy_source, + timeout=timeout, + metadata=metadata, + tier=tier, + rehydrate_priority=rehydrate_priority, + source_if_modified_since=source_if_modified_since, + source_if_unmodified_since=source_if_unmodified_since, + source_if_match=source_if_match, + source_if_none_match=source_if_none_match, + source_if_tags=source_if_tags, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + lease_id=lease_id, + blob_tags_string=blob_tags_string, + seal_blob=seal_blob, + immutability_policy_expiry=immutability_policy_expiry, + immutability_policy_mode=immutability_policy_mode, + legal_hold=legal_hold, + etag=etag, + match_condition=match_condition, + content_type=content_type, + requires_sync=requires_sync, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def copy_from_url( # pylint: disable=too-many-locals + self, + *, + copy_source: str, + timeout: Optional[int] = None, + metadata: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + lease_id: Optional[str] = None, + source_content_md5: Optional[bytes] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + copy_source_authorization: Optional[str] = None, + encryption_scope: Optional[str] = None, + copy_source_tags: Optional[Union[str, _models.BlobCopySourceTags]] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Copy From URL operation copies a blob or an internet resource to a new blob. It will not + return a response until the copy is complete. + + :keyword copy_source: Specifies the name of the source page blob snapshot. This value is a URL + of up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as + it would appear in a request URI. The source blob must either be public or must be + authenticated via a shared access signature. Required. + :paramtype copy_source: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword tier: The tier to be set on the blob. Known values are: "P4", "P6", "P10", "P15", + "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", and + "Cold". Default value is None. + :paramtype tier: str or ~azure.storage.blobs.models.AccessTier + :keyword source_if_modified_since: Specify this header value to operate only on a blob if it + has been modified since the specified date/time. Default value is None. + :paramtype source_if_modified_since: ~datetime.datetime + :keyword source_if_unmodified_since: Specify this header value to operate only on a blob if it + has not been modified since the specified date/time. Default value is None. + :paramtype source_if_unmodified_since: ~datetime.datetime + :keyword source_if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype source_if_match: str + :keyword source_if_none_match: Specify this header value to operate only on a blob if it has + been modified since the specified date/time. Default value is None. + :paramtype source_if_none_match: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword source_content_md5: Specify the md5 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_md5: bytes + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword immutability_policy_expiry: Specifies the date time when the blobs immutability policy + is set to expire. Default value is None. + :paramtype immutability_policy_expiry: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword legal_hold: Specified if a legal hold should be set on the blob. Default value is + None. + :paramtype legal_hold: bool + :keyword copy_source_authorization: Only Bearer type is supported. Credentials should be a + valid OAuth access token to copy source. Default value is None. + :paramtype copy_source_authorization: str + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword copy_source_tags: Optional, default 'replace'. Indicates if source tags should be + copied or replaced with the tags specified by x-ms-tags. Known values are: "REPLACE" and + "COPY". Default value is None. + :paramtype copy_source_tags: str or ~azure.storage.blobs.models.BlobCopySourceTags + :keyword file_request_intent: Valid value is backup. "backup" Default value is None. + :paramtype file_request_intent: str or ~azure.storage.blobs.models.FileShareTokenIntent + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + requires_sync: Literal["true"] = kwargs.pop("requires_sync", _headers.pop("x-ms-requires-sync", "true")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_copy_from_url_request( + copy_source=copy_source, + timeout=timeout, + metadata=metadata, + tier=tier, + source_if_modified_since=source_if_modified_since, + source_if_unmodified_since=source_if_unmodified_since, + source_if_match=source_if_match, + source_if_none_match=source_if_none_match, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + lease_id=lease_id, + source_content_md5=source_content_md5, + blob_tags_string=blob_tags_string, + immutability_policy_expiry=immutability_policy_expiry, + immutability_policy_mode=immutability_policy_mode, + legal_hold=legal_hold, + copy_source_authorization=copy_source_authorization, + encryption_scope=encryption_scope, + copy_source_tags=copy_source_tags, + file_request_intent=file_request_intent, + etag=etag, + match_condition=match_condition, + content_type=content_type, + requires_sync=requires_sync, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def abort_copy_from_url( + self, *, copy_id: str, timeout: Optional[int] = None, lease_id: Optional[str] = None, **kwargs: Any + ) -> None: + """The Abort Copy From URL operation aborts a pending Copy From URL operation, and leaves a + destination blob with zero length and full metadata. + + :keyword copy_id: The copy identifier provided in the x-ms-copy-id header of the original Copy + Blob operation. Required. + :paramtype copy_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + copy_action_abort_constant: Literal["abort"] = kwargs.pop( + "copy_action_abort_constant", _headers.pop("x-ms-copy-action", "abort") + ) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_abort_copy_from_url_request( + copy_id=copy_id, + timeout=timeout, + lease_id=lease_id, + content_type=content_type, + copy_action_abort_constant=copy_action_abort_constant, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def set_tier( + self, + *, + tier: Union[str, _models.AccessTier], + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + timeout: Optional[int] = None, + rehydrate_priority: Optional[Union[str, _models.RehydratePriority]] = None, + lease_id: Optional[str] = None, + if_tags: Optional[str] = None, + **kwargs: Any + ) -> None: + """The Set Tier operation sets the tier on a block blob. The operation is allowed on a page blob + or block blob, but not on an append blob. A block blob's tier determines Hot/Cool/Archive + storage type. This operation does not update the blob's ETag. + + :keyword tier: Indicates the tier to be set on the blob. Known values are: "P4", "P6", "P10", + "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", + and "Cold". Required. + :paramtype tier: str or ~azure.storage.blobs.models.AccessTier + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword rehydrate_priority: If an object is in rehydrate pending state then this header is + returned with priority of rehydrate. Valid values are High and Standard. Known values are: + "High" and "Standard". Default value is None. + :paramtype rehydrate_priority: str or ~azure.storage.blobs.models.RehydratePriority + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_set_tier_request( + tier=tier, + snapshot=snapshot, + version_id=version_id, + timeout=timeout, + rehydrate_priority=rehydrate_priority, + lease_id=lease_id, + if_tags=if_tags, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def get_account_info(self, *, timeout: Optional[int] = None, **kwargs: Any) -> None: + """Returns the sku name and account kind. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_blob_get_account_info_request( + timeout=timeout, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-account-kind"] = self._deserialize("str", response.headers.get("x-ms-account-kind")) + response_headers["x-ms-sku-name"] = self._deserialize("str", response.headers.get("x-ms-sku-name")) + response_headers["x-ms-is-hns-enabled"] = self._deserialize("bool", response.headers.get("x-ms-is-hns-enabled")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + @api_version_validation( + params_added_on={"2026-02-06": ["if_modified_since", "if_unmodified_since", "if_match", "if_none_match"]}, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + async def get_tags( + self, + *, + timeout: Optional[int] = None, + snapshot: Optional[str] = None, + version_id: Optional[str] = None, + lease_id: Optional[str] = None, + if_tags: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any + ) -> _models.BlobTags: + """The Get Blob Tags operation enables users to get tags on a blob. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword if_modified_since: Specify this header value to operate only on a blob if it has been + modified since the specified date/time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: Specify this header value to operate only on a blob if it has not + been modified since the specified date/time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype if_match: str + :keyword if_none_match: Specify an ETag value to operate only on blobs without a matching + value. Default value is None. + :paramtype if_none_match: str + :return: BlobTags. The BlobTags is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.BlobTags + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.BlobTags] = kwargs.pop("cls", None) + + _request = build_blob_get_tags_request( + timeout=timeout, + snapshot=snapshot, + version_id=version_id, + lease_id=lease_id, + if_tags=if_tags, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.BlobTags, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + @api_version_validation( + params_added_on={"2026-02-06": ["if_modified_since", "if_unmodified_since", "if_match", "if_none_match"]}, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + async def set_tags( # pylint: disable=too-many-locals + self, + tags: _models.BlobTags, + *, + timeout: Optional[int] = None, + version_id: Optional[str] = None, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + if_tags: Optional[str] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any + ) -> None: + """The Set Tags operation enables users to set tags on a blob. + + :param tags: The blob tags. Required. + :type tags: ~azure.storage.blobs.models.BlobTags + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword version_id: The version id parameter is an opaque DateTime value that, when present, + specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. + Default value is None. + :paramtype version_id: str + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword transactional_content_crc64: Specify the transactional crc64 for the body, to be + validated by the service. Default value is None. + :paramtype transactional_content_crc64: bytes + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: Specify this header value to operate only on a blob if it has been + modified since the specified date/time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: Specify this header value to operate only on a blob if it has not + been modified since the specified date/time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype if_match: str + :keyword if_none_match: Specify an ETag value to operate only on blobs without a matching + value. Default value is None. + :paramtype if_none_match: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = _get_element(tags) + + _request = build_blob_set_tags_request( + timeout=timeout, + version_id=version_id, + transactional_content_md5=transactional_content_md5, + transactional_content_crc64=transactional_content_crc64, + if_tags=if_tags, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + +class _PageBlobClientOperationsMixin( + ClientMixinABC[AsyncPipelineClient[HttpRequest, AsyncHttpResponse], PageBlobClientConfiguration] +): + + @distributed_trace_async + async def create( # pylint: disable=too-many-locals + self, + *, + size: int, + metadata: Optional[str] = None, + timeout: Optional[int] = None, + tier: Optional[Union[str, _models.PremiumPageBlobAccessTier]] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_cache_control: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_sequence_number: Optional[int] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Create operation creates a new page blob. + + :keyword size: This header specifies the maximum size for the page blob, up to 1 TB. The page + blob size must be aligned to a 512-byte boundary. Required. + :paramtype size: int + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword tier: Optional. Indicates the tier to be set on the page blob. Known values are: "P4", + "P6", "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", and "P80". Default value is None. + :paramtype tier: str or ~azure.storage.blobs.models.PremiumPageBlobAccessTier + :keyword blob_content_type: Optional. Sets the blob's content type. If specified, this property + is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_type: str + :keyword blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_encoding: str + :keyword blob_content_language: Optional. Set the blob's content language. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_language: str + :keyword blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is + not validated, as the hashes for the individual blocks were validated when each was uploaded. + Default value is None. + :paramtype blob_content_md5: bytes + :keyword blob_cache_control: Optional. Sets the blob's cache control. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_cache_control: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_content_disposition: Optional. Sets the blob's content disposition. If specified, + this property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_disposition: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword blob_sequence_number: Set for page blobs only. The sequence number is a + user-controlled value that you can use to track requests. The value of the sequence number must + be between 0 and 2^63 - 1. Default value is None. + :paramtype blob_sequence_number: int + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword immutability_policy_expiry: Specifies the date time when the blobs immutability policy + is set to expire. Default value is None. + :paramtype immutability_policy_expiry: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword legal_hold: Specified if a legal hold should be set on the blob. Default value is + None. + :paramtype legal_hold: bool + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + content_length: Literal[0] = kwargs.pop("content_length", _headers.pop("Content-Length", 0)) + blob_type: Literal["PageBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "PageBlob")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_page_blob_create_request( + size=size, + metadata=metadata, + timeout=timeout, + tier=tier, + blob_content_type=blob_content_type, + blob_content_encoding=blob_content_encoding, + blob_content_language=blob_content_language, + blob_content_md5=blob_content_md5, + blob_cache_control=blob_cache_control, + lease_id=lease_id, + blob_content_disposition=blob_content_disposition, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + blob_sequence_number=blob_sequence_number, + blob_tags_string=blob_tags_string, + immutability_policy_expiry=immutability_policy_expiry, + immutability_policy_mode=immutability_policy_mode, + legal_hold=legal_hold, + etag=etag, + match_condition=match_condition, + content_length=content_length, + blob_type=blob_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def upload_pages( # pylint: disable=too-many-locals + self, + body: bytes, + *, + content_length: int, + range: str, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_sequence_number_less_than_or_equal_to: Optional[int] = None, + if_sequence_number_less_than: Optional[int] = None, + if_sequence_number_equal_to: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + structured_body_type: Optional[str] = None, + structured_content_length: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Upload Pages operation writes a range of pages to a page blob. + + :param body: The body of the request. Required. + :type body: bytes + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword range: Bytes of data in the specified range. Required. + :paramtype range: str + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword transactional_content_crc64: Specify the transactional crc64 for the body, to be + validated by the service. Default value is None. + :paramtype transactional_content_crc64: bytes + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_sequence_number_less_than_or_equal_to: Specify this header value to operate only on + a blob if it has a sequence number less than or equal to the specified. Default value is None. + :paramtype if_sequence_number_less_than_or_equal_to: int + :keyword if_sequence_number_less_than: Specify this header value to operate only on a blob if + it has a sequence number less than the specified. Default value is None. + :paramtype if_sequence_number_less_than: int + :keyword if_sequence_number_equal_to: Specify this header value to operate only on a blob if it + has the specified sequence number. Default value is None. + :paramtype if_sequence_number_equal_to: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword structured_body_type: Required if the request body is a structured message. Specifies + the message schema version and properties. Default value is None. + :paramtype structured_body_type: str + :keyword structured_content_length: Required if the request body is a structured message. + Specifies the length of the blob/file content inside the message body. Will always be smaller + than Content-Length. Default value is None. + :paramtype structured_content_length: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + page_write: Literal["update"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "update")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = body + + _request = build_page_blob_upload_pages_request( + content_length=content_length, + range=range, + transactional_content_md5=transactional_content_md5, + transactional_content_crc64=transactional_content_crc64, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_sequence_number_less_than_or_equal_to=if_sequence_number_less_than_or_equal_to, + if_sequence_number_less_than=if_sequence_number_less_than, + if_sequence_number_equal_to=if_sequence_number_equal_to, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + structured_body_type=structured_body_type, + structured_content_length=structured_content_length, + etag=etag, + match_condition=match_condition, + content_type=content_type, + page_write=page_write, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-structured-body"] = self._deserialize( + "str", response.headers.get("x-ms-structured-body") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def clear_pages( # pylint: disable=too-many-locals + self, + *, + range: str, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_sequence_number_less_than_or_equal_to: Optional[int] = None, + if_sequence_number_less_than: Optional[int] = None, + if_sequence_number_equal_to: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Clear Pages operation clears a range of pages from a page blob. + + :keyword range: Bytes of data in the specified range. Required. + :paramtype range: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_sequence_number_less_than_or_equal_to: Specify this header value to operate only on + a blob if it has a sequence number less than or equal to the specified. Default value is None. + :paramtype if_sequence_number_less_than_or_equal_to: int + :keyword if_sequence_number_less_than: Specify this header value to operate only on a blob if + it has a sequence number less than the specified. Default value is None. + :paramtype if_sequence_number_less_than: int + :keyword if_sequence_number_equal_to: Specify this header value to operate only on a blob if it + has the specified sequence number. Default value is None. + :paramtype if_sequence_number_equal_to: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + content_length: Literal[0] = kwargs.pop("content_length", _headers.pop("Content-Length", 0)) + page_write: Literal["clear"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "clear")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_page_blob_clear_pages_request( + range=range, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_sequence_number_less_than_or_equal_to=if_sequence_number_less_than_or_equal_to, + if_sequence_number_less_than=if_sequence_number_less_than, + if_sequence_number_equal_to=if_sequence_number_equal_to, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_length=content_length, + page_write=page_write, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + @api_version_validation( + params_added_on={ + "2026-04-06": ["source_encryption_key", "source_encryption_key_sha256", "source_encryption_algorithm"] + }, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + async def upload_pages_from_url( # pylint: disable=too-many-locals + self, + *, + source_url: str, + source_range: str, + content_length: int, + range: str, + source_content_md5: Optional[bytes] = None, + source_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + lease_id: Optional[str] = None, + if_sequence_number_less_than_or_equal_to: Optional[int] = None, + if_sequence_number_less_than: Optional[int] = None, + if_sequence_number_equal_to: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + copy_source_authorization: Optional[str] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + source_encryption_key: Optional[str] = None, + source_encryption_key_sha256: Optional[str] = None, + source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Upload Pages operation writes a range of pages to a page blob where the contents are read + from a URL. + + :keyword source_url: Specify a URL to the copy source. Required. + :paramtype source_url: str + :keyword source_range: Bytes of source data in the specified range. The length of this range + should match the ContentLength header and x-ms-range/Range destination range header. Required. + :paramtype source_range: str + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword range: Bytes of source data in the specified range. The length of this range should + match the ContentLength header and x-ms-range/Range destination range header. Required. + :paramtype range: str + :keyword source_content_md5: Specify the md5 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_md5: bytes + :keyword source_content_crc64: Specify the crc64 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_crc64: bytes + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_sequence_number_less_than_or_equal_to: Specify this header value to operate only on + a blob if it has a sequence number less than or equal to the specified. Default value is None. + :paramtype if_sequence_number_less_than_or_equal_to: int + :keyword if_sequence_number_less_than: Specify this header value to operate only on a blob if + it has a sequence number less than the specified. Default value is None. + :paramtype if_sequence_number_less_than: int + :keyword if_sequence_number_equal_to: Specify this header value to operate only on a blob if it + has the specified sequence number. Default value is None. + :paramtype if_sequence_number_equal_to: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword source_if_modified_since: Specify this header value to operate only on a blob if it + has been modified since the specified date/time. Default value is None. + :paramtype source_if_modified_since: ~datetime.datetime + :keyword source_if_unmodified_since: Specify this header value to operate only on a blob if it + has not been modified since the specified date/time. Default value is None. + :paramtype source_if_unmodified_since: ~datetime.datetime + :keyword source_if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype source_if_match: str + :keyword source_if_none_match: Specify this header value to operate only on a blob if it has + been modified since the specified date/time. Default value is None. + :paramtype source_if_none_match: str + :keyword copy_source_authorization: Only Bearer type is supported. Credentials should be a + valid OAuth access token to copy source. Default value is None. + :paramtype copy_source_authorization: str + :keyword file_request_intent: Valid value is backup. "backup" Default value is None. + :paramtype file_request_intent: str or ~azure.storage.blobs.models.FileShareTokenIntent + :keyword source_encryption_key: Optional. Specifies the source encryption key to use to encrypt + the source data provided in the request. Default value is None. + :paramtype source_encryption_key: str + :keyword source_encryption_key_sha256: The SHA-256 hash of the provided source encryption key. + Must be provided if the x-ms-source-encryption-key header is provided. Default value is None. + :paramtype source_encryption_key_sha256: str + :keyword source_encryption_algorithm: The algorithm used to produce the source encryption key + hash. Currently, the only accepted value is "AES256". Must be provided if the + x-ms-source-encryption-key is provided. "AES256" Default value is None. + :paramtype source_encryption_algorithm: str or + ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + page_write: Literal["update"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "update")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_page_blob_upload_pages_from_url_request( + source_url=source_url, + source_range=source_range, + content_length=content_length, + range=range, + source_content_md5=source_content_md5, + source_content_crc64=source_content_crc64, + timeout=timeout, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + lease_id=lease_id, + if_sequence_number_less_than_or_equal_to=if_sequence_number_less_than_or_equal_to, + if_sequence_number_less_than=if_sequence_number_less_than, + if_sequence_number_equal_to=if_sequence_number_equal_to, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + source_if_modified_since=source_if_modified_since, + source_if_unmodified_since=source_if_unmodified_since, + source_if_match=source_if_match, + source_if_none_match=source_if_none_match, + copy_source_authorization=copy_source_authorization, + file_request_intent=file_request_intent, + source_encryption_key=source_encryption_key, + source_encryption_key_sha256=source_encryption_key_sha256, + source_encryption_algorithm=source_encryption_algorithm, + etag=etag, + match_condition=match_condition, + page_write=page_write, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def get_page_ranges( # pylint: disable=too-many-locals + self, + *, + snapshot: Optional[str] = None, + timeout: Optional[int] = None, + range: Optional[str] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> _models.PageList: + """The Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot + of a page blob. + + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword range: Return only the bytes of the blob in the specified range. Default value is + None. + :paramtype range: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: PageList. The PageList is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.PageList + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.PageList] = kwargs.pop("cls", None) + + _request = build_page_blob_get_page_ranges_request( + snapshot=snapshot, + timeout=timeout, + range=range, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + marker=marker, + maxresults=maxresults, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["x-ms-blob-content-length"] = self._deserialize( + "int", response.headers.get("x-ms-blob-content-length") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.PageList, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_page_ranges_diff( # pylint: disable=too-many-locals + self, + *, + snapshot: Optional[str] = None, + timeout: Optional[int] = None, + prevsnapshot: Optional[str] = None, + prev_snapshot_url: Optional[str] = None, + range: Optional[str] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + marker: Optional[str] = None, + maxresults: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> _models.PageList: + """The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob or + snapshot of a page blob. + + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword prevsnapshot: Optional in version 2015-07-08 and newer. The prevsnapshot parameter is + a DateTime value that specifies that the response will contain only pages that were changed + between target blob and previous snapshot. Changed pages include both updated and cleared + pages. The target blob may be a snapshot, as long as the snapshot specified by prevsnapshot is + the older of the two. Note that incremental snapshots are currently supported only for blobs + created on or after January 1, 2016. Default value is None. + :paramtype prevsnapshot: str + :keyword prev_snapshot_url: Optional. This header is only supported in service versions + 2019-04-19 and after and specifies the URL of a previous snapshot of the target blob. The + response will only contain pages that were changed between the target blob and its previous + snapshot. Default value is None. + :paramtype prev_snapshot_url: str + :keyword range: Return only the bytes of the blob in the specified range. Default value is + None. + :paramtype range: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword marker: A string value that identifies the portion of the list of containers to be + returned with the next listing operation. The operation returns the NextMarker value within the + response body if the listing operation did not return all containers remaining to be listed + with the current page. The NextMarker value can be used as the value for the marker parameter + in a subsequent call to request the next page of list items. The marker value is opaque to the + client. Default value is None. + :paramtype marker: str + :keyword maxresults: Specifies the maximum number of containers to return. If the request does + not specify maxresults, or specifies a value greater than 5000, the server will return up to + 5000 items. Default value is None. + :paramtype maxresults: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: PageList. The PageList is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.PageList + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.PageList] = kwargs.pop("cls", None) + + _request = build_page_blob_get_page_ranges_diff_request( + snapshot=snapshot, + timeout=timeout, + prevsnapshot=prevsnapshot, + prev_snapshot_url=prev_snapshot_url, + range=range, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + marker=marker, + maxresults=maxresults, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["x-ms-blob-content-length"] = self._deserialize( + "int", response.headers.get("x-ms-blob-content-length") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.PageList, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def resize( # pylint: disable=too-many-locals + self, + *, + size: int, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Resize operation increases the size of the page blob to the specified size. + + :keyword size: This header specifies the maximum size for the page blob, up to 1 TB. The page + blob size must be aligned to a 512-byte boundary. Required. + :paramtype size: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_page_blob_resize_request( + size=size, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def set_sequence_number( + self, + *, + sequence_number_action: Union[str, _models.SequenceNumberActionType], + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_sequence_number: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Update Sequence Number operation sets the blob's sequence number. The operation will fail + if the specified sequence number is less than the current sequence number of the blob. + + :keyword sequence_number_action: Required if the x-ms-blob-sequence-number header is set for + the request. This property applies to page blobs only. This property indicates how the service + should modify the blob's sequence number. Known values are: "increment", "max", and "update". + Required. + :paramtype sequence_number_action: str or ~azure.storage.blobs.models.SequenceNumberActionType + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword blob_sequence_number: Set for page blobs only. The sequence number is a + user-controlled value that you can use to track requests. The value of the sequence number must + be between 0 and 2^63 - 1. Default value is None. + :paramtype blob_sequence_number: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_page_blob_set_sequence_number_request( + sequence_number_action=sequence_number_action, + timeout=timeout, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + blob_sequence_number=blob_sequence_number, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def copy_incremental( + self, + *, + copy_source: str, + timeout: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Copy Incremental operation copies a snapshot of the source page blob to a destination page + blob. The snapshot is copied such that only the differential changes between the previously + copied snapshot are transferred to the destination. The copied snapshots are complete copies of + the original snapshot and can be read or copied from as usual. This API is supported since REST + version 2016-05-31. + + :keyword copy_source: Specifies the name of the source page blob snapshot. This value is a URL + of up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as + it would appear in a request URI. The source blob must either be public or must be + authenticated via a shared access signature. Required. + :paramtype copy_source: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_page_blob_copy_incremental_request( + copy_source=copy_source, + timeout=timeout, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + +class _AppendBlobClientOperationsMixin( + ClientMixinABC[AsyncPipelineClient[HttpRequest, AsyncHttpResponse], AppendBlobClientConfiguration] +): + + @distributed_trace_async + async def create( # pylint: disable=too-many-locals + self, + *, + metadata: Optional[str] = None, + timeout: Optional[int] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_cache_control: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Create operation creates a new append blob. + + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword blob_content_type: Optional. Sets the blob's content type. If specified, this property + is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_type: str + :keyword blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_encoding: str + :keyword blob_content_language: Optional. Set the blob's content language. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_language: str + :keyword blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is + not validated, as the hashes for the individual blocks were validated when each was uploaded. + Default value is None. + :paramtype blob_content_md5: bytes + :keyword blob_cache_control: Optional. Sets the blob's cache control. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_cache_control: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_content_disposition: Optional. Sets the blob's content disposition. If specified, + this property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_disposition: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword immutability_policy_expiry: Specifies the date time when the blobs immutability policy + is set to expire. Default value is None. + :paramtype immutability_policy_expiry: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword legal_hold: Specified if a legal hold should be set on the blob. Default value is + None. + :paramtype legal_hold: bool + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + content_length: Literal[0] = kwargs.pop("content_length", _headers.pop("Content-Length", 0)) + blob_type: Literal["AppendBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "AppendBlob")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_append_blob_create_request( + metadata=metadata, + timeout=timeout, + blob_content_type=blob_content_type, + blob_content_encoding=blob_content_encoding, + blob_content_language=blob_content_language, + blob_content_md5=blob_content_md5, + blob_cache_control=blob_cache_control, + lease_id=lease_id, + blob_content_disposition=blob_content_disposition, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + blob_tags_string=blob_tags_string, + immutability_policy_expiry=immutability_policy_expiry, + immutability_policy_mode=immutability_policy_mode, + legal_hold=legal_hold, + etag=etag, + match_condition=match_condition, + content_length=content_length, + blob_type=blob_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def append_block( # pylint: disable=too-many-locals + self, + body: bytes, + *, + content_length: int, + timeout: Optional[int] = None, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + lease_id: Optional[str] = None, + max_size: Optional[int] = None, + append_position: Optional[int] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + structured_body_type: Optional[str] = None, + structured_content_length: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Append Block operation commits a new block of data to the end of an append blob. + + :param body: The body of the request. Required. + :type body: bytes + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword transactional_content_crc64: Specify the transactional crc64 for the body, to be + validated by the service. Default value is None. + :paramtype transactional_content_crc64: bytes + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword max_size: Optional conditional header. The max length in bytes permitted for the + append blob. If the Append Block operation would cause the blob to exceed that limit or if the + blob size is already greater than the value specified in this header, the request will fail + with MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed). Default + value is None. + :paramtype max_size: int + :keyword append_position: Optional conditional header, used only for the Append Block + operation. A number indicating the byte offset to compare. Append Block will succeed only if + the append position is equal to this number. If it is not, the request will fail with the + AppendPositionConditionNotMet error (HTTP status code 412 - Precondition Failed). Default value + is None. + :paramtype append_position: int + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword structured_body_type: Required if the request body is a structured message. Specifies + the message schema version and properties. Default value is None. + :paramtype structured_body_type: str + :keyword structured_content_length: Required if the request body is a structured message. + Specifies the length of the blob/file content inside the message body. Will always be smaller + than Content-Length. Default value is None. + :paramtype structured_content_length: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = body + + _request = build_append_blob_append_block_request( + content_length=content_length, + timeout=timeout, + transactional_content_md5=transactional_content_md5, + transactional_content_crc64=transactional_content_crc64, + lease_id=lease_id, + max_size=max_size, + append_position=append_position, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + structured_body_type=structured_body_type, + structured_content_length=structured_content_length, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-blob-append-offset"] = self._deserialize( + "str", response.headers.get("x-ms-blob-append-offset") + ) + response_headers["x-ms-blob-committed-block-count"] = self._deserialize( + "int", response.headers.get("x-ms-blob-committed-block-count") + ) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-structured-body"] = self._deserialize( + "str", response.headers.get("x-ms-structured-body") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + @api_version_validation( + params_added_on={ + "2026-04-06": ["source_encryption_key", "source_encryption_key_sha256", "source_encryption_algorithm"] + }, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + async def append_block_from_url( # pylint: disable=too-many-locals + self, + *, + source_url: str, + content_length: int, + source_range: Optional[str] = None, + source_content_md5: Optional[bytes] = None, + source_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + transactional_content_md5: Optional[bytes] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + lease_id: Optional[str] = None, + max_size: Optional[int] = None, + append_position: Optional[int] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + copy_source_authorization: Optional[str] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + source_encryption_key: Optional[str] = None, + source_encryption_key_sha256: Optional[str] = None, + source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Append Block From URL operation creates a new block to be committed as part of an append + blob where the contents are read from a URL. + + :keyword source_url: Specify a URL to the copy source. Required. + :paramtype source_url: str + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword source_range: Bytes of source data in the specified range. Default value is None. + :paramtype source_range: str + :keyword source_content_md5: Specify the md5 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_md5: bytes + :keyword source_content_crc64: Specify the crc64 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_crc64: bytes + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword max_size: Optional conditional header. The max length in bytes permitted for the + append blob. If the Append Block operation would cause the blob to exceed that limit or if the + blob size is already greater than the value specified in this header, the request will fail + with MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed). Default + value is None. + :paramtype max_size: int + :keyword append_position: Optional conditional header, used only for the Append Block + operation. A number indicating the byte offset to compare. Append Block will succeed only if + the append position is equal to this number. If it is not, the request will fail with the + AppendPositionConditionNotMet error (HTTP status code 412 - Precondition Failed). Default value + is None. + :paramtype append_position: int + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword source_if_modified_since: Specify this header value to operate only on a blob if it + has been modified since the specified date/time. Default value is None. + :paramtype source_if_modified_since: ~datetime.datetime + :keyword source_if_unmodified_since: Specify this header value to operate only on a blob if it + has not been modified since the specified date/time. Default value is None. + :paramtype source_if_unmodified_since: ~datetime.datetime + :keyword source_if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype source_if_match: str + :keyword source_if_none_match: Specify this header value to operate only on a blob if it has + been modified since the specified date/time. Default value is None. + :paramtype source_if_none_match: str + :keyword copy_source_authorization: Only Bearer type is supported. Credentials should be a + valid OAuth access token to copy source. Default value is None. + :paramtype copy_source_authorization: str + :keyword file_request_intent: Valid value is backup. "backup" Default value is None. + :paramtype file_request_intent: str or ~azure.storage.blobs.models.FileShareTokenIntent + :keyword source_encryption_key: Optional. Specifies the source encryption key to use to encrypt + the source data provided in the request. Default value is None. + :paramtype source_encryption_key: str + :keyword source_encryption_key_sha256: The SHA-256 hash of the provided source encryption key. + Must be provided if the x-ms-source-encryption-key header is provided. Default value is None. + :paramtype source_encryption_key_sha256: str + :keyword source_encryption_algorithm: The algorithm used to produce the source encryption key + hash. Currently, the only accepted value is "AES256". Must be provided if the + x-ms-source-encryption-key is provided. "AES256" Default value is None. + :paramtype source_encryption_algorithm: str or + ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_append_blob_append_block_from_url_request( + source_url=source_url, + content_length=content_length, + source_range=source_range, + source_content_md5=source_content_md5, + source_content_crc64=source_content_crc64, + timeout=timeout, + transactional_content_md5=transactional_content_md5, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + lease_id=lease_id, + max_size=max_size, + append_position=append_position, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + source_if_modified_since=source_if_modified_since, + source_if_unmodified_since=source_if_unmodified_since, + source_if_match=source_if_match, + source_if_none_match=source_if_none_match, + copy_source_authorization=copy_source_authorization, + file_request_intent=file_request_intent, + source_encryption_key=source_encryption_key, + source_encryption_key_sha256=source_encryption_key_sha256, + source_encryption_algorithm=source_encryption_algorithm, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-blob-append-offset"] = self._deserialize( + "str", response.headers.get("x-ms-blob-append-offset") + ) + response_headers["x-ms-blob-committed-block-count"] = self._deserialize( + "int", response.headers.get("x-ms-blob-committed-block-count") + ) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def seal( + self, + *, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + append_position: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Seal operation seals the Append Blob to make it read-only. Seal is supported only on + version 2019-12-12 version or later. + + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword append_position: Optional conditional header, used only for the Append Block + operation. A number indicating the byte offset to compare. Append Block will succeed only if + the append position is equal to this number. If it is not, the request will fail with the + AppendPositionConditionNotMet error (HTTP status code 412 - Precondition Failed). Default value + is None. + :paramtype append_position: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_append_blob_seal_request( + timeout=timeout, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + append_position=append_position, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + +class _BlockBlobClientOperationsMixin( + ClientMixinABC[AsyncPipelineClient[HttpRequest, AsyncHttpResponse], BlockBlobClientConfiguration] +): + + @distributed_trace_async + async def upload( # pylint: disable=too-many-locals + self, + body: bytes, + *, + content_length: int, + metadata: Optional[str] = None, + timeout: Optional[int] = None, + transactional_content_md5: Optional[bytes] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_cache_control: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + transactional_content_crc64: Optional[bytes] = None, + structured_body_type: Optional[str] = None, + structured_content_length: Optional[int] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Upload Block Blob operation updates the content of an existing block blob. Updating an + existing block blob overwrites any existing metadata on the blob. Partial updates are not + supported with Put Blob; the content of the existing blob is overwritten with the content of + the new blob. To perform a partial update of the content of a block blob, use the Put Block + List operation. + + :param body: The body of the request. Required. + :type body: bytes + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword blob_content_type: Optional. Sets the blob's content type. If specified, this property + is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_type: str + :keyword blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_encoding: str + :keyword blob_content_language: Optional. Set the blob's content language. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_language: str + :keyword blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is + not validated, as the hashes for the individual blocks were validated when each was uploaded. + Default value is None. + :paramtype blob_content_md5: bytes + :keyword blob_cache_control: Optional. Sets the blob's cache control. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_cache_control: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_content_disposition: Optional. Sets the blob's content disposition. If specified, + this property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_disposition: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword tier: The tier to be set on the blob. Known values are: "P4", "P6", "P10", "P15", + "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", and + "Cold". Default value is None. + :paramtype tier: str or ~azure.storage.blobs.models.AccessTier + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword immutability_policy_expiry: Specifies the date time when the blobs immutability policy + is set to expire. Default value is None. + :paramtype immutability_policy_expiry: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword legal_hold: Specified if a legal hold should be set on the blob. Default value is + None. + :paramtype legal_hold: bool + :keyword transactional_content_crc64: Specify the transactional crc64 for the body, to be + validated by the service. Default value is None. + :paramtype transactional_content_crc64: bytes + :keyword structured_body_type: Required if the request body is a structured message. Specifies + the message schema version and properties. Default value is None. + :paramtype structured_body_type: str + :keyword structured_content_length: Required if the request body is a structured message. + Specifies the length of the blob/file content inside the message body. Will always be smaller + than Content-Length. Default value is None. + :paramtype structured_content_length: int + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + blob_type: Literal["BlockBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "BlockBlob")) + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = body + + _request = build_block_blob_upload_request( + content_length=content_length, + metadata=metadata, + timeout=timeout, + transactional_content_md5=transactional_content_md5, + blob_content_type=blob_content_type, + blob_content_encoding=blob_content_encoding, + blob_content_language=blob_content_language, + blob_content_md5=blob_content_md5, + blob_cache_control=blob_cache_control, + lease_id=lease_id, + blob_content_disposition=blob_content_disposition, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + tier=tier, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + blob_tags_string=blob_tags_string, + immutability_policy_expiry=immutability_policy_expiry, + immutability_policy_mode=immutability_policy_mode, + legal_hold=legal_hold, + transactional_content_crc64=transactional_content_crc64, + structured_body_type=structured_body_type, + structured_content_length=structured_content_length, + etag=etag, + match_condition=match_condition, + content_type=content_type, + blob_type=blob_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-structured-body"] = self._deserialize( + "str", response.headers.get("x-ms-structured-body") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + @api_version_validation( + params_added_on={ + "2026-04-06": ["source_encryption_key", "source_encryption_key_sha256", "source_encryption_algorithm"] + }, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + async def upload_blob_from_url( # pylint: disable=too-many-locals + self, + *, + copy_source: str, + metadata: Optional[str] = None, + timeout: Optional[int] = None, + transactional_content_md5: Optional[bytes] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_cache_control: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + source_if_tags: Optional[str] = None, + source_content_md5: Optional[bytes] = None, + blob_tags_string: Optional[str] = None, + copy_source_blob_properties: Optional[bool] = None, + copy_source_authorization: Optional[str] = None, + copy_source_tags: Optional[Union[str, _models.BlobCopySourceTags]] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + source_encryption_key: Optional[str] = None, + source_encryption_key_sha256: Optional[str] = None, + source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Put Blob from URL operation creates a new Block Blob where the contents of the blob are + read from a given URL. This API is supported beginning with the 2020-04-08 version. Partial + updates are not supported with Put Blob from URL; the content of an existing blob is + overwritten with the content of the new blob. To perform partial updates to a block blob’s + contents using a source URL, use the Put Block from URL API in conjunction with Put Block List. + + :keyword copy_source: Specifies the name of the source page blob snapshot. This value is a URL + of up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as + it would appear in a request URI. The source blob must either be public or must be + authenticated via a shared access signature. Required. + :paramtype copy_source: str + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword blob_content_type: Optional. Sets the blob's content type. If specified, this property + is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_type: str + :keyword blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_encoding: str + :keyword blob_content_language: Optional. Set the blob's content language. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_language: str + :keyword blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is + not validated, as the hashes for the individual blocks were validated when each was uploaded. + Default value is None. + :paramtype blob_content_md5: bytes + :keyword blob_cache_control: Optional. Sets the blob's cache control. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_cache_control: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_content_disposition: Optional. Sets the blob's content disposition. If specified, + this property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_disposition: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword tier: The tier to be set on the blob. Known values are: "P4", "P6", "P10", "P15", + "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", and + "Cold". Default value is None. + :paramtype tier: str or ~azure.storage.blobs.models.AccessTier + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword source_if_modified_since: Specify this header value to operate only on a blob if it + has been modified since the specified date/time. Default value is None. + :paramtype source_if_modified_since: ~datetime.datetime + :keyword source_if_unmodified_since: Specify this header value to operate only on a blob if it + has not been modified since the specified date/time. Default value is None. + :paramtype source_if_unmodified_since: ~datetime.datetime + :keyword source_if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype source_if_match: str + :keyword source_if_none_match: Specify this header value to operate only on a blob if it has + been modified since the specified date/time. Default value is None. + :paramtype source_if_none_match: str + :keyword source_if_tags: Specify a SQL where clause on blob tags to operate only on blobs with + a matching value. Default value is None. + :paramtype source_if_tags: str + :keyword source_content_md5: Specify the md5 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_md5: bytes + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword copy_source_blob_properties: Optional, default is true. Indicates if properties from + the source blob should be copied. Default value is None. + :paramtype copy_source_blob_properties: bool + :keyword copy_source_authorization: Only Bearer type is supported. Credentials should be a + valid OAuth access token to copy source. Default value is None. + :paramtype copy_source_authorization: str + :keyword copy_source_tags: Optional, default 'replace'. Indicates if source tags should be + copied or replaced with the tags specified by x-ms-tags. Known values are: "REPLACE" and + "COPY". Default value is None. + :paramtype copy_source_tags: str or ~azure.storage.blobs.models.BlobCopySourceTags + :keyword file_request_intent: Valid value is backup. "backup" Default value is None. + :paramtype file_request_intent: str or ~azure.storage.blobs.models.FileShareTokenIntent + :keyword source_encryption_key: Optional. Specifies the source encryption key to use to encrypt + the source data provided in the request. Default value is None. + :paramtype source_encryption_key: str + :keyword source_encryption_key_sha256: The SHA-256 hash of the provided source encryption key. + Must be provided if the x-ms-source-encryption-key header is provided. Default value is None. + :paramtype source_encryption_key_sha256: str + :keyword source_encryption_algorithm: The algorithm used to produce the source encryption key + hash. Currently, the only accepted value is "AES256". Must be provided if the + x-ms-source-encryption-key is provided. "AES256" Default value is None. + :paramtype source_encryption_algorithm: str or + ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + content_length: Literal[0] = kwargs.pop("content_length", _headers.pop("Content-Length", 0)) + blob_type: Literal["BlockBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "BlockBlob")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_block_blob_upload_blob_from_url_request( + copy_source=copy_source, + metadata=metadata, + timeout=timeout, + transactional_content_md5=transactional_content_md5, + blob_content_type=blob_content_type, + blob_content_encoding=blob_content_encoding, + blob_content_language=blob_content_language, + blob_content_md5=blob_content_md5, + blob_cache_control=blob_cache_control, + lease_id=lease_id, + blob_content_disposition=blob_content_disposition, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + tier=tier, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + source_if_modified_since=source_if_modified_since, + source_if_unmodified_since=source_if_unmodified_since, + source_if_match=source_if_match, + source_if_none_match=source_if_none_match, + source_if_tags=source_if_tags, + source_content_md5=source_content_md5, + blob_tags_string=blob_tags_string, + copy_source_blob_properties=copy_source_blob_properties, + copy_source_authorization=copy_source_authorization, + copy_source_tags=copy_source_tags, + file_request_intent=file_request_intent, + source_encryption_key=source_encryption_key, + source_encryption_key_sha256=source_encryption_key_sha256, + source_encryption_algorithm=source_encryption_algorithm, + etag=etag, + match_condition=match_condition, + content_length=content_length, + blob_type=blob_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def stage_block( # pylint: disable=too-many-locals + self, + body: bytes, + *, + block_id: bytes, + content_length: int, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + structured_body_type: Optional[str] = None, + structured_content_length: Optional[int] = None, + **kwargs: Any + ) -> None: + """The Stage Block operation creates a new block to be committed as part of a blob. + + :param body: The body of the request. Required. + :type body: bytes + :keyword block_id: A valid Base64 string value that identifies the block. Prior to encoding, + the string must be less than or equal to 64 bytes in size. For a given blob, the length of the + value specified for the blockid parameter must be the same size for each block. Required. + :paramtype block_id: bytes + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword transactional_content_crc64: Specify the transactional crc64 for the body, to be + validated by the service. Default value is None. + :paramtype transactional_content_crc64: bytes + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword structured_body_type: Required if the request body is a structured message. Specifies + the message schema version and properties. Default value is None. + :paramtype structured_body_type: str + :keyword structured_content_length: Required if the request body is a structured message. + Specifies the length of the blob/file content inside the message body. Will always be smaller + than Content-Length. Default value is None. + :paramtype structured_content_length: int + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = body + + _request = build_block_blob_stage_block_request( + block_id=block_id, + content_length=content_length, + transactional_content_md5=transactional_content_md5, + transactional_content_crc64=transactional_content_crc64, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + structured_body_type=structured_body_type, + structured_content_length=structured_content_length, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-structured-body"] = self._deserialize( + "str", response.headers.get("x-ms-structured-body") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + @api_version_validation( + params_added_on={ + "2026-04-06": ["source_encryption_key", "source_encryption_key_sha256", "source_encryption_algorithm"] + }, + api_versions_list=["2025-11-05", "2026-02-06", "2026-04-06"], + ) + async def stage_block_from_url( # pylint: disable=too-many-locals + self, + *, + block_id: bytes, + content_length: int, + source_url: str, + source_range: Optional[str] = None, + source_content_md5: Optional[bytes] = None, + source_content_crc64: Optional[bytes] = None, + timeout: Optional[int] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + lease_id: Optional[str] = None, + source_if_modified_since: Optional[datetime.datetime] = None, + source_if_unmodified_since: Optional[datetime.datetime] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + copy_source_authorization: Optional[str] = None, + file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, + source_encryption_key: Optional[str] = None, + source_encryption_key_sha256: Optional[str] = None, + source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + **kwargs: Any + ) -> None: + """The Stage Block From URL operation creates a new block to be committed as part of a blob where + the contents are read from a URL. + + :keyword block_id: A valid Base64 string value that identifies the block. Prior to encoding, + the string must be less than or equal to 64 bytes in size. For a given blob, the length of the + value specified for the blockid parameter must be the same size for each block. Required. + :paramtype block_id: bytes + :keyword content_length: The length of the request. Required. + :paramtype content_length: int + :keyword source_url: Specify a URL to the copy source. Required. + :paramtype source_url: str + :keyword source_range: Bytes of source data in the specified range. Default value is None. + :paramtype source_range: str + :keyword source_content_md5: Specify the md5 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_md5: bytes + :keyword source_content_crc64: Specify the crc64 calculated for the range of bytes that must be + read from the copy source. Default value is None. + :paramtype source_content_crc64: bytes + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword source_if_modified_since: Specify this header value to operate only on a blob if it + has been modified since the specified date/time. Default value is None. + :paramtype source_if_modified_since: ~datetime.datetime + :keyword source_if_unmodified_since: Specify this header value to operate only on a blob if it + has not been modified since the specified date/time. Default value is None. + :paramtype source_if_unmodified_since: ~datetime.datetime + :keyword source_if_match: Specify an ETag value to operate only on blobs with a matching value. + Default value is None. + :paramtype source_if_match: str + :keyword source_if_none_match: Specify this header value to operate only on a blob if it has + been modified since the specified date/time. Default value is None. + :paramtype source_if_none_match: str + :keyword copy_source_authorization: Only Bearer type is supported. Credentials should be a + valid OAuth access token to copy source. Default value is None. + :paramtype copy_source_authorization: str + :keyword file_request_intent: Valid value is backup. "backup" Default value is None. + :paramtype file_request_intent: str or ~azure.storage.blobs.models.FileShareTokenIntent + :keyword source_encryption_key: Optional. Specifies the source encryption key to use to encrypt + the source data provided in the request. Default value is None. + :paramtype source_encryption_key: str + :keyword source_encryption_key_sha256: The SHA-256 hash of the provided source encryption key. + Must be provided if the x-ms-source-encryption-key header is provided. Default value is None. + :paramtype source_encryption_key_sha256: str + :keyword source_encryption_algorithm: The algorithm used to produce the source encryption key + hash. Currently, the only accepted value is "AES256". Must be provided if the + x-ms-source-encryption-key is provided. "AES256" Default value is None. + :paramtype source_encryption_algorithm: str or + ~azure.storage.blobs.models.EncryptionAlgorithmType + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_block_blob_stage_block_from_url_request( + block_id=block_id, + content_length=content_length, + source_url=source_url, + source_range=source_range, + source_content_md5=source_content_md5, + source_content_crc64=source_content_crc64, + timeout=timeout, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + lease_id=lease_id, + source_if_modified_since=source_if_modified_since, + source_if_unmodified_since=source_if_unmodified_since, + source_if_match=source_if_match, + source_if_none_match=source_if_none_match, + copy_source_authorization=copy_source_authorization, + file_request_intent=file_request_intent, + source_encryption_key=source_encryption_key, + source_encryption_key_sha256=source_encryption_key_sha256, + source_encryption_algorithm=source_encryption_algorithm, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def commit_block_list( # pylint: disable=too-many-locals + self, + blocks: _models.BlockLookupList, + *, + timeout: Optional[int] = None, + blob_cache_control: Optional[str] = None, + blob_content_type: Optional[str] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + transactional_content_md5: Optional[bytes] = None, + transactional_content_crc64: Optional[bytes] = None, + metadata: Optional[str] = None, + lease_id: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + encryption_scope: Optional[str] = None, + tier: Optional[Union[str, _models.AccessTier]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + blob_tags_string: Optional[str] = None, + immutability_policy_expiry: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, _models.ImmutabilityPolicyMode]] = None, + legal_hold: Optional[bool] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> None: + """The Commit Block List operation writes a blob by specifying the list of block IDs that make up + the blob. In order to be written as part of a blob, a block must have been successfully written + to the server in a prior Put Block operation. You can call Put Block List to update a blob by + uploading only those blocks that have changed, then committing the new and existing blocks + together. You can do this by specifying whether to commit a block from the committed block list + or from the uncommitted block list, or to commit the most recently uploaded version of the + block, whichever list it may belong to. + + :param blocks: Blob Blocks. Required. + :type blocks: ~azure.storage.blobs.models.BlockLookupList + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword blob_cache_control: Optional. Sets the blob's cache control. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_cache_control: str + :keyword blob_content_type: Optional. Sets the blob's content type. If specified, this property + is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_type: str + :keyword blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_encoding: str + :keyword blob_content_language: Optional. Set the blob's content language. If specified, this + property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_language: str + :keyword blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is + not validated, as the hashes for the individual blocks were validated when each was uploaded. + Default value is None. + :paramtype blob_content_md5: bytes + :keyword transactional_content_md5: Optional. An MD5 hash of the blob content. Note that this + hash is not validated, as the hashes for the individual blocks were validated when each was + uploaded. Default value is None. + :paramtype transactional_content_md5: bytes + :keyword transactional_content_crc64: Specify the transactional crc64 for the body, to be + validated by the service. Default value is None. + :paramtype transactional_content_crc64: bytes + :keyword metadata: The metadata headers. Default value is None. + :paramtype metadata: str + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword blob_content_disposition: Optional. Sets the blob's content disposition. If specified, + this property is stored with the blob and returned with a read request. Default value is None. + :paramtype blob_content_disposition: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the encryption + scope to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_scope: str + :keyword tier: The tier to be set on the blob. Known values are: "P4", "P6", "P10", "P15", + "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", and + "Cold". Default value is None. + :paramtype tier: str or ~azure.storage.blobs.models.AccessTier + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword blob_tags_string: Optional. Used to set blob tags in various blob operations. Default + value is None. + :paramtype blob_tags_string: str + :keyword immutability_policy_expiry: Specifies the date time when the blobs immutability policy + is set to expire. Default value is None. + :paramtype immutability_policy_expiry: ~datetime.datetime + :keyword immutability_policy_mode: Specifies the immutability policy mode to set on the blob. + Known values are: "mutable", "locked", and "unlocked". Default value is None. + :paramtype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :keyword legal_hold: Specified if a legal hold should be set on the blob. Default value is + None. + :paramtype legal_hold: bool + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[None] = kwargs.pop("cls", None) + + _content = _get_element(blocks) + + _request = build_block_blob_commit_block_list_request( + timeout=timeout, + blob_cache_control=blob_cache_control, + blob_content_type=blob_content_type, + blob_content_encoding=blob_content_encoding, + blob_content_language=blob_content_language, + blob_content_md5=blob_content_md5, + transactional_content_md5=transactional_content_md5, + transactional_content_crc64=transactional_content_crc64, + metadata=metadata, + lease_id=lease_id, + blob_content_disposition=blob_content_disposition, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + encryption_scope=encryption_scope, + tier=tier, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + blob_tags_string=blob_tags_string, + immutability_policy_expiry=immutability_policy_expiry, + immutability_policy_mode=immutability_policy_mode, + legal_hold=legal_hold, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) + response_headers["x-ms-request-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-request-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + + if cls: + return cls(pipeline_response, None, response_headers) # type: ignore + + @distributed_trace_async + async def get_block_list( + self, + *, + list_type: Union[str, _models.BlockListType], + snapshot: Optional[str] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + if_tags: Optional[str] = None, + **kwargs: Any + ) -> _models.BlockList: + """The Get Block List operation retrieves the list of blocks that have been uploaded as part of a + block blob. + + :keyword list_type: Specifies whether to return the list of committed blocks, the list of + uncommitted blocks, or both lists together. Known values are: "committed", "uncommitted", and + "all". Required. + :paramtype list_type: str or ~azure.storage.blobs.models.BlockListType + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :return: BlockList. The BlockList is compatible with MutableMapping + :rtype: ~azure.storage.blobs.models.BlockList + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[_models.BlockList] = kwargs.pop("cls", None) + + _request = build_block_blob_get_block_list_request( + list_type=list_type, + snapshot=snapshot, + timeout=timeout, + lease_id=lease_id, + if_tags=if_tags, + content_type=content_type, + version=self._config.version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["x-ms-blob-content-length"] = self._deserialize( + "int", response.headers.get("x-ms-blob-content-length") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize_xml(_models.BlockList, response.text()) + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def query( # pylint: disable=too-many-locals + self, + query_request: _models.QueryRequest, + *, + snapshot: Optional[str] = None, + timeout: Optional[int] = None, + lease_id: Optional[str] = None, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, + if_modified_since: Optional[datetime.datetime] = None, + if_unmodified_since: Optional[datetime.datetime] = None, + if_tags: Optional[str] = None, + etag: Optional[str] = None, + match_condition: Optional[MatchConditions] = None, + **kwargs: Any + ) -> AsyncIterator[bytes]: + """The Query operation enables users to select/project on blob data by providing simple query + expressions. + + :param query_request: The query request. Required. + :type query_request: ~azure.storage.blobs.models.QueryRequest + :keyword snapshot: The snapshot parameter is an opaque DateTime value that, when present, + specifies the blob snapshot to retrieve. For more information on working with blob snapshots, + see Creating + a Snapshot of a Blob.. Default value is None. + :paramtype snapshot: str + :keyword timeout: The timeout parameter is expressed in seconds. For more information, see Setting + Timeouts for Blob Service Operations.. Default value is None. + :paramtype timeout: int + :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active + and matches this ID. Default value is None. + :paramtype lease_id: str + :keyword encryption_key: Optional. Version 2019-07-07 and later. Specifies the encryption key + to use to encrypt the data provided in the request. If not specified, the request will be + encrypted with the root account key. Default value is None. + :paramtype encryption_key: str + :keyword encryption_key_sha256: Optional. Version 2019-07-07 and later. Specifies the SHA256 + hash of the encryption key used to encrypt the data provided in the request. This header is + only used for encryption with a customer-provided key. If the request is authenticated with a + client token, this header should be specified using the SHA256 hash of the encryption key. + Default value is None. + :paramtype encryption_key_sha256: str + :keyword encryption_algorithm: Optional. Version 2019-07-07 and later. Specifies the + algorithm to use for encryption. If not specified, the default is AES256. "AES256" Default + value is None. + :paramtype encryption_algorithm: str or ~azure.storage.blobs.models.EncryptionAlgorithmType + :keyword if_modified_since: A date-time value. A request is made under the condition that the + resource has been modified since the specified date-time. Default value is None. + :paramtype if_modified_since: ~datetime.datetime + :keyword if_unmodified_since: A date-time value. A request is made under the condition that the + resource has not been modified since the specified date-time. Default value is None. + :paramtype if_unmodified_since: ~datetime.datetime + :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a + matching value. Default value is None. + :paramtype if_tags: str + :keyword etag: check if resource is changed. Set None to skip checking etag. Default value is + None. + :paramtype etag: str + :keyword match_condition: The match condition to use upon the etag. Default value is None. + :paramtype match_condition: ~azure.core.MatchConditions + :return: AsyncIterator[bytes] + :rtype: AsyncIterator[bytes] + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + if match_condition == MatchConditions.IfNotModified: + error_map[412] = ResourceModifiedError + elif match_condition == MatchConditions.IfPresent: + error_map[412] = ResourceNotFoundError + elif match_condition == MatchConditions.IfMissing: + error_map[412] = ResourceExistsError + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) + cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + + _content = _get_element(query_request) + + _request = build_block_blob_query_request( + snapshot=snapshot, + timeout=timeout, + lease_id=lease_id, + encryption_key=encryption_key, + encryption_key_sha256=encryption_key_sha256, + encryption_algorithm=encryption_algorithm, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_tags=if_tags, + etag=etag, + match_condition=match_condition, + content_type=content_type, + version=self._config.version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "url": self._serialize.url("self._config.url", self._config.url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", True) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 206]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.StorageError, + response, + ) + raise HttpResponseError(response=response, model=error) + + response_headers = {} + response_headers["x-ms-meta"] = self._deserialize("str", response.headers.get("x-ms-meta")) + response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) + response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) + response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) + response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) + response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) + response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) + response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) + response_headers["Content-Disposition"] = self._deserialize("str", response.headers.get("Content-Disposition")) + response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) + response_headers["x-ms-blob-sequence-number"] = self._deserialize( + "int", response.headers.get("x-ms-blob-sequence-number") + ) + response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) + response_headers["x-ms-content-crc64"] = self._deserialize( + "bytearray", response.headers.get("x-ms-content-crc64") + ) + response_headers["x-ms-copy-completion-time"] = self._deserialize( + "rfc-1123", response.headers.get("x-ms-copy-completion-time") + ) + response_headers["x-ms-copy-status-description"] = self._deserialize( + "str", response.headers.get("x-ms-copy-status-description") + ) + response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) + response_headers["x-ms-copy-progress"] = self._deserialize("str", response.headers.get("x-ms-copy-progress")) + response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) + response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) + response_headers["x-ms-lease-duration"] = self._deserialize("str", response.headers.get("x-ms-lease-duration")) + response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) + response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) + response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) + response_headers["x-ms-blob-committed-block-count"] = self._deserialize( + "int", response.headers.get("x-ms-blob-committed-block-count") + ) + response_headers["x-ms-server-encrypted"] = self._deserialize( + "bool", response.headers.get("x-ms-server-encrypted") + ) + response_headers["x-ms-encryption-key-sha256"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-key-sha256") + ) + response_headers["x-ms-encryption-scope"] = self._deserialize( + "str", response.headers.get("x-ms-encryption-scope") + ) + response_headers["x-ms-blob-content-md5"] = self._deserialize( + "bytearray", response.headers.get("x-ms-blob-content-md5") + ) + response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) + response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) + response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) + response_headers["x-ms-client-request-id"] = self._deserialize( + "str", response.headers.get("x-ms-client-request-id") + ) + response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) + + deserialized = response.iter_bytes() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/_patch.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_operations/_patch.py similarity index 52% rename from sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/_patch.py rename to sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_operations/_patch.py index f7dd32510333..87676c65a8f0 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/aio/_patch.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_operations/_patch.py @@ -1,14 +1,15 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------- """Customize generated code here. Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize """ -from typing import List -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + +__all__: list[str] = [] # Add all objects you want publicly available to users at this package level def patch_sdk(): diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_patch.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_patch.py new file mode 100644 index 000000000000..bc8dbeb5ccc8 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/aio/_patch.py @@ -0,0 +1,215 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------- +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" + +from typing import Any, TYPE_CHECKING + +from azure.core import AsyncPipelineClient +from azure.core.pipeline import PipelineRequest, PipelineResponse +from azure.core.rest import AsyncHttpResponse, HttpRequest + +from ._operations import ( + _AppendBlobClientOperationsMixin, + _BlobClientOperationsMixin, + _BlockBlobClientOperationsMixin, + _ContainerClientOperationsMixin, + _PageBlobClientOperationsMixin, + _ServiceClientOperationsMixin, +) +from .._utils.serialization import Deserializer, Serializer + +if TYPE_CHECKING: + from azure.core.credentials_async import AsyncTokenCredential + + +class _ServiceOperationsWrapper(_ServiceClientOperationsMixin): + """Wrapper to provide service operations with shared pipeline client.""" + + def __init__( + self, config: Any, client: AsyncPipelineClient, serialize: Serializer, deserialize: Deserializer + ) -> None: + self._config = config + self._client = client + self._serialize = serialize + self._deserialize = deserialize + + # Alias for backward compatibility + async def filter_blobs(self, *args: Any, **kwargs: Any) -> Any: + """Alias for find_blobs_by_tags for backward compatibility.""" + return await self.find_blobs_by_tags(*args, **kwargs) + + +class _ContainerOperationsWrapper(_ContainerClientOperationsMixin): + """Wrapper to provide container operations with shared pipeline client.""" + + def __init__( + self, config: Any, client: AsyncPipelineClient, serialize: Serializer, deserialize: Deserializer + ) -> None: + self._config = config + self._client = client + self._serialize = serialize + self._deserialize = deserialize + + # Alias for backward compatibility + async def filter_blobs(self, *args: Any, **kwargs: Any) -> Any: + """Alias for find_blobs_by_tags for backward compatibility.""" + return await self.find_blobs_by_tags(*args, **kwargs) + + +class _BlobOperationsWrapper(_BlobClientOperationsMixin): + """Wrapper to provide blob operations with shared pipeline client.""" + + def __init__( + self, config: Any, client: AsyncPipelineClient, serialize: Serializer, deserialize: Deserializer + ) -> None: + self._config = config + self._client = client + self._serialize = serialize + self._deserialize = deserialize + + # Aliases for backward compatibility + async def set_http_headers(self, *args: Any, **kwargs: Any) -> Any: + """Alias for set_properties for backward compatibility.""" + return await self.set_properties(*args, **kwargs) + + +class _PageBlobOperationsWrapper(_PageBlobClientOperationsMixin): + """Wrapper to provide page blob operations with shared pipeline client.""" + + def __init__( + self, config: Any, client: AsyncPipelineClient, serialize: Serializer, deserialize: Deserializer + ) -> None: + self._config = config + self._client = client + self._serialize = serialize + self._deserialize = deserialize + + # Alias for backward compatibility + async def update_sequence_number(self, *args: Any, **kwargs: Any) -> Any: + """Alias for set_sequence_number for backward compatibility.""" + return await self.set_sequence_number(*args, **kwargs) + + +class _AppendBlobOperationsWrapper(_AppendBlobClientOperationsMixin): + """Wrapper to provide append blob operations with shared pipeline client.""" + + def __init__( + self, config: Any, client: AsyncPipelineClient, serialize: Serializer, deserialize: Deserializer + ) -> None: + self._config = config + self._client = client + self._serialize = serialize + self._deserialize = deserialize + + +class _BlockBlobOperationsWrapper(_BlockBlobClientOperationsMixin): + """Wrapper to provide block blob operations with shared pipeline client.""" + + def __init__( + self, config: Any, client: AsyncPipelineClient, serialize: Serializer, deserialize: Deserializer + ) -> None: + self._config = config + self._client = client + self._serialize = serialize + self._deserialize = deserialize + + # Alias for backward compatibility + async def put_blob_from_url(self, *args: Any, **kwargs: Any) -> Any: + """Alias for upload_blob_from_url for backward compatibility.""" + return await self.upload_blob_from_url(*args, **kwargs) + + +class CombinedBlobClient: + """Combined client that exposes all blob storage operations as attributes. + + This class wraps the individual operation mixins and exposes them as attributes + to maintain backward compatibility with the previous autorest-generated client structure. + + :param url: The host name of the blob storage account. + :type url: str + :param credential: Credential used to authenticate requests to the service. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword version: Specifies the version of the operation to use for this request. + :paramtype version: str + """ + + def __init__( + self, + url: str, + credential: "AsyncTokenCredential", + *, + base_url: str = None, # type: ignore + pipeline: Any = None, + **kwargs: Any + ) -> None: + from ._configuration import BlobClientConfiguration + + _endpoint = "{url}" + self._config = BlobClientConfiguration(url=url, credential=credential, **kwargs) + + if pipeline is not None: + self._client = AsyncPipelineClient(base_url=_endpoint, pipeline=pipeline) + else: + from azure.core.pipeline import policies + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + # Create operation wrappers as attributes + self.service = _ServiceOperationsWrapper(self._config, self._client, self._serialize, self._deserialize) + self.container = _ContainerOperationsWrapper(self._config, self._client, self._serialize, self._deserialize) + self.blob = _BlobOperationsWrapper(self._config, self._client, self._serialize, self._deserialize) + self.page_blob = _PageBlobOperationsWrapper(self._config, self._client, self._serialize, self._deserialize) + self.append_blob = _AppendBlobOperationsWrapper( + self._config, self._client, self._serialize, self._deserialize + ) + self.block_blob = _BlockBlobOperationsWrapper(self._config, self._client, self._serialize, self._deserialize) + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> "CombinedBlobClient": + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details: Any) -> None: + await self._client.__aexit__(*exc_details) + + +# Add all objects you want publicly available to users at this package level +__all__: list[str] = ["CombinedBlobClient"] + + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/__init__.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/models/__init__.py similarity index 74% rename from sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/__init__.py rename to sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/models/__init__.py index 95e38c268f1b..71fbcc15318d 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/__init__.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/models/__init__.py @@ -2,7 +2,7 @@ # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. +# Code generated by Microsoft (R) Python Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- # pylint: disable=wrong-import-position @@ -13,87 +13,80 @@ from ._patch import * # pylint: disable=unused-wildcard-import -from ._models_py3 import ( # type: ignore +from ._models import ( # type: ignore AccessPolicy, - AppendPositionAccessConditions, ArrowConfiguration, ArrowField, BlobFlatListSegment, - BlobHTTPHeaders, BlobHierarchyListSegment, BlobItemInternal, BlobMetadata, - BlobModifiedAccessConditions, BlobName, BlobPrefix, BlobPropertiesInternal, + BlobServiceProperties, BlobTag, BlobTags, Block, BlockList, BlockLookupList, ClearRange, - ContainerCpkScopeInfo, ContainerItem, ContainerProperties, CorsRule, - CpkInfo, - CpkScopeInfo, DelimitedTextConfiguration, FilterBlobItem, FilterBlobSegment, GeoReplication, JsonTextConfiguration, KeyInfo, - LeaseAccessConditions, ListBlobsFlatSegmentResponse, ListBlobsHierarchySegmentResponse, ListContainersSegmentResponse, Logging, Metrics, - ModifiedAccessConditions, + ObjectReplicationMetadata, PageList, PageRange, + ParquetConfiguration, QueryFormat, QueryRequest, QuerySerialization, RetentionPolicy, - SequenceNumberAccessConditions, SignedIdentifier, - SourceCpkInfo, - SourceModifiedAccessConditions, + SignedIdentifiers, StaticWebsite, StorageError, - StorageServiceProperties, StorageServiceStats, + SubmitBatchRequest, UserDelegationKey, ) -from ._azure_blob_storage_enums import ( # type: ignore +from ._enums import ( # type: ignore AccessTier, - AccessTierOptional, - AccessTierRequired, AccountKind, ArchiveStatus, BlobCopySourceTags, + BlobDeleteType, BlobExpiryOptions, - BlobImmutabilityPolicyMode, BlobType, BlockListType, - CopyStatusType, + CopyStatus, DeleteSnapshotsOptionType, EncryptionAlgorithmType, FileShareTokenIntent, FilterBlobsIncludeItem, GeoReplicationStatusType, - LeaseDurationType, - LeaseStateType, - LeaseStatusType, + ImmutabilityPolicyMode, + LeaseDuration, + LeaseState, + LeaseStatus, ListBlobsIncludeItem, ListContainersIncludeType, PremiumPageBlobAccessTier, PublicAccessType, - QueryFormatType, + QueryRequestType, + QueryType, RehydratePriority, SequenceNumberActionType, SkuName, @@ -105,82 +98,75 @@ __all__ = [ "AccessPolicy", - "AppendPositionAccessConditions", "ArrowConfiguration", "ArrowField", "BlobFlatListSegment", - "BlobHTTPHeaders", "BlobHierarchyListSegment", "BlobItemInternal", "BlobMetadata", - "BlobModifiedAccessConditions", "BlobName", "BlobPrefix", "BlobPropertiesInternal", + "BlobServiceProperties", "BlobTag", "BlobTags", "Block", "BlockList", "BlockLookupList", "ClearRange", - "ContainerCpkScopeInfo", "ContainerItem", "ContainerProperties", "CorsRule", - "CpkInfo", - "CpkScopeInfo", "DelimitedTextConfiguration", "FilterBlobItem", "FilterBlobSegment", "GeoReplication", "JsonTextConfiguration", "KeyInfo", - "LeaseAccessConditions", "ListBlobsFlatSegmentResponse", "ListBlobsHierarchySegmentResponse", "ListContainersSegmentResponse", "Logging", "Metrics", - "ModifiedAccessConditions", + "ObjectReplicationMetadata", "PageList", "PageRange", + "ParquetConfiguration", "QueryFormat", "QueryRequest", "QuerySerialization", "RetentionPolicy", - "SequenceNumberAccessConditions", "SignedIdentifier", - "SourceCpkInfo", - "SourceModifiedAccessConditions", + "SignedIdentifiers", "StaticWebsite", "StorageError", - "StorageServiceProperties", "StorageServiceStats", + "SubmitBatchRequest", "UserDelegationKey", "AccessTier", - "AccessTierOptional", - "AccessTierRequired", "AccountKind", "ArchiveStatus", "BlobCopySourceTags", + "BlobDeleteType", "BlobExpiryOptions", - "BlobImmutabilityPolicyMode", "BlobType", "BlockListType", - "CopyStatusType", + "CopyStatus", "DeleteSnapshotsOptionType", "EncryptionAlgorithmType", "FileShareTokenIntent", "FilterBlobsIncludeItem", "GeoReplicationStatusType", - "LeaseDurationType", - "LeaseStateType", - "LeaseStatusType", + "ImmutabilityPolicyMode", + "LeaseDuration", + "LeaseState", + "LeaseStatus", "ListBlobsIncludeItem", "ListContainersIncludeType", "PremiumPageBlobAccessTier", "PublicAccessType", - "QueryFormatType", + "QueryRequestType", + "QueryType", "RehydratePriority", "SequenceNumberActionType", "SkuName", diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_azure_blob_storage_enums.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/models/_enums.py similarity index 50% rename from sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_azure_blob_storage_enums.py rename to sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/models/_enums.py index 471d5924df20..f78e32934175 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_azure_blob_storage_enums.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/models/_enums.py @@ -2,7 +2,7 @@ # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. +# Code generated by Microsoft (R) Python Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- @@ -11,245 +11,313 @@ class AccessTier(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """AccessTier.""" + """The access tiers.""" P4 = "P4" + """The hot P4 tier.""" P6 = "P6" + """The hot P6 tier.""" P10 = "P10" + """The hot P10 tier.""" P15 = "P15" + """The hot P15 tier.""" P20 = "P20" + """The hot P20 tier.""" P30 = "P30" + """The hot P30 tier.""" P40 = "P40" + """The hot P40 tier.""" P50 = "P50" + """The hot P50 tier.""" P60 = "P60" + """The hot P60 tier.""" P70 = "P70" + """The hot P70 tier.""" P80 = "P80" + """The hot P80 tier.""" HOT = "Hot" + """The hot access tier.""" COOL = "Cool" + """The cool access tier.""" ARCHIVE = "Archive" + """The archive access tier.""" PREMIUM = "Premium" + """The Premium access tier.""" COLD = "Cold" - - -class AccessTierOptional(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """AccessTierOptional.""" - - P4 = "P4" - P6 = "P6" - P10 = "P10" - P15 = "P15" - P20 = "P20" - P30 = "P30" - P40 = "P40" - P50 = "P50" - P60 = "P60" - P70 = "P70" - P80 = "P80" - HOT = "Hot" - COOL = "Cool" - ARCHIVE = "Archive" - COLD = "Cold" - - -class AccessTierRequired(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """AccessTierRequired.""" - - P4 = "P4" - P6 = "P6" - P10 = "P10" - P15 = "P15" - P20 = "P20" - P30 = "P30" - P40 = "P40" - P50 = "P50" - P60 = "P60" - P70 = "P70" - P80 = "P80" - HOT = "Hot" - COOL = "Cool" - ARCHIVE = "Archive" - COLD = "Cold" + """The Cold access tier.""" class AccountKind(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """AccountKind.""" + """The account kind.""" STORAGE = "Storage" + """The storage account is a general-purpose account.""" BLOB_STORAGE = "BlobStorage" + """The storage account is a blob storage account.""" STORAGE_V2 = "StorageV2" + """The storage account is a storage V2 account.""" FILE_STORAGE = "FileStorage" + """The storage account is a file storage account.""" BLOCK_BLOB_STORAGE = "BlockBlobStorage" + """The storage account is a block blob storage account.""" class ArchiveStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """ArchiveStatus.""" + """The archive status.""" REHYDRATE_PENDING_TO_HOT = "rehydrate-pending-to-hot" + """The archive status is rehydrating pending to hot.""" REHYDRATE_PENDING_TO_COOL = "rehydrate-pending-to-cool" + """The archive status is rehydrating pending to cool.""" REHYDRATE_PENDING_TO_COLD = "rehydrate-pending-to-cold" + """The archive status is rehydrating pending to archive.""" class BlobCopySourceTags(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """BlobCopySourceTags.""" + """The blob copy source tags types.""" REPLACE = "REPLACE" + """The replace blob source tags option.""" COPY = "COPY" + """The copy blob source tags option.""" + + +class BlobDeleteType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The type of blob deletions.""" + + PERMANENT = "Permanent" + """Permanently delete the blob.""" class BlobExpiryOptions(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """BlobExpiryOptions.""" + """The blob expiration options.""" NEVER_EXPIRE = "NeverExpire" + """Never expire.""" RELATIVE_TO_CREATION = "RelativeToCreation" + """Relative to creation time.""" RELATIVE_TO_NOW = "RelativeToNow" + """Relative to now.""" ABSOLUTE = "Absolute" - - -class BlobImmutabilityPolicyMode(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """BlobImmutabilityPolicyMode.""" - - MUTABLE = "Mutable" - UNLOCKED = "Unlocked" - LOCKED = "Locked" + """Absolute time.""" class BlobType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """BlobType.""" + """The blob type.""" BLOCK_BLOB = "BlockBlob" + """The blob is a block blob.""" PAGE_BLOB = "PageBlob" + """The blob is a page blob.""" APPEND_BLOB = "AppendBlob" + """The blob is an append blob.""" class BlockListType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """BlockListType.""" + """The block list types.""" COMMITTED = "committed" + """The list of committed blocks.""" UNCOMMITTED = "uncommitted" + """The list of uncommitted blocks.""" ALL = "all" + """Both lists together.""" -class CopyStatusType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """CopyStatusType.""" +class CopyStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The copy status.""" PENDING = "pending" + """The copy operation is pending.""" SUCCESS = "success" - ABORTED = "aborted" + """The copy operation succeeded.""" FAILED = "failed" + """The copy operation failed.""" + ABORTED = "aborted" + """The copy operation is aborted.""" class DeleteSnapshotsOptionType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """DeleteSnapshotsOptionType.""" + """The delete snapshots option type.""" - INCLUDE = "include" ONLY = "only" + """The delete snapshots include option is only.""" + INCLUDE = "include" + """The delete snapshots include option is include.""" class EncryptionAlgorithmType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """EncryptionAlgorithmType.""" + """The algorithm used to produce the encryption key hash. Currently, the only accepted value is + \\"AES256\\". Must be provided if the x-ms-encryption-key header is provided. + """ - NONE = "None" AES256 = "AES256" + """The AES256 encryption algorithm.""" class FileShareTokenIntent(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """FileShareTokenIntent.""" + """The file share token intent types.""" BACKUP = "backup" + """The file share token intent is backup.""" class FilterBlobsIncludeItem(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """FilterBlobsIncludeItem.""" + """The filter blobs includes.""" NONE = "none" + """The filter includes no versions.""" VERSIONS = "versions" + """The filter includes n versions.""" class GeoReplicationStatusType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """The status of the secondary location.""" + """The geo replication status.""" LIVE = "live" + """The geo replication is live.""" BOOTSTRAP = "bootstrap" + """The geo replication is bootstrap.""" UNAVAILABLE = "unavailable" + """The geo replication is unavailable.""" + + +class ImmutabilityPolicyMode(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The immutability policy mode used in requests and responses.""" + + MUTABLE = "mutable" + """The immutability policy is mutable. Should never be set, only returned.""" + LOCKED = "locked" + """The immutability policy is locked.""" + UNLOCKED = "unlocked" + """The immutability policy is unlocked.""" -class LeaseDurationType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """LeaseDurationType.""" +class LeaseDuration(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The lease duration.""" INFINITE = "infinite" + """The lease is of infinite duration.""" FIXED = "fixed" + """The lease is of fixed duration.""" -class LeaseStateType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """LeaseStateType.""" +class LeaseState(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The lease state.""" AVAILABLE = "available" + """The lease is available.""" LEASED = "leased" + """The lease is currently leased.""" EXPIRED = "expired" + """The lease is expired.""" BREAKING = "breaking" + """The lease is breaking.""" BROKEN = "broken" + """The lease is broken.""" -class LeaseStatusType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """LeaseStatusType.""" +class LeaseStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The lease status.""" - LOCKED = "locked" UNLOCKED = "unlocked" + """The lease is unlocked.""" + LOCKED = "locked" + """The lease is locked.""" class ListBlobsIncludeItem(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """ListBlobsIncludeItem.""" + """The list blob includes parameter values.""" COPY = "copy" + """The include copies.""" DELETED = "deleted" + """The include deleted blobs.""" METADATA = "metadata" + """The include metadata.""" SNAPSHOTS = "snapshots" - UNCOMMITTEDBLOBS = "uncommittedblobs" + """The include snapshots.""" + UNCOMMITTED_BLOBS = "uncommittedblobs" + """The include uncommitted blobs.""" VERSIONS = "versions" + """The include versions.""" TAGS = "tags" - IMMUTABILITYPOLICY = "immutabilitypolicy" - LEGALHOLD = "legalhold" - DELETEDWITHVERSIONS = "deletedwithversions" + """The include tags.""" + IMMUTABILITY_POLICY = "immutabilitypolicy" + """The include immutable policy.""" + LEGAL_HOLD = "legalhold" + """The include legal hold.""" + DELETED_WITH_VERSIONS = "deletedwithversions" + """The include deleted with versions.""" class ListContainersIncludeType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """ListContainersIncludeType.""" + """Include this parameter to specify that the container's metadata be returned as part of the + response body. + """ METADATA = "metadata" + """Include metadata""" DELETED = "deleted" + """Include deleted""" SYSTEM = "system" + """Include system""" class PremiumPageBlobAccessTier(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """PremiumPageBlobAccessTier.""" + """The premium page blob access tier types.""" P4 = "P4" + """The premium page blob access tier is P4.""" P6 = "P6" + """The premium page blob access tier is P6.""" P10 = "P10" + """The premium page blob access tier is P10.""" P15 = "P15" + """The premium page blob access tier is P15.""" P20 = "P20" + """The premium page blob access tier is P20.""" P30 = "P30" + """The premium page blob access tier is P30.""" P40 = "P40" + """The premium page blob access tier is P40.""" P50 = "P50" + """The premium page blob access tier is P50.""" P60 = "P60" + """The premium page blob access tier is P60.""" P70 = "P70" + """The premium page blob access tier is P70.""" P80 = "P80" + """The premium page blob access tier is P80.""" class PublicAccessType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """PublicAccessType.""" + """The public access types.""" - CONTAINER = "container" BLOB = "blob" + """Blob access.""" + CONTAINER = "container" + """Container access.""" + + +class QueryRequestType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The query request, note only SQL supported.""" + + SQL = "SQL" + """The SQL request query type.""" -class QueryFormatType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """The quick query format type.""" +class QueryType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The query format type.""" DELIMITED = "delimited" + """The query format type is delimited.""" JSON = "json" + """The query format type is JSON.""" ARROW = "arrow" + """The query format type is Apache Arrow.""" PARQUET = "parquet" + """The query format type is Parquet.""" class RehydratePriority(str, Enum, metaclass=CaseInsensitiveEnumMeta): @@ -258,144 +326,269 @@ class RehydratePriority(str, Enum, metaclass=CaseInsensitiveEnumMeta): """ HIGH = "High" + """The rehydrate priority is high.""" STANDARD = "Standard" + """The rehydrate priority is standard.""" class SequenceNumberActionType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """SequenceNumberActionType.""" + """The sequence number actions.""" + INCREMENT = "increment" + """Increment the sequence number.""" MAX = "max" + """Set the maximum for the sequence number.""" UPDATE = "update" - INCREMENT = "increment" + """Update the sequence number.""" class SkuName(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """SkuName.""" + """The SKU types.""" STANDARD_LRS = "Standard_LRS" + """The standard LRS SKU.""" STANDARD_GRS = "Standard_GRS" + """The standard GRS SKU.""" STANDARD_RAGRS = "Standard_RAGRS" + """The standard RAGRS SKU.""" STANDARD_ZRS = "Standard_ZRS" + """The standard ZRS SKU.""" PREMIUM_LRS = "Premium_LRS" + """The premium LRS SKU.""" STANDARD_GZRS = "Standard_GZRS" + """The standard GZRS SKU.""" PREMIUM_ZRS = "Premium_ZRS" + """The premium ZRS SKU.""" STANDARD_RAGZRS = "Standard_RAGZRS" + """The standard RAGZRS SKU.""" class StorageErrorCode(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Error codes returned by the service.""" + """Error codes returned by the Azure Blob Storage service.""" ACCOUNT_ALREADY_EXISTS = "AccountAlreadyExists" + """Account already exists.""" ACCOUNT_BEING_CREATED = "AccountBeingCreated" + """Account is being created.""" ACCOUNT_IS_DISABLED = "AccountIsDisabled" + """Account is disabled.""" AUTHENTICATION_FAILED = "AuthenticationFailed" + """Authentication failed.""" AUTHORIZATION_FAILURE = "AuthorizationFailure" + """Authorization failure.""" CONDITION_HEADERS_NOT_SUPPORTED = "ConditionHeadersNotSupported" + """Condition headers not supported.""" CONDITION_NOT_MET = "ConditionNotMet" + """Condition not met.""" EMPTY_METADATA_KEY = "EmptyMetadataKey" + """Empty metadata key.""" INSUFFICIENT_ACCOUNT_PERMISSIONS = "InsufficientAccountPermissions" + """Insufficient account permissions.""" INTERNAL_ERROR = "InternalError" + """Internal error.""" INVALID_AUTHENTICATION_INFO = "InvalidAuthenticationInfo" + """Invalid authentication information.""" INVALID_HEADER_VALUE = "InvalidHeaderValue" + """Invalid header value.""" INVALID_HTTP_VERB = "InvalidHttpVerb" + """Invalid HTTP verb.""" INVALID_INPUT = "InvalidInput" + """Invalid input.""" INVALID_MD5 = "InvalidMd5" + """Invalid MD5.""" INVALID_METADATA = "InvalidMetadata" + """Invalid metadata.""" INVALID_QUERY_PARAMETER_VALUE = "InvalidQueryParameterValue" + """Invalid query parameter value.""" INVALID_RANGE = "InvalidRange" - INVALID_RESOURCE_NAME = "InvalidResourceName" + """Invalid range.""" + INVALID_REQUEST_URL = "InvalidRequestUrl" + """Invalid request URL.""" INVALID_URI = "InvalidUri" + """Invalid URI.""" INVALID_XML_DOCUMENT = "InvalidXmlDocument" + """Invalid XML document.""" INVALID_XML_NODE_VALUE = "InvalidXmlNodeValue" + """Invalid XML node value.""" MD5_MISMATCH = "Md5Mismatch" + """MD5 mismatch.""" METADATA_TOO_LARGE = "MetadataTooLarge" + """Metadata too large.""" MISSING_CONTENT_LENGTH_HEADER = "MissingContentLengthHeader" - MISSING_REQUIRED_QUERY_PARAMETER = "MissingRequiredQueryParameter" - MISSING_REQUIRED_HEADER = "MissingRequiredHeader" + """Missing content length header.""" MISSING_REQUIRED_XML_NODE = "MissingRequiredXmlNode" + """Missing required XML node.""" + MISSING_REQUIRED_HEADER = "MissingRequiredHeader" + """Missing required header.""" + MISSING_REQUIRED_QUERY_PARAMETER = "MissingRequiredQueryParameter" + """Missing required query parameter.""" MULTIPLE_CONDITION_HEADERS_NOT_SUPPORTED = "MultipleConditionHeadersNotSupported" + """Multiple condition headers not supported.""" OPERATION_TIMED_OUT = "OperationTimedOut" + """Operation timed out.""" OUT_OF_RANGE_INPUT = "OutOfRangeInput" + """Out of range input.""" OUT_OF_RANGE_QUERY_PARAMETER_VALUE = "OutOfRangeQueryParameterValue" + """Out of range query parameter value.""" REQUEST_BODY_TOO_LARGE = "RequestBodyTooLarge" + """Request body too large.""" RESOURCE_TYPE_MISMATCH = "ResourceTypeMismatch" + """Resource type mismatch.""" REQUEST_URL_FAILED_TO_PARSE = "RequestUrlFailedToParse" + """Request URL failed to parse.""" RESOURCE_ALREADY_EXISTS = "ResourceAlreadyExists" + """Resource already exists.""" RESOURCE_NOT_FOUND = "ResourceNotFound" + """Resource not found.""" SERVER_BUSY = "ServerBusy" + """Server busy.""" UNSUPPORTED_HEADER = "UnsupportedHeader" + """Unsupported header.""" UNSUPPORTED_XML_NODE = "UnsupportedXmlNode" + """Unsupported XML node.""" UNSUPPORTED_QUERY_PARAMETER = "UnsupportedQueryParameter" + """Unsupported query parameter.""" UNSUPPORTED_HTTP_VERB = "UnsupportedHttpVerb" + """Unsupported HTTP verb.""" APPEND_POSITION_CONDITION_NOT_MET = "AppendPositionConditionNotMet" + """Append position condition not met.""" BLOB_ALREADY_EXISTS = "BlobAlreadyExists" + """Blob already exists.""" BLOB_IMMUTABLE_DUE_TO_POLICY = "BlobImmutableDueToPolicy" + """Blob is immutable due to policy.""" BLOB_NOT_FOUND = "BlobNotFound" + """Blob not found.""" BLOB_OVERWRITTEN = "BlobOverwritten" + """Blob overwritten.""" BLOB_TIER_INADEQUATE_FOR_CONTENT_LENGTH = "BlobTierInadequateForContentLength" + """Blob tier inadequate for content length.""" BLOB_USES_CUSTOMER_SPECIFIED_ENCRYPTION = "BlobUsesCustomerSpecifiedEncryption" + """Blob uses customer specified encryption.""" BLOCK_COUNT_EXCEEDS_LIMIT = "BlockCountExceedsLimit" + """Block count exceeds limit.""" BLOCK_LIST_TOO_LONG = "BlockListTooLong" + """Block list too long.""" CANNOT_CHANGE_TO_LOWER_TIER = "CannotChangeToLowerTier" + """Cannot change to lower tier.""" CANNOT_VERIFY_COPY_SOURCE = "CannotVerifyCopySource" + """Cannot verify copy source.""" CONTAINER_ALREADY_EXISTS = "ContainerAlreadyExists" + """Container already exists.""" CONTAINER_BEING_DELETED = "ContainerBeingDeleted" + """Container being deleted.""" CONTAINER_DISABLED = "ContainerDisabled" + """Container disabled.""" CONTAINER_NOT_FOUND = "ContainerNotFound" + """Container not found.""" CONTENT_LENGTH_LARGER_THAN_TIER_LIMIT = "ContentLengthLargerThanTierLimit" + """Content length larger than tier limit.""" COPY_ACROSS_ACCOUNTS_NOT_SUPPORTED = "CopyAcrossAccountsNotSupported" + """Copy across accounts not supported.""" COPY_ID_MISMATCH = "CopyIdMismatch" + """Copy ID mismatch.""" FEATURE_VERSION_MISMATCH = "FeatureVersionMismatch" + """Feature version mismatch.""" INCREMENTAL_COPY_BLOB_MISMATCH = "IncrementalCopyBlobMismatch" - INCREMENTAL_COPY_OF_EARLIER_SNAPSHOT_NOT_ALLOWED = "IncrementalCopyOfEarlierSnapshotNotAllowed" + """Incremental copy blob mismatch.""" + INCREMENTAL_COPY_OF_EARLIER_VERSION_SNAPSHOT_NOT_ALLOWED = "IncrementalCopyOfEarlierVersionSnapshotNotAllowed" + """Incremental copy of earlier version snapshot not allowed.""" INCREMENTAL_COPY_SOURCE_MUST_BE_SNAPSHOT = "IncrementalCopySourceMustBeSnapshot" + """Incremental copy source must be snapshot.""" INFINITE_LEASE_DURATION_REQUIRED = "InfiniteLeaseDurationRequired" + """Infinite lease duration required.""" INVALID_BLOB_OR_BLOCK = "InvalidBlobOrBlock" + """Invalid blob or block.""" INVALID_BLOB_TIER = "InvalidBlobTier" + """Invalid blob tier.""" INVALID_BLOB_TYPE = "InvalidBlobType" + """Invalid blob type.""" INVALID_BLOCK_ID = "InvalidBlockId" + """Invalid block ID.""" INVALID_BLOCK_LIST = "InvalidBlockList" + """Invalid block list.""" INVALID_OPERATION = "InvalidOperation" + """Invalid operation.""" INVALID_PAGE_RANGE = "InvalidPageRange" + """Invalid page range.""" INVALID_SOURCE_BLOB_TYPE = "InvalidSourceBlobType" + """Invalid source blob type.""" INVALID_SOURCE_BLOB_URL = "InvalidSourceBlobUrl" + """Invalid source blob URL.""" INVALID_VERSION_FOR_PAGE_BLOB_OPERATION = "InvalidVersionForPageBlobOperation" + """Invalid version for page blob operation.""" LEASE_ALREADY_PRESENT = "LeaseAlreadyPresent" + """Lease already present.""" LEASE_ALREADY_BROKEN = "LeaseAlreadyBroken" + """Lease already broken.""" LEASE_ID_MISMATCH_WITH_BLOB_OPERATION = "LeaseIdMismatchWithBlobOperation" + """Lease ID mismatch with blob operation.""" LEASE_ID_MISMATCH_WITH_CONTAINER_OPERATION = "LeaseIdMismatchWithContainerOperation" + """Lease ID mismatch with container operation.""" LEASE_ID_MISMATCH_WITH_LEASE_OPERATION = "LeaseIdMismatchWithLeaseOperation" + """Lease ID mismatch with lease operation.""" LEASE_ID_MISSING = "LeaseIdMissing" + """Lease ID missing.""" LEASE_IS_BREAKING_AND_CANNOT_BE_ACQUIRED = "LeaseIsBreakingAndCannotBeAcquired" + """Lease is breaking and cannot be acquired.""" LEASE_IS_BREAKING_AND_CANNOT_BE_CHANGED = "LeaseIsBreakingAndCannotBeChanged" + """Lease is breaking and cannot be changed.""" LEASE_IS_BROKEN_AND_CANNOT_BE_RENEWED = "LeaseIsBrokenAndCannotBeRenewed" + """Lease is broken and cannot be renewed.""" LEASE_LOST = "LeaseLost" + """Lease lost.""" LEASE_NOT_PRESENT_WITH_BLOB_OPERATION = "LeaseNotPresentWithBlobOperation" + """Lease not present with blob operation.""" LEASE_NOT_PRESENT_WITH_CONTAINER_OPERATION = "LeaseNotPresentWithContainerOperation" + """Lease not present with container operation.""" LEASE_NOT_PRESENT_WITH_LEASE_OPERATION = "LeaseNotPresentWithLeaseOperation" + """Lease not present with lease operation.""" MAX_BLOB_SIZE_CONDITION_NOT_MET = "MaxBlobSizeConditionNotMet" - NO_AUTHENTICATION_INFORMATION = "NoAuthenticationInformation" + """Maximum blob size condition not met.""" NO_PENDING_COPY_OPERATION = "NoPendingCopyOperation" + """No pending copy operation.""" OPERATION_NOT_ALLOWED_ON_INCREMENTAL_COPY_BLOB = "OperationNotAllowedOnIncrementalCopyBlob" + """Operation not allowed on incremental copy blob.""" PENDING_COPY_OPERATION = "PendingCopyOperation" - PREVIOUS_SNAPSHOT_CANNOT_BE_NEWER = "PreviousSnapshotCannotBeNewer" + """Pending copy operation.""" PREVIOUS_SNAPSHOT_NOT_FOUND = "PreviousSnapshotNotFound" + """Previous snapshot not found.""" PREVIOUS_SNAPSHOT_OPERATION_NOT_SUPPORTED = "PreviousSnapshotOperationNotSupported" + """Previous snapshot operation not supported.""" + PREVIOUS_SNAPSHOT_CANNOT_BE_NEWER = "PreviousSnapshotCannotBeNewer" + """Previous snapshot cannot be newer.""" SEQUENCE_NUMBER_CONDITION_NOT_MET = "SequenceNumberConditionNotMet" + """Sequence number condition not met.""" SEQUENCE_NUMBER_INCREMENT_TOO_LARGE = "SequenceNumberIncrementTooLarge" + """Sequence number increment too large.""" SNAPSHOT_COUNT_EXCEEDED = "SnapshotCountExceeded" + """Snapshot count exceeded.""" SNAPSHOT_OPERATION_RATE_EXCEEDED = "SnapshotOperationRateExceeded" + """Snapshot operation rate exceeded.""" SNAPSHOTS_PRESENT = "SnapshotsPresent" + """Snapshots present.""" SOURCE_CONDITION_NOT_MET = "SourceConditionNotMet" + """Source condition not met.""" SYSTEM_IN_USE = "SystemInUse" + """System in use.""" TARGET_CONDITION_NOT_MET = "TargetConditionNotMet" + """Target condition not met.""" UNAUTHORIZED_BLOB_OVERWRITE = "UnauthorizedBlobOverwrite" + """Unauthorized blob overwrite.""" BLOB_BEING_REHYDRATED = "BlobBeingRehydrated" + """Blob being rehydrated.""" BLOB_ARCHIVED = "BlobArchived" + """Blob archived.""" BLOB_NOT_ARCHIVED = "BlobNotArchived" + """Blob not archived.""" AUTHORIZATION_SOURCE_IP_MISMATCH = "AuthorizationSourceIPMismatch" + """Authorization source IP mismatch.""" AUTHORIZATION_PROTOCOL_MISMATCH = "AuthorizationProtocolMismatch" + """Authorization protocol mismatch.""" AUTHORIZATION_PERMISSION_MISMATCH = "AuthorizationPermissionMismatch" + """Authorization permission mismatch.""" AUTHORIZATION_SERVICE_MISMATCH = "AuthorizationServiceMismatch" + """Authorization service mismatch.""" AUTHORIZATION_RESOURCE_TYPE_MISMATCH = "AuthorizationResourceTypeMismatch" + """Authorization resource type mismatch.""" BLOB_ACCESS_TIER_NOT_SUPPORTED_FOR_ACCOUNT_TYPE = "BlobAccessTierNotSupportedForAccountType" + """Blob access tier not supported for account type.""" diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/models/_models.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/models/_models.py new file mode 100644 index 000000000000..b81ec26006bd --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/models/_models.py @@ -0,0 +1,2895 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=useless-super-delegation + +import datetime +from typing import Any, Mapping, Optional, TYPE_CHECKING, Union, overload + +from .._utils.model_base import Model as _Model, rest_field +from .._utils.utils import FileType + +if TYPE_CHECKING: + from .. import models as _models + + +class AccessPolicy(_Model): + """Represents an access policy. + + :ivar start: The date-time the policy is active. Required. + :vartype start: ~datetime.datetime + :ivar expiry: The date-time the policy expires. Required. + :vartype expiry: ~datetime.datetime + :ivar permission: The permissions for acl the policy. Required. + :vartype permission: str + """ + + start: datetime.datetime = rest_field( + visibility=["read", "create", "update", "delete", "query"], + format="rfc7231", + xml={"attribute": False, "name": "Start", "text": False, "unwrapped": False}, + ) + """The date-time the policy is active. Required.""" + expiry: datetime.datetime = rest_field( + visibility=["read", "create", "update", "delete", "query"], + format="rfc7231", + xml={"attribute": False, "name": "Expiry", "text": False, "unwrapped": False}, + ) + """The date-time the policy expires. Required.""" + permission: str = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Permission", "text": False, "unwrapped": False}, + ) + """The permissions for acl the policy. Required.""" + + _xml = {"attribute": False, "name": "AccessPolicy", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + start: datetime.datetime, + expiry: datetime.datetime, + permission: str, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class ArrowConfiguration(_Model): + """Represents the Apache Arrow configuration. + + :ivar schema: The Apache Arrow schema. Required. + :vartype schema: ~azure.storage.blobs.models.ArrowField + """ + + schema: list["_models.ArrowField"] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "itemsName": "Field", "name": "Schema", "text": False, "unwrapped": False}, + ) + """The Apache Arrow schema. Required.""" + + _xml = {"attribute": False, "name": "ArrowConfiguration", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + schema: list["_models.ArrowField"], + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class ArrowField(_Model): + """Represents an Apache Arrow field. + + :ivar type: The arrow field type. Required. + :vartype type: str + :ivar name: The arrow field name. + :vartype name: str + :ivar precision: The arrow field precision. + :vartype precision: int + :ivar scale: The arrow field scale. + :vartype scale: int + """ + + type: str = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Type", "text": False, "unwrapped": False}, + ) + """The arrow field type. Required.""" + name: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Name", "text": False, "unwrapped": False}, + ) + """The arrow field name.""" + precision: Optional[int] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Precision", "text": False, "unwrapped": False}, + ) + """The arrow field precision.""" + scale: Optional[int] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Scale", "text": False, "unwrapped": False}, + ) + """The arrow field scale.""" + + _xml = {"attribute": False, "name": "Field", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + type: str, + name: Optional[str] = None, + precision: Optional[int] = None, + scale: Optional[int] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class BlobFlatListSegment(_Model): + """The blob flat list segment. + + :ivar blob_items: The blob items. Required. + :vartype blob_items: ~azure.storage.blobs.models.BlobItemInternal + """ + + blob_items: list["_models.BlobItemInternal"] = rest_field( + name="blobItems", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "itemsName": "Blob", "name": "Blob", "text": False, "unwrapped": True}, + ) + """The blob items. Required.""" + + _xml = {"attribute": False, "name": "BlobFlatListSegment", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + blob_items: list["_models.BlobItemInternal"], + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class BlobHierarchyListSegment(_Model): + """Represents an array of blobs. + + :ivar blob_items: The blob items. Required. + :vartype blob_items: ~azure.storage.blobs.models.BlobItemInternal + :ivar blob_prefixes: The blob prefixes. + :vartype blob_prefixes: ~azure.storage.blobs.models.BlobPrefix + """ + + blob_items: list["_models.BlobItemInternal"] = rest_field( + name="blobItems", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "itemsName": "Blob", "name": "Blob", "text": False, "unwrapped": True}, + ) + """The blob items. Required.""" + blob_prefixes: Optional[list["_models.BlobPrefix"]] = rest_field( + name="blobPrefixes", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "itemsName": "BlobPrefix", "name": "BlobPrefix", "text": False, "unwrapped": True}, + ) + """The blob prefixes.""" + + _xml = {"attribute": False, "name": "BlobHierarchyListSegment", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + blob_items: list["_models.BlobItemInternal"], + blob_prefixes: Optional[list["_models.BlobPrefix"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class BlobItemInternal(_Model): + """An Azure Storage Blob. + + :ivar name: The name of the blob. Required. + :vartype name: ~azure.storage.blobs.models.BlobName + :ivar deleted: Whether the blob is deleted. Required. + :vartype deleted: bool + :ivar snapshot: The snapshot of the blob. Required. + :vartype snapshot: str + :ivar version_id: The version id of the blob. + :vartype version_id: str + :ivar is_current_version: Whether the blob is the current version. + :vartype is_current_version: bool + :ivar properties: The properties of the blob. Required. + :vartype properties: ~azure.storage.blobs.models.BlobPropertiesInternal + :ivar metadata: The metadata of the blob. + :vartype metadata: ~azure.storage.blobs.models.BlobMetadata + :ivar blob_tags: The tags of the blob. + :vartype blob_tags: ~azure.storage.blobs.models.BlobTags + :ivar object_replication_metadata: The object replication metadata of the blob. + :vartype object_replication_metadata: ~azure.storage.blobs.models.ObjectReplicationMetadata + :ivar has_versions_only: Whether the blob has versions only. + :vartype has_versions_only: bool + """ + + name: "_models.BlobName" = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Name", "text": False, "unwrapped": False}, + ) + """The name of the blob. Required.""" + deleted: bool = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Deleted", "text": False, "unwrapped": False}, + ) + """Whether the blob is deleted. Required.""" + snapshot: str = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Snapshot", "text": False, "unwrapped": False}, + ) + """The snapshot of the blob. Required.""" + version_id: Optional[str] = rest_field( + name="versionId", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "VersionId", "text": False, "unwrapped": False}, + ) + """The version id of the blob.""" + is_current_version: Optional[bool] = rest_field( + name="isCurrentVersion", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "IsCurrentVersion", "text": False, "unwrapped": False}, + ) + """Whether the blob is the current version.""" + properties: "_models.BlobPropertiesInternal" = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Properties", "text": False, "unwrapped": False}, + ) + """The properties of the blob. Required.""" + metadata: Optional["_models.BlobMetadata"] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Metadata", "text": False, "unwrapped": False}, + ) + """The metadata of the blob.""" + blob_tags: Optional["_models.BlobTags"] = rest_field( + name="blobTags", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "BlobTags", "text": False, "unwrapped": False}, + ) + """The tags of the blob.""" + object_replication_metadata: Optional["_models.ObjectReplicationMetadata"] = rest_field( + name="objectReplicationMetadata", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "OrMetadata", "text": False, "unwrapped": False}, + ) + """The object replication metadata of the blob.""" + has_versions_only: Optional[bool] = rest_field( + name="hasVersionsOnly", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "HasVersionsOnly", "text": False, "unwrapped": False}, + ) + """Whether the blob has versions only.""" + + _xml = {"attribute": False, "name": "Blob", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + name: "_models.BlobName", + deleted: bool, + snapshot: str, + properties: "_models.BlobPropertiesInternal", + version_id: Optional[str] = None, + is_current_version: Optional[bool] = None, + metadata: Optional["_models.BlobMetadata"] = None, + blob_tags: Optional["_models.BlobTags"] = None, + object_replication_metadata: Optional["_models.ObjectReplicationMetadata"] = None, + has_versions_only: Optional[bool] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class BlobMetadata(_Model): + """The blob metadata. + + :ivar encrypted: Whether the blob metadata is encrypted. + :vartype encrypted: str + """ + + encrypted: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": True, "name": "Encrypted", "text": False, "unwrapped": False}, + ) + """Whether the blob metadata is encrypted.""" + + _xml = {"attribute": False, "name": "BlobMetadata", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + encrypted: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class BlobName(_Model): + """Represents a blob name. + + :ivar encoded: Whether the blob name is encoded. + :vartype encoded: bool + :ivar content: The blob name. + :vartype content: str + """ + + encoded: Optional[bool] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": True, "name": "Encoded", "text": False, "unwrapped": False}, + ) + """Whether the blob name is encoded.""" + content: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "content", "text": True, "unwrapped": False}, + ) + """The blob name.""" + + _xml = {"attribute": False, "name": "BlobName", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + encoded: Optional[bool] = None, + content: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class BlobPrefix(_Model): + """Represents a blob prefix. + + :ivar name: The blob name. Required. + :vartype name: ~azure.storage.blobs.models.BlobName + """ + + name: "_models.BlobName" = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Name", "text": False, "unwrapped": False}, + ) + """The blob name. Required.""" + + _xml = {"attribute": False, "name": "BlobPrefix", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + name: "_models.BlobName", + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class BlobPropertiesInternal(_Model): + """The properties of a blob. + + :ivar creation_time: The date-time the blob was created in RFC1123 format. + :vartype creation_time: ~datetime.datetime + :ivar last_modified: The date-time the blob was last modified in RFC1123 format. Required. + :vartype last_modified: ~datetime.datetime + :ivar e_tag: The blob ETag. Required. + :vartype e_tag: str + :ivar content_length: The content length of the blob. + :vartype content_length: int + :ivar content_type: The content type of the blob. + :vartype content_type: str + :ivar content_encoding: The content encoding of the blob. + :vartype content_encoding: str + :ivar content_language: The content language of the blob. + :vartype content_language: str + :ivar content_md5: The content MD5 of the blob. + :vartype content_md5: bytes + :ivar content_disposition: The content disposition of the blob. + :vartype content_disposition: str + :ivar cache_control: The cache control of the blob. + :vartype cache_control: str + :ivar blob_sequence_number: The sequence number of the blob. + :vartype blob_sequence_number: int + :ivar blob_type: The blob type. Known values are: "BlockBlob", "PageBlob", and "AppendBlob". + :vartype blob_type: str or ~azure.storage.blobs.models.BlobType + :ivar lease_status: The lease status of the blob. Known values are: "unlocked" and "locked". + :vartype lease_status: str or ~azure.storage.blobs.models.LeaseStatus + :ivar lease_state: The lease state of the blob. Known values are: "available", "leased", + "expired", "breaking", and "broken". + :vartype lease_state: str or ~azure.storage.blobs.models.LeaseState + :ivar lease_duration: The lease duration of the blob. Known values are: "infinite" and "fixed". + :vartype lease_duration: str or ~azure.storage.blobs.models.LeaseDuration + :ivar copy_id: The copy ID of the blob. + :vartype copy_id: str + :ivar copy_status: The copy status of the blob. Known values are: "pending", "success", + "failed", and "aborted". + :vartype copy_status: str or ~azure.storage.blobs.models.CopyStatus + :ivar copy_source: The copy source of the blob. + :vartype copy_source: str + :ivar copy_progress: The copy progress of the blob. + :vartype copy_progress: str + :ivar copy_completion_time: The copy completion time of the blob. + :vartype copy_completion_time: ~datetime.datetime + :ivar copy_status_description: The copy status description of the blob. + :vartype copy_status_description: str + :ivar server_encrypted: Whether the blob is encrypted on the server. + :vartype server_encrypted: bool + :ivar incremental_copy: Whether the blob is incremental copy. + :vartype incremental_copy: bool + :ivar destination_snapshot: The name of the destination snapshot. + :vartype destination_snapshot: str + :ivar deleted_time: The time the blob was deleted. + :vartype deleted_time: ~datetime.datetime + :ivar remaining_retention_days: The remaining retention days of the blob. + :vartype remaining_retention_days: int + :ivar access_tier: The access tier of the blob. Known values are: "P4", "P6", "P10", "P15", + "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", and + "Cold". + :vartype access_tier: str or ~azure.storage.blobs.models.AccessTier + :ivar access_tier_inferred: Whether the access tier is inferred. + :vartype access_tier_inferred: bool + :ivar archive_status: The archive status of the blob. Known values are: + "rehydrate-pending-to-hot", "rehydrate-pending-to-cool", and "rehydrate-pending-to-cold". + :vartype archive_status: str or ~azure.storage.blobs.models.ArchiveStatus + :ivar customer_provided_key_sha256: Customer provided key sha256. + :vartype customer_provided_key_sha256: str + :ivar encryption_scope: The encryption scope of the blob. + :vartype encryption_scope: str + :ivar access_tier_change_time: The access tier change time of the blob. + :vartype access_tier_change_time: ~datetime.datetime + :ivar tag_count: The number of tags for the blob. + :vartype tag_count: int + :ivar expires_on: The expire time of the blob. + :vartype expires_on: ~datetime.datetime + :ivar is_sealed: Whether the blob is sealed. + :vartype is_sealed: bool + :ivar rehydrate_priority: The rehydrate priority of the blob. Known values are: "High" and + "Standard". + :vartype rehydrate_priority: str or ~azure.storage.blobs.models.RehydratePriority + :ivar last_accessed_on: The last access time of the blob. + :vartype last_accessed_on: ~datetime.datetime + :ivar immutability_policy_expires_on: The immutability policy until time of the blob. + :vartype immutability_policy_expires_on: ~datetime.datetime + :ivar immutability_policy_mode: The immutability policy mode of the blob. Known values are: + "mutable", "locked", and "unlocked". + :vartype immutability_policy_mode: str or ~azure.storage.blobs.models.ImmutabilityPolicyMode + :ivar legal_hold: Whether the blob is under legal hold. + :vartype legal_hold: bool + """ + + creation_time: Optional[datetime.datetime] = rest_field( + name="creationTime", + visibility=["read", "create", "update", "delete", "query"], + format="rfc7231", + xml={"attribute": False, "name": "Creation-Time", "text": False, "unwrapped": False}, + ) + """The date-time the blob was created in RFC1123 format.""" + last_modified: datetime.datetime = rest_field( + name="lastModified", + visibility=["read", "create", "update", "delete", "query"], + format="rfc7231", + xml={"attribute": False, "name": "Last-Modified", "text": False, "unwrapped": False}, + ) + """The date-time the blob was last modified in RFC1123 format. Required.""" + e_tag: str = rest_field( + name="eTag", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Etag", "text": False, "unwrapped": False}, + ) + """The blob ETag. Required.""" + content_length: Optional[int] = rest_field( + name="contentLength", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Content-Length", "text": False, "unwrapped": False}, + ) + """The content length of the blob.""" + content_type: Optional[str] = rest_field( + name="contentType", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Content-Type", "text": False, "unwrapped": False}, + ) + """The content type of the blob.""" + content_encoding: Optional[str] = rest_field( + name="contentEncoding", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Content-Encoding", "text": False, "unwrapped": False}, + ) + """The content encoding of the blob.""" + content_language: Optional[str] = rest_field( + name="contentLanguage", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Content-Language", "text": False, "unwrapped": False}, + ) + """The content language of the blob.""" + content_md5: Optional[bytes] = rest_field( + name="contentMd5", + visibility=["read", "create", "update", "delete", "query"], + format="base64", + xml={"attribute": False, "name": "Content-MD5", "text": False, "unwrapped": False}, + ) + """The content MD5 of the blob.""" + content_disposition: Optional[str] = rest_field( + name="contentDisposition", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Content-Disposition", "text": False, "unwrapped": False}, + ) + """The content disposition of the blob.""" + cache_control: Optional[str] = rest_field( + name="cacheControl", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Cache-Control", "text": False, "unwrapped": False}, + ) + """The cache control of the blob.""" + blob_sequence_number: Optional[int] = rest_field( + name="blobSequenceNumber", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "x-ms-blob-sequence-number", "text": False, "unwrapped": False}, + ) + """The sequence number of the blob.""" + blob_type: Optional[Union[str, "_models.BlobType"]] = rest_field( + name="blobType", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "BlobType", "text": False, "unwrapped": False}, + ) + """The blob type. Known values are: \"BlockBlob\", \"PageBlob\", and \"AppendBlob\".""" + lease_status: Optional[Union[str, "_models.LeaseStatus"]] = rest_field( + name="leaseStatus", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "LeaseStatus", "text": False, "unwrapped": False}, + ) + """The lease status of the blob. Known values are: \"unlocked\" and \"locked\".""" + lease_state: Optional[Union[str, "_models.LeaseState"]] = rest_field( + name="leaseState", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "LeaseState", "text": False, "unwrapped": False}, + ) + """The lease state of the blob. Known values are: \"available\", \"leased\", \"expired\", + \"breaking\", and \"broken\".""" + lease_duration: Optional[Union[str, "_models.LeaseDuration"]] = rest_field( + name="leaseDuration", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "LeaseDuration", "text": False, "unwrapped": False}, + ) + """The lease duration of the blob. Known values are: \"infinite\" and \"fixed\".""" + copy_id: Optional[str] = rest_field( + name="copyId", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "CopyId", "text": False, "unwrapped": False}, + ) + """The copy ID of the blob.""" + copy_status: Optional[Union[str, "_models.CopyStatus"]] = rest_field( + name="copyStatus", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "CopyStatus", "text": False, "unwrapped": False}, + ) + """The copy status of the blob. Known values are: \"pending\", \"success\", \"failed\", and + \"aborted\".""" + copy_source: Optional[str] = rest_field( + name="copySource", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "CopySource", "text": False, "unwrapped": False}, + ) + """The copy source of the blob.""" + copy_progress: Optional[str] = rest_field( + name="copyProgress", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "CopyProgress", "text": False, "unwrapped": False}, + ) + """The copy progress of the blob.""" + copy_completion_time: Optional[datetime.datetime] = rest_field( + name="copyCompletionTime", + visibility=["read", "create", "update", "delete", "query"], + format="rfc7231", + xml={"attribute": False, "name": "CopyCompletionTime", "text": False, "unwrapped": False}, + ) + """The copy completion time of the blob.""" + copy_status_description: Optional[str] = rest_field( + name="copyStatusDescription", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "CopyStatusDescription", "text": False, "unwrapped": False}, + ) + """The copy status description of the blob.""" + server_encrypted: Optional[bool] = rest_field( + name="serverEncrypted", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "ServerEncrypted", "text": False, "unwrapped": False}, + ) + """Whether the blob is encrypted on the server.""" + incremental_copy: Optional[bool] = rest_field( + name="incrementalCopy", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "IncrementalCopy", "text": False, "unwrapped": False}, + ) + """Whether the blob is incremental copy.""" + destination_snapshot: Optional[str] = rest_field( + name="destinationSnapshot", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "DestinationSnapshot", "text": False, "unwrapped": False}, + ) + """The name of the destination snapshot.""" + deleted_time: Optional[datetime.datetime] = rest_field( + name="deletedTime", + visibility=["read", "create", "update", "delete", "query"], + format="rfc7231", + xml={"attribute": False, "name": "DeletedTime", "text": False, "unwrapped": False}, + ) + """The time the blob was deleted.""" + remaining_retention_days: Optional[int] = rest_field( + name="remainingRetentionDays", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "RemainingRetentionDays", "text": False, "unwrapped": False}, + ) + """The remaining retention days of the blob.""" + access_tier: Optional[Union[str, "_models.AccessTier"]] = rest_field( + name="accessTier", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "AccessTier", "text": False, "unwrapped": False}, + ) + """The access tier of the blob. Known values are: \"P4\", \"P6\", \"P10\", \"P15\", \"P20\", + \"P30\", \"P40\", \"P50\", \"P60\", \"P70\", \"P80\", \"Hot\", \"Cool\", \"Archive\", + \"Premium\", and \"Cold\".""" + access_tier_inferred: Optional[bool] = rest_field( + name="accessTierInferred", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "AccessTierInferred", "text": False, "unwrapped": False}, + ) + """Whether the access tier is inferred.""" + archive_status: Optional[Union[str, "_models.ArchiveStatus"]] = rest_field( + name="archiveStatus", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "ArchiveStatus", "text": False, "unwrapped": False}, + ) + """The archive status of the blob. Known values are: \"rehydrate-pending-to-hot\", + \"rehydrate-pending-to-cool\", and \"rehydrate-pending-to-cold\".""" + customer_provided_key_sha256: Optional[str] = rest_field( + name="customerProvidedKeySha256", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "CustomerProvidedKeySha256", "text": False, "unwrapped": False}, + ) + """Customer provided key sha256.""" + encryption_scope: Optional[str] = rest_field( + name="encryptionScope", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "EncryptionScope", "text": False, "unwrapped": False}, + ) + """The encryption scope of the blob.""" + access_tier_change_time: Optional[datetime.datetime] = rest_field( + name="accessTierChangeTime", + visibility=["read", "create", "update", "delete", "query"], + format="rfc7231", + xml={"attribute": False, "name": "AccessTierChangeTime", "text": False, "unwrapped": False}, + ) + """The access tier change time of the blob.""" + tag_count: Optional[int] = rest_field( + name="tagCount", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "TagCount", "text": False, "unwrapped": False}, + ) + """The number of tags for the blob.""" + expires_on: Optional[datetime.datetime] = rest_field( + name="ExpiresOn", + visibility=["read", "create", "update", "delete", "query"], + format="rfc7231", + xml={"attribute": False, "name": "Expiry-Time", "text": False, "unwrapped": False}, + ) + """The expire time of the blob.""" + is_sealed: Optional[bool] = rest_field( + name="IsSealed", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Sealed", "text": False, "unwrapped": False}, + ) + """Whether the blob is sealed.""" + rehydrate_priority: Optional[Union[str, "_models.RehydratePriority"]] = rest_field( + name="rehydratePriority", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "RehydratePriority", "text": False, "unwrapped": False}, + ) + """The rehydrate priority of the blob. Known values are: \"High\" and \"Standard\".""" + last_accessed_on: Optional[datetime.datetime] = rest_field( + name="LastAccessedOn", + visibility=["read", "create", "update", "delete", "query"], + format="rfc7231", + xml={"attribute": False, "name": "LastAccessTime", "text": False, "unwrapped": False}, + ) + """The last access time of the blob.""" + immutability_policy_expires_on: Optional[datetime.datetime] = rest_field( + name="ImmutabilityPolicyExpiresOn", + visibility=["read", "create", "update", "delete", "query"], + format="rfc7231", + xml={"attribute": False, "name": "ImmutabilityPolicyUntilDate", "text": False, "unwrapped": False}, + ) + """The immutability policy until time of the blob.""" + immutability_policy_mode: Optional[Union[str, "_models.ImmutabilityPolicyMode"]] = rest_field( + name="immutabilityPolicyMode", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "ImmutabilityPolicyMode", "text": False, "unwrapped": False}, + ) + """The immutability policy mode of the blob. Known values are: \"mutable\", \"locked\", and + \"unlocked\".""" + legal_hold: Optional[bool] = rest_field( + name="legalHold", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "LegalHold", "text": False, "unwrapped": False}, + ) + """Whether the blob is under legal hold.""" + + _xml = {"attribute": False, "name": "Properties", "text": False, "unwrapped": False} + + @overload + def __init__( # pylint: disable=too-many-locals + self, + *, + last_modified: datetime.datetime, + e_tag: str, + creation_time: Optional[datetime.datetime] = None, + content_length: Optional[int] = None, + content_type: Optional[str] = None, + content_encoding: Optional[str] = None, + content_language: Optional[str] = None, + content_md5: Optional[bytes] = None, + content_disposition: Optional[str] = None, + cache_control: Optional[str] = None, + blob_sequence_number: Optional[int] = None, + blob_type: Optional[Union[str, "_models.BlobType"]] = None, + lease_status: Optional[Union[str, "_models.LeaseStatus"]] = None, + lease_state: Optional[Union[str, "_models.LeaseState"]] = None, + lease_duration: Optional[Union[str, "_models.LeaseDuration"]] = None, + copy_id: Optional[str] = None, + copy_status: Optional[Union[str, "_models.CopyStatus"]] = None, + copy_source: Optional[str] = None, + copy_progress: Optional[str] = None, + copy_completion_time: Optional[datetime.datetime] = None, + copy_status_description: Optional[str] = None, + server_encrypted: Optional[bool] = None, + incremental_copy: Optional[bool] = None, + destination_snapshot: Optional[str] = None, + deleted_time: Optional[datetime.datetime] = None, + remaining_retention_days: Optional[int] = None, + access_tier: Optional[Union[str, "_models.AccessTier"]] = None, + access_tier_inferred: Optional[bool] = None, + archive_status: Optional[Union[str, "_models.ArchiveStatus"]] = None, + customer_provided_key_sha256: Optional[str] = None, + encryption_scope: Optional[str] = None, + access_tier_change_time: Optional[datetime.datetime] = None, + tag_count: Optional[int] = None, + expires_on: Optional[datetime.datetime] = None, + is_sealed: Optional[bool] = None, + rehydrate_priority: Optional[Union[str, "_models.RehydratePriority"]] = None, + last_accessed_on: Optional[datetime.datetime] = None, + immutability_policy_expires_on: Optional[datetime.datetime] = None, + immutability_policy_mode: Optional[Union[str, "_models.ImmutabilityPolicyMode"]] = None, + legal_hold: Optional[bool] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class BlobServiceProperties(_Model): + """The service properties. + + :ivar logging: The logging properties. + :vartype logging: ~azure.storage.blobs.models.Logging + :ivar hour_metrics: The hour metrics properties. + :vartype hour_metrics: ~azure.storage.blobs.models.Metrics + :ivar minute_metrics: The minute metrics properties. + :vartype minute_metrics: ~azure.storage.blobs.models.Metrics + :ivar cors: The CORS properties. + :vartype cors: ~azure.storage.blobs.models.CorsRule + :ivar default_service_version: The default service version. + :vartype default_service_version: str + :ivar delete_retention_policy: The delete retention policy. + :vartype delete_retention_policy: ~azure.storage.blobs.models.RetentionPolicy + :ivar static_website: The static website properties. + :vartype static_website: ~azure.storage.blobs.models.StaticWebsite + """ + + logging: Optional["_models.Logging"] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Logging", "text": False, "unwrapped": False}, + ) + """The logging properties.""" + hour_metrics: Optional["_models.Metrics"] = rest_field( + name="hourMetrics", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "HourMetrics", "text": False, "unwrapped": False}, + ) + """The hour metrics properties.""" + minute_metrics: Optional["_models.Metrics"] = rest_field( + name="minuteMetrics", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "MinuteMetrics", "text": False, "unwrapped": False}, + ) + """The minute metrics properties.""" + cors: Optional[list["_models.CorsRule"]] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "itemsName": "CorsRule", "name": "Cors", "text": False, "unwrapped": False}, + ) + """The CORS properties.""" + default_service_version: Optional[str] = rest_field( + name="defaultServiceVersion", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "DefaultServiceVersion", "text": False, "unwrapped": False}, + ) + """The default service version.""" + delete_retention_policy: Optional["_models.RetentionPolicy"] = rest_field( + name="deleteRetentionPolicy", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "DeleteRetentionPolicy", "text": False, "unwrapped": False}, + ) + """The delete retention policy.""" + static_website: Optional["_models.StaticWebsite"] = rest_field( + name="staticWebsite", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "StaticWebsite", "text": False, "unwrapped": False}, + ) + """The static website properties.""" + + _xml = {"attribute": False, "name": "StorageServiceProperties", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + logging: Optional["_models.Logging"] = None, + hour_metrics: Optional["_models.Metrics"] = None, + minute_metrics: Optional["_models.Metrics"] = None, + cors: Optional[list["_models.CorsRule"]] = None, + default_service_version: Optional[str] = None, + delete_retention_policy: Optional["_models.RetentionPolicy"] = None, + static_website: Optional["_models.StaticWebsite"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class BlobTag(_Model): + """The blob tags. + + :ivar key: The key of the tag. Required. + :vartype key: str + :ivar value: The value of the tag. Required. + :vartype value: str + """ + + key: str = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Key", "text": False, "unwrapped": False}, + ) + """The key of the tag. Required.""" + value: str = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Value", "text": False, "unwrapped": False}, + ) + """The value of the tag. Required.""" + + _xml = {"attribute": False, "name": "Tag", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + key: str, + value: str, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class BlobTags(_Model): + """Represents blob tags. + + :ivar blob_tag_set: Represents the blob tags. Required. + :vartype blob_tag_set: ~azure.storage.blobs.models.BlobTag + """ + + blob_tag_set: list["_models.BlobTag"] = rest_field( + name="blobTagSet", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "itemsName": "Tag", "name": "TagSet", "text": False, "unwrapped": False}, + ) + """Represents the blob tags. Required.""" + + _xml = {"attribute": False, "name": "Tags", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + blob_tag_set: list["_models.BlobTag"], + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class Block(_Model): + """Represents a single block in a block blob. It describes the block's ID and size. + + :ivar name: The base64 encoded block ID. Required. + :vartype name: bytes + :ivar size: The block size in bytes. Required. + :vartype size: int + """ + + name: bytes = rest_field( + visibility=["read", "create", "update", "delete", "query"], + format="base64", + xml={"attribute": False, "name": "Name", "text": False, "unwrapped": False}, + ) + """The base64 encoded block ID. Required.""" + size: int = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Size", "text": False, "unwrapped": False}, + ) + """The block size in bytes. Required.""" + + _xml = {"attribute": False, "name": "Block", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + name: bytes, + size: int, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class BlockList(_Model): + """Contains the committed and uncommitted blocks in a block blob. + + :ivar committed_blocks: The list of committed blocks. + :vartype committed_blocks: ~azure.storage.blobs.models.Block + :ivar uncommitted_blocks: The list of uncommitted blocks. + :vartype uncommitted_blocks: ~azure.storage.blobs.models.Block + """ + + committed_blocks: Optional[list["_models.Block"]] = rest_field( + name="committedBlocks", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "itemsName": "Block", "name": "CommittedBlocks", "text": False, "unwrapped": False}, + ) + """The list of committed blocks.""" + uncommitted_blocks: Optional[list["_models.Block"]] = rest_field( + name="uncommittedBlocks", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "itemsName": "Block", "name": "UncommittedBlocks", "text": False, "unwrapped": False}, + ) + """The list of uncommitted blocks.""" + + _xml = {"attribute": False, "name": "BlockList", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + committed_blocks: Optional[list["_models.Block"]] = None, + uncommitted_blocks: Optional[list["_models.Block"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class BlockLookupList(_Model): + """The Block lookup list. + + :ivar committed: The committed blocks. + :vartype committed: list[bytes] + :ivar uncommitted: The uncommitted blocks. + :vartype uncommitted: list[bytes] + :ivar latest: The latest blocks. + :vartype latest: list[bytes] + """ + + committed: Optional[list[bytes]] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + format="base64", + xml={"attribute": False, "itemsName": "Committed", "name": "Committed", "text": False, "unwrapped": True}, + ) + """The committed blocks.""" + uncommitted: Optional[list[bytes]] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + format="base64", + xml={"attribute": False, "itemsName": "Uncommitted", "name": "Uncommitted", "text": False, "unwrapped": True}, + ) + """The uncommitted blocks.""" + latest: Optional[list[bytes]] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + format="base64", + xml={"attribute": False, "itemsName": "Latest", "name": "Latest", "text": False, "unwrapped": True}, + ) + """The latest blocks.""" + + _xml = {"attribute": False, "name": "BlockList", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + committed: Optional[list[bytes]] = None, + uncommitted: Optional[list[bytes]] = None, + latest: Optional[list[bytes]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class ClearRange(_Model): + """The clear range. + + :ivar start: The start of the byte range. Required. + :vartype start: int + :ivar end: The end of the byte range. Required. + :vartype end: int + """ + + start: int = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Start", "text": False, "unwrapped": False}, + ) + """The start of the byte range. Required.""" + end: int = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "End", "text": False, "unwrapped": False}, + ) + """The end of the byte range. Required.""" + + _xml = {"attribute": False, "name": "ClearRange", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + start: int, + end: int, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class ContainerItem(_Model): + """An Azure Storage container. + + :ivar name: The name of the container. Required. + :vartype name: str + :ivar delete: Whether the container is deleted. + :vartype delete: bool + :ivar version: The version of the container. + :vartype version: str + :ivar properties: The properties of the container. Required. + :vartype properties: ~azure.storage.blobs.models.ContainerProperties + :ivar metadata: The metadata of the container. + :vartype metadata: dict[str, str] + """ + + name: str = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Name", "text": False, "unwrapped": False}, + ) + """The name of the container. Required.""" + delete: Optional[bool] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Deleted", "text": False, "unwrapped": False}, + ) + """Whether the container is deleted.""" + version: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Version", "text": False, "unwrapped": False}, + ) + """The version of the container.""" + properties: "_models.ContainerProperties" = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Properties", "text": False, "unwrapped": False}, + ) + """The properties of the container. Required.""" + metadata: Optional[dict[str, str]] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Metadata", "text": False, "unwrapped": False}, + ) + """The metadata of the container.""" + + _xml = {"attribute": False, "name": "Container", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + name: str, + properties: "_models.ContainerProperties", + delete: Optional[bool] = None, + version: Optional[str] = None, + metadata: Optional[dict[str, str]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class ContainerProperties(_Model): + """The properties of a container. + + :ivar last_modified: The date-time the container was last modified in RFC1123 format. Required. + :vartype last_modified: ~datetime.datetime + :ivar e_tag: The ETag of the container. Required. + :vartype e_tag: str + :ivar lease_status: The lease status of the container. Known values are: "unlocked" and + "locked". + :vartype lease_status: str or ~azure.storage.blobs.models.LeaseStatus + :ivar lease_state: The lease state of the container. Known values are: "available", "leased", + "expired", "breaking", and "broken". + :vartype lease_state: str or ~azure.storage.blobs.models.LeaseState + :ivar lease_duration: The lease duration of the container. Known values are: "infinite" and + "fixed". + :vartype lease_duration: str or ~azure.storage.blobs.models.LeaseDuration + :ivar public_access: The public access type of the container. Known values are: "blob" and + "container". + :vartype public_access: str or ~azure.storage.blobs.models.PublicAccessType + :ivar has_immutability_policy: Whether it has an immutability policy. + :vartype has_immutability_policy: bool + :ivar has_legal_hold: The has legal hold status of the container. + :vartype has_legal_hold: bool + :ivar default_encryption_scope: The default encryption scope of the container. + :vartype default_encryption_scope: str + :ivar prevent_encryption_scope_override: Whether to prevent encryption scope override. + :vartype prevent_encryption_scope_override: bool + :ivar deleted_time: The deleted time of the container. + :vartype deleted_time: ~datetime.datetime + :ivar remaining_retention_days: The remaining retention days of the container. + :vartype remaining_retention_days: int + :ivar is_immutable_storage_with_versioning_enabled: Whether immutable storage with versioning + is enabled. + :vartype is_immutable_storage_with_versioning_enabled: bool + """ + + last_modified: datetime.datetime = rest_field( + name="lastModified", + visibility=["read", "create", "update", "delete", "query"], + format="rfc7231", + xml={"attribute": False, "name": "Last-Modified", "text": False, "unwrapped": False}, + ) + """The date-time the container was last modified in RFC1123 format. Required.""" + e_tag: str = rest_field( + name="eTag", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "ETag", "text": False, "unwrapped": False}, + ) + """The ETag of the container. Required.""" + lease_status: Optional[Union[str, "_models.LeaseStatus"]] = rest_field( + name="leaseStatus", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "LeaseStatus", "text": False, "unwrapped": False}, + ) + """The lease status of the container. Known values are: \"unlocked\" and \"locked\".""" + lease_state: Optional[Union[str, "_models.LeaseState"]] = rest_field( + name="leaseState", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "LeaseState", "text": False, "unwrapped": False}, + ) + """The lease state of the container. Known values are: \"available\", \"leased\", \"expired\", + \"breaking\", and \"broken\".""" + lease_duration: Optional[Union[str, "_models.LeaseDuration"]] = rest_field( + name="leaseDuration", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "LeaseDuration", "text": False, "unwrapped": False}, + ) + """The lease duration of the container. Known values are: \"infinite\" and \"fixed\".""" + public_access: Optional[Union[str, "_models.PublicAccessType"]] = rest_field( + name="publicAccess", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "PublicAccess", "text": False, "unwrapped": False}, + ) + """The public access type of the container. Known values are: \"blob\" and \"container\".""" + has_immutability_policy: Optional[bool] = rest_field( + name="hasImmutabilityPolicy", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "HasImmutabilityPolicy", "text": False, "unwrapped": False}, + ) + """Whether it has an immutability policy.""" + has_legal_hold: Optional[bool] = rest_field( + name="hasLegalHold", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "HasLegalHold", "text": False, "unwrapped": False}, + ) + """The has legal hold status of the container.""" + default_encryption_scope: Optional[str] = rest_field( + name="defaultEncryptionScope", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "DefaultEncryptionScope", "text": False, "unwrapped": False}, + ) + """The default encryption scope of the container.""" + prevent_encryption_scope_override: Optional[bool] = rest_field( + name="PreventEncryptionScopeOverride", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "DenyEncryptionScopeOverride", "text": False, "unwrapped": False}, + ) + """Whether to prevent encryption scope override.""" + deleted_time: Optional[datetime.datetime] = rest_field( + name="deletedTime", + visibility=["read", "create", "update", "delete", "query"], + format="rfc7231", + xml={"attribute": False, "name": "DeletedTime", "text": False, "unwrapped": False}, + ) + """The deleted time of the container.""" + remaining_retention_days: Optional[int] = rest_field( + name="remainingRetentionDays", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "RemainingRetentionDays", "text": False, "unwrapped": False}, + ) + """The remaining retention days of the container.""" + is_immutable_storage_with_versioning_enabled: Optional[bool] = rest_field( + name="IsImmutableStorageWithVersioningEnabled", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "ImmutableStorageWithVersioningEnabled", "text": False, "unwrapped": False}, + ) + """Whether immutable storage with versioning is enabled.""" + + _xml = {"attribute": False, "name": "ContainerProperties", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + last_modified: datetime.datetime, + e_tag: str, + lease_status: Optional[Union[str, "_models.LeaseStatus"]] = None, + lease_state: Optional[Union[str, "_models.LeaseState"]] = None, + lease_duration: Optional[Union[str, "_models.LeaseDuration"]] = None, + public_access: Optional[Union[str, "_models.PublicAccessType"]] = None, + has_immutability_policy: Optional[bool] = None, + has_legal_hold: Optional[bool] = None, + default_encryption_scope: Optional[str] = None, + prevent_encryption_scope_override: Optional[bool] = None, + deleted_time: Optional[datetime.datetime] = None, + remaining_retention_days: Optional[int] = None, + is_immutable_storage_with_versioning_enabled: Optional[bool] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class CorsRule(_Model): + """CORS is an HTTP feature that enables a web application running under one domain to access + resources in another domain. Web browsers implement a security restriction known as same-origin + policy that prevents a web page from calling APIs in a different domain; CORS provides a secure + way to allow one domain (the origin domain) to call APIs in another domain. + + :ivar allowed_origins: The allowed origins. Required. + :vartype allowed_origins: str + :ivar allowed_methods: The allowed methods. Required. + :vartype allowed_methods: str + :ivar allowed_headers: The allowed headers. Required. + :vartype allowed_headers: str + :ivar exposed_headers: The exposed headers. Required. + :vartype exposed_headers: str + :ivar max_age_in_seconds: The maximum age in seconds. Required. + :vartype max_age_in_seconds: int + """ + + allowed_origins: str = rest_field( + name="allowedOrigins", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "AllowedOrigins", "text": False, "unwrapped": False}, + ) + """The allowed origins. Required.""" + allowed_methods: str = rest_field( + name="allowedMethods", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "AllowedMethods", "text": False, "unwrapped": False}, + ) + """The allowed methods. Required.""" + allowed_headers: str = rest_field( + name="allowedHeaders", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "AllowedHeaders", "text": False, "unwrapped": False}, + ) + """The allowed headers. Required.""" + exposed_headers: str = rest_field( + name="exposedHeaders", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "ExposedHeaders", "text": False, "unwrapped": False}, + ) + """The exposed headers. Required.""" + max_age_in_seconds: int = rest_field( + name="maxAgeInSeconds", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "MaxAgeInSeconds", "text": False, "unwrapped": False}, + ) + """The maximum age in seconds. Required.""" + + _xml = {"attribute": False, "name": "CorsRule", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + allowed_origins: str, + allowed_methods: str, + allowed_headers: str, + exposed_headers: str, + max_age_in_seconds: int, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class DelimitedTextConfiguration(_Model): + """Represents the delimited text configuration. + + :ivar column_separator: The string used to separate columns. + :vartype column_separator: str + :ivar field_quote: The string used to quote a specific field. + :vartype field_quote: str + :ivar record_separator: The string used to separate records. + :vartype record_separator: str + :ivar escape_char: The string used to escape a quote character in a field. + :vartype escape_char: str + :ivar headers_present: Represents whether the data has headers. + :vartype headers_present: bool + """ + + column_separator: Optional[str] = rest_field( + name="columnSeparator", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "ColumnSeparator", "text": False, "unwrapped": False}, + ) + """The string used to separate columns.""" + field_quote: Optional[str] = rest_field( + name="fieldQuote", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "FieldQuote", "text": False, "unwrapped": False}, + ) + """The string used to quote a specific field.""" + record_separator: Optional[str] = rest_field( + name="recordSeparator", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "RecordSeparator", "text": False, "unwrapped": False}, + ) + """The string used to separate records.""" + escape_char: Optional[str] = rest_field( + name="escapeChar", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "EscapeChar", "text": False, "unwrapped": False}, + ) + """The string used to escape a quote character in a field.""" + headers_present: Optional[bool] = rest_field( + name="headersPresent", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "HasHeaders", "text": False, "unwrapped": False}, + ) + """Represents whether the data has headers.""" + + _xml = {"attribute": False, "name": "DelimitedTextConfiguration", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + column_separator: Optional[str] = None, + field_quote: Optional[str] = None, + record_separator: Optional[str] = None, + escape_char: Optional[str] = None, + headers_present: Optional[bool] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class FilterBlobItem(_Model): + """The filter blob item. + + :ivar name: The name of the blob. Required. + :vartype name: str + :ivar container_name: The properties of the blob. Required. + :vartype container_name: str + :ivar tags: The metadata of the blob. + :vartype tags: ~azure.storage.blobs.models.BlobTags + :ivar version_id: The version ID of the blob. + :vartype version_id: str + :ivar is_current_version: Whether it is the current version of the blob. + :vartype is_current_version: bool + """ + + name: str = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Name", "text": False, "unwrapped": False}, + ) + """The name of the blob. Required.""" + container_name: str = rest_field( + name="containerName", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "ContainerName", "text": False, "unwrapped": False}, + ) + """The properties of the blob. Required.""" + tags: Optional["_models.BlobTags"] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "tags", "text": True, "unwrapped": False}, + ) + """The metadata of the blob.""" + version_id: Optional[str] = rest_field( + name="versionId", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "VersionId", "text": False, "unwrapped": False}, + ) + """The version ID of the blob.""" + is_current_version: Optional[bool] = rest_field( + name="isCurrentVersion", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "IsCurrentVersion", "text": False, "unwrapped": False}, + ) + """Whether it is the current version of the blob.""" + + _xml = {"attribute": False, "name": "Blob", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + name: str, + container_name: str, + tags: Optional["_models.BlobTags"] = None, + version_id: Optional[str] = None, + is_current_version: Optional[bool] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class FilterBlobSegment(_Model): + """The result of a Filter Blobs API call. + + :ivar service_endpoint: The service endpoint. Required. + :vartype service_endpoint: str + :ivar where: The filter for the blobs. Required. + :vartype where: str + :ivar blobs: The blob segment. Required. + :vartype blobs: ~azure.storage.blobs.models.FilterBlobItem + :ivar next_marker: The next marker of the blobs. + :vartype next_marker: str + """ + + service_endpoint: str = rest_field( + name="serviceEndpoint", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": True, "name": "ServiceEndpoint", "text": False, "unwrapped": False}, + ) + """The service endpoint. Required.""" + where: str = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Where", "text": False, "unwrapped": False}, + ) + """The filter for the blobs. Required.""" + blobs: list["_models.FilterBlobItem"] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "itemsName": "Blob", "name": "Blobs", "text": False, "unwrapped": False}, + ) + """The blob segment. Required.""" + next_marker: Optional[str] = rest_field( + name="nextMarker", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "NextMarker", "text": False, "unwrapped": False}, + ) + """The next marker of the blobs.""" + + _xml = {"attribute": False, "name": "EnumerationResults", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + service_endpoint: str, + where: str, + blobs: list["_models.FilterBlobItem"], + next_marker: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class GeoReplication(_Model): + """Geo-Replication information for the Secondary Storage Service. + + :ivar status: The status of the secondary location. Required. Known values are: "live", + "bootstrap", and "unavailable". + :vartype status: str or ~azure.storage.blobs.models.GeoReplicationStatusType + :ivar last_sync_time: A GMT date/time value, to the second. All primary writes preceding this + value are guaranteed to be available for read operations at the secondary. Primary writes after + this point in time may or may not be available for reads. Required. + :vartype last_sync_time: ~datetime.datetime + """ + + status: Union[str, "_models.GeoReplicationStatusType"] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Status", "text": False, "unwrapped": False}, + ) + """The status of the secondary location. Required. Known values are: \"live\", \"bootstrap\", and + \"unavailable\".""" + last_sync_time: datetime.datetime = rest_field( + name="lastSyncTime", + visibility=["read", "create", "update", "delete", "query"], + format="rfc7231", + xml={"attribute": False, "name": "LastSyncTime", "text": False, "unwrapped": False}, + ) + """A GMT date/time value, to the second. All primary writes preceding this value are guaranteed to + be available for read operations at the secondary. Primary writes after this point in time may + or may not be available for reads. Required.""" + + _xml = {"attribute": False, "name": "GeoReplication", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + status: Union[str, "_models.GeoReplicationStatusType"], + last_sync_time: datetime.datetime, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class JsonTextConfiguration(_Model): + """Represents the JSON text configuration. + + :ivar record_separator: The string used to separate records. + :vartype record_separator: str + """ + + record_separator: Optional[str] = rest_field( + name="recordSeparator", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "RecordSeparator", "text": False, "unwrapped": False}, + ) + """The string used to separate records.""" + + _xml = {"attribute": False, "name": "JsonTextConfiguration", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + record_separator: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class KeyInfo(_Model): + """Key information. + + :ivar start: The date-time the key is active. Required. + :vartype start: str + :ivar expiry: The date-time the key expires. Required. + :vartype expiry: str + :ivar delegated_user_tid: The delegated user tenant id in Azure AD. + :vartype delegated_user_tid: str + """ + + start: str = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Start", "text": False, "unwrapped": False}, + ) + """The date-time the key is active. Required.""" + expiry: str = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Expiry", "text": False, "unwrapped": False}, + ) + """The date-time the key expires. Required.""" + delegated_user_tid: Optional[str] = rest_field( + name="delegatedUserTid", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "DelegatedUserTid", "text": False, "unwrapped": False}, + ) + """The delegated user tenant id in Azure AD.""" + + _xml = {"attribute": False, "name": "KeyInfo", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + start: str, + expiry: str, + delegated_user_tid: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class ListBlobsFlatSegmentResponse(_Model): + """An enumeration of blobs. + + :ivar service_endpoint: The service endpoint. Required. + :vartype service_endpoint: str + :ivar container_name: The container name. Required. + :vartype container_name: str + :ivar prefix: The prefix of the blobs. + :vartype prefix: str + :ivar marker: The marker of the blobs. + :vartype marker: str + :ivar max_results: The max results of the blobs. + :vartype max_results: int + :ivar segment: The blob segment. Required. + :vartype segment: ~azure.storage.blobs.models.BlobFlatListSegment + :ivar next_marker: The next marker of the blobs. + :vartype next_marker: str + """ + + service_endpoint: str = rest_field( + name="serviceEndpoint", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": True, "name": "ServiceEndpoint", "text": False, "unwrapped": False}, + ) + """The service endpoint. Required.""" + container_name: str = rest_field( + name="containerName", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": True, "name": "ContainerName", "text": False, "unwrapped": False}, + ) + """The container name. Required.""" + prefix: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Prefix", "text": False, "unwrapped": False}, + ) + """The prefix of the blobs.""" + marker: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Marker", "text": False, "unwrapped": False}, + ) + """The marker of the blobs.""" + max_results: Optional[int] = rest_field( + name="maxResults", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "MaxResults", "text": False, "unwrapped": False}, + ) + """The max results of the blobs.""" + segment: "_models.BlobFlatListSegment" = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Blobs", "text": False, "unwrapped": False}, + ) + """The blob segment. Required.""" + next_marker: Optional[str] = rest_field( + name="nextMarker", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "NextMarker", "text": False, "unwrapped": False}, + ) + """The next marker of the blobs.""" + + _xml = {"attribute": False, "name": "EnumerationResults", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + service_endpoint: str, + container_name: str, + segment: "_models.BlobFlatListSegment", + prefix: Optional[str] = None, + marker: Optional[str] = None, + max_results: Optional[int] = None, + next_marker: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class ListBlobsHierarchySegmentResponse(_Model): + """An enumeration of blobs. + + :ivar service_endpoint: The service endpoint. Required. + :vartype service_endpoint: str + :ivar container_name: The container name. Required. + :vartype container_name: str + :ivar delimiter: The delimiter of the blobs. + :vartype delimiter: str + :ivar prefix: The prefix of the blobs. + :vartype prefix: str + :ivar marker: The marker of the blobs. + :vartype marker: str + :ivar max_results: The max results of the blobs. + :vartype max_results: int + :ivar segment: The blob segment. Required. + :vartype segment: ~azure.storage.blobs.models.BlobHierarchyListSegment + :ivar next_marker: The next marker of the blobs. + :vartype next_marker: str + """ + + service_endpoint: str = rest_field( + name="serviceEndpoint", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": True, "name": "ServiceEndpoint", "text": False, "unwrapped": False}, + ) + """The service endpoint. Required.""" + container_name: str = rest_field( + name="containerName", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": True, "name": "ContainerName", "text": False, "unwrapped": False}, + ) + """The container name. Required.""" + delimiter: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Delimiter", "text": False, "unwrapped": False}, + ) + """The delimiter of the blobs.""" + prefix: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Prefix", "text": False, "unwrapped": False}, + ) + """The prefix of the blobs.""" + marker: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Marker", "text": False, "unwrapped": False}, + ) + """The marker of the blobs.""" + max_results: Optional[int] = rest_field( + name="maxResults", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "MaxResults", "text": False, "unwrapped": False}, + ) + """The max results of the blobs.""" + segment: "_models.BlobHierarchyListSegment" = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Blobs", "text": False, "unwrapped": False}, + ) + """The blob segment. Required.""" + next_marker: Optional[str] = rest_field( + name="nextMarker", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "NextMarker", "text": False, "unwrapped": False}, + ) + """The next marker of the blobs.""" + + _xml = {"attribute": False, "name": "EnumerationResults", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + service_endpoint: str, + container_name: str, + segment: "_models.BlobHierarchyListSegment", + delimiter: Optional[str] = None, + prefix: Optional[str] = None, + marker: Optional[str] = None, + max_results: Optional[int] = None, + next_marker: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class ListContainersSegmentResponse(_Model): + """The list container segment response. + + :ivar service_endpoint: The service endpoint. Required. + :vartype service_endpoint: str + :ivar prefix: The prefix of the containers. + :vartype prefix: str + :ivar marker: The marker of the containers. + :vartype marker: str + :ivar max_results: The max results of the containers. + :vartype max_results: int + :ivar container_items: The container segment. Required. + :vartype container_items: ~azure.storage.blobs.models.ContainerItem + :ivar next_marker: The next marker of the containers. + :vartype next_marker: str + """ + + service_endpoint: str = rest_field( + name="serviceEndpoint", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": True, "name": "ServiceEndpoint", "text": False, "unwrapped": False}, + ) + """The service endpoint. Required.""" + prefix: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Prefix", "text": False, "unwrapped": False}, + ) + """The prefix of the containers.""" + marker: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Marker", "text": False, "unwrapped": False}, + ) + """The marker of the containers.""" + max_results: Optional[int] = rest_field( + name="maxResults", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "MaxResults", "text": False, "unwrapped": False}, + ) + """The max results of the containers.""" + container_items: list["_models.ContainerItem"] = rest_field( + name="containerItems", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "itemsName": "Container", "name": "Containers", "text": False, "unwrapped": False}, + ) + """The container segment. Required.""" + next_marker: Optional[str] = rest_field( + name="NextMarker", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "NextMarker", "text": False, "unwrapped": False}, + ) + """The next marker of the containers.""" + + _xml = {"attribute": False, "name": "EnumerationResults", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + service_endpoint: str, + container_items: list["_models.ContainerItem"], + prefix: Optional[str] = None, + marker: Optional[str] = None, + max_results: Optional[int] = None, + next_marker: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class Logging(_Model): + """Azure Analytics Logging settings. + + :ivar version: The version of the logging properties. Required. + :vartype version: str + :ivar delete: Whether delete operation is logged. Required. + :vartype delete: bool + :ivar read: Whether read operation is logged. Required. + :vartype read: bool + :ivar write: Whether write operation is logged. Required. + :vartype write: bool + :ivar retention_policy: The retention policy of the logs. Required. + :vartype retention_policy: ~azure.storage.blobs.models.RetentionPolicy + """ + + version: str = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Version", "text": False, "unwrapped": False}, + ) + """The version of the logging properties. Required.""" + delete: bool = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Delete", "text": False, "unwrapped": False}, + ) + """Whether delete operation is logged. Required.""" + read: bool = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Read", "text": False, "unwrapped": False}, + ) + """Whether read operation is logged. Required.""" + write: bool = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Write", "text": False, "unwrapped": False}, + ) + """Whether write operation is logged. Required.""" + retention_policy: "_models.RetentionPolicy" = rest_field( + name="retentionPolicy", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "RetentionPolicy", "text": False, "unwrapped": False}, + ) + """The retention policy of the logs. Required.""" + + _xml = {"attribute": False, "name": "Logging", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + version: str, + delete: bool, + read: bool, + write: bool, + retention_policy: "_models.RetentionPolicy", + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class Metrics(_Model): + """The metrics properties. + + :ivar version: The version of the metrics properties. + :vartype version: str + :ivar enabled: Whether it is enabled. Required. + :vartype enabled: bool + :ivar include_apis: Whether to include API in the metrics. + :vartype include_apis: bool + :ivar retention_policy: The retention policy of the metrics. + :vartype retention_policy: ~azure.storage.blobs.models.RetentionPolicy + """ + + version: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Version", "text": False, "unwrapped": False}, + ) + """The version of the metrics properties.""" + enabled: bool = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Enabled", "text": False, "unwrapped": False}, + ) + """Whether it is enabled. Required.""" + include_apis: Optional[bool] = rest_field( + name="includeApis", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "IncludeAPIs", "text": False, "unwrapped": False}, + ) + """Whether to include API in the metrics.""" + retention_policy: Optional["_models.RetentionPolicy"] = rest_field( + name="retentionPolicy", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "RetentionPolicy", "text": False, "unwrapped": False}, + ) + """The retention policy of the metrics.""" + + _xml = {"attribute": False, "name": "Metrics", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + enabled: bool, + version: Optional[str] = None, + include_apis: Optional[bool] = None, + retention_policy: Optional["_models.RetentionPolicy"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class ObjectReplicationMetadata(_Model): + """The object replication metadata.""" + + _xml = {"attribute": False, "name": "OrMetadata", "text": False, "unwrapped": False} + + +class PageList(_Model): + """Represents a page list. + + :ivar page_range: The page ranges. + :vartype page_range: ~azure.storage.blobs.models.PageRange + :ivar clear_range: The clear ranges. + :vartype clear_range: ~azure.storage.blobs.models.ClearRange + :ivar next_marker: The next marker. + :vartype next_marker: str + """ + + page_range: Optional[list["_models.PageRange"]] = rest_field( + name="pageRange", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "itemsName": "PageRange", "name": "PageRange", "text": False, "unwrapped": True}, + ) + """The page ranges.""" + clear_range: Optional[list["_models.ClearRange"]] = rest_field( + name="clearRange", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "itemsName": "ClearRange", "name": "ClearRange", "text": False, "unwrapped": True}, + ) + """The clear ranges.""" + next_marker: Optional[str] = rest_field( + name="nextMarker", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "NextMarker", "text": False, "unwrapped": False}, + ) + """The next marker.""" + + _xml = {"attribute": False, "name": "PageList", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + page_range: Optional[list["_models.PageRange"]] = None, + clear_range: Optional[list["_models.ClearRange"]] = None, + next_marker: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class PageRange(_Model): + """The page range. + + :ivar start: The start of the byte range. Required. + :vartype start: int + :ivar end: The end of the byte range. Required. + :vartype end: int + """ + + start: int = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Start", "text": False, "unwrapped": False}, + ) + """The start of the byte range. Required.""" + end: int = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "End", "text": False, "unwrapped": False}, + ) + """The end of the byte range. Required.""" + + _xml = {"attribute": False, "name": "PageRange", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + start: int, + end: int, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class ParquetConfiguration(_Model): + """Represents the Parquet configuration.""" + + _xml = {"attribute": False, "name": "ParquetConfiguration", "text": False, "unwrapped": False} + + +class QueryFormat(_Model): + """The query format settings. + + :ivar type: The query type. Required. Known values are: "delimited", "json", "arrow", and + "parquet". + :vartype type: str or ~azure.storage.blobs.models.QueryType + :ivar delimited_text_configuration: The delimited text configuration. + :vartype delimited_text_configuration: ~azure.storage.blobs.models.DelimitedTextConfiguration + :ivar json_text_configuration: The JSON text configuration. + :vartype json_text_configuration: ~azure.storage.blobs.models.JsonTextConfiguration + :ivar arrow_configuration: The Apache Arrow configuration. + :vartype arrow_configuration: ~azure.storage.blobs.models.ArrowConfiguration + :ivar parquet_text_configuration: The Parquet configuration. + :vartype parquet_text_configuration: ~azure.storage.blobs.models.ParquetConfiguration + """ + + type: Union[str, "_models.QueryType"] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Type", "text": False, "unwrapped": False}, + ) + """The query type. Required. Known values are: \"delimited\", \"json\", \"arrow\", and + \"parquet\".""" + delimited_text_configuration: Optional["_models.DelimitedTextConfiguration"] = rest_field( + name="delimitedTextConfiguration", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "DelimitedTextConfiguration", "text": False, "unwrapped": False}, + ) + """The delimited text configuration.""" + json_text_configuration: Optional["_models.JsonTextConfiguration"] = rest_field( + name="jsonTextConfiguration", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "JsonTextConfiguration", "text": False, "unwrapped": False}, + ) + """The JSON text configuration.""" + arrow_configuration: Optional["_models.ArrowConfiguration"] = rest_field( + name="arrowConfiguration", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "ArrowConfiguration", "text": False, "unwrapped": False}, + ) + """The Apache Arrow configuration.""" + parquet_text_configuration: Optional["_models.ParquetConfiguration"] = rest_field( + name="parquetTextConfiguration", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "ParquetConfiguration", "text": False, "unwrapped": False}, + ) + """The Parquet configuration.""" + + _xml = {"attribute": False, "name": "QueryFormat", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + type: Union[str, "_models.QueryType"], + delimited_text_configuration: Optional["_models.DelimitedTextConfiguration"] = None, + json_text_configuration: Optional["_models.JsonTextConfiguration"] = None, + arrow_configuration: Optional["_models.ArrowConfiguration"] = None, + parquet_text_configuration: Optional["_models.ParquetConfiguration"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class QueryRequest(_Model): + """Groups the set of query request settings. + + :ivar query_type: Required. The type of the provided query expression. Required. "SQL" + :vartype query_type: str or ~azure.storage.blobs.models.QueryRequestType + :ivar expression: The query expression in SQL. The maximum size of the query expression is + 256KiB. Required. + :vartype expression: str + :ivar input_serialization: The input serialization settings. + :vartype input_serialization: ~azure.storage.blobs.models.QuerySerialization + :ivar output_serialization: The output serialization settings. + :vartype output_serialization: ~azure.storage.blobs.models.QuerySerialization + """ + + query_type: Union[str, "_models.QueryRequestType"] = rest_field( + name="queryType", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "QueryType", "text": False, "unwrapped": False}, + ) + """Required. The type of the provided query expression. Required. \"SQL\"""" + expression: str = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Expression", "text": False, "unwrapped": False}, + ) + """The query expression in SQL. The maximum size of the query expression is 256KiB. Required.""" + input_serialization: Optional["_models.QuerySerialization"] = rest_field( + name="inputSerialization", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "InputSerialization", "text": False, "unwrapped": False}, + ) + """The input serialization settings.""" + output_serialization: Optional["_models.QuerySerialization"] = rest_field( + name="outputSerialization", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "OutputSerialization", "text": False, "unwrapped": False}, + ) + """The output serialization settings.""" + + _xml = {"attribute": False, "name": "QueryRequest", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + query_type: Union[str, "_models.QueryRequestType"], + expression: str, + input_serialization: Optional["_models.QuerySerialization"] = None, + output_serialization: Optional["_models.QuerySerialization"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class QuerySerialization(_Model): + """The query serialization settings. + + :ivar format: The query format. Required. + :vartype format: ~azure.storage.blobs.models.QueryFormat + """ + + format: "_models.QueryFormat" = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Format", "text": False, "unwrapped": False}, + ) + """The query format. Required.""" + + _xml = {"attribute": False, "name": "QuerySerialization", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + format: "_models.QueryFormat", + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class RetentionPolicy(_Model): + """The retention policy. + + :ivar enabled: Whether to enable the retention policy. Required. + :vartype enabled: bool + :ivar days: The number of days to retain the logs. + :vartype days: int + :ivar allow_permanent_delete: Whether to allow permanent delete. + :vartype allow_permanent_delete: bool + """ + + enabled: bool = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Enabled", "text": False, "unwrapped": False}, + ) + """Whether to enable the retention policy. Required.""" + days: Optional[int] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Days", "text": False, "unwrapped": False}, + ) + """The number of days to retain the logs.""" + allow_permanent_delete: Optional[bool] = rest_field( + name="allowPermanentDelete", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "AllowPermanentDelete", "text": False, "unwrapped": False}, + ) + """Whether to allow permanent delete.""" + + _xml = {"attribute": False, "name": "RetentionPolicy", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + enabled: bool, + days: Optional[int] = None, + allow_permanent_delete: Optional[bool] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class SignedIdentifier(_Model): + """The signed identifier. + + :ivar id: The unique ID for the signed identifier. Required. + :vartype id: str + :ivar access_policy: The access policy for the signed identifier. Required. + :vartype access_policy: ~azure.storage.blobs.models.AccessPolicy + """ + + id: str = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Id", "text": False, "unwrapped": False}, + ) + """The unique ID for the signed identifier. Required.""" + access_policy: "_models.AccessPolicy" = rest_field( + name="accessPolicy", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "AccessPolicy", "text": False, "unwrapped": False}, + ) + """The access policy for the signed identifier. Required.""" + + _xml = {"attribute": False, "name": "SignedIdentifier", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + id: str, # pylint: disable=redefined-builtin + access_policy: "_models.AccessPolicy", + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class SignedIdentifiers(_Model): + """Represents an array of signed identifiers. + + :ivar items_property: The array of signed identifiers. Required. + :vartype items_property: ~azure.storage.blobs.models.SignedIdentifier + """ + + items_property: list["_models.SignedIdentifier"] = rest_field( + name="items", + visibility=["read", "create", "update", "delete", "query"], + xml={ + "attribute": False, + "itemsName": "SignedIdentifier", + "name": "SignedIdentifier", + "text": False, + "unwrapped": True, + }, + original_tsp_name="items", + ) + """The array of signed identifiers. Required.""" + + _xml = {"attribute": False, "name": "SignedIdentifiers", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + items_property: list["_models.SignedIdentifier"], + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class StaticWebsite(_Model): + """The properties that enable an account to host a static website. + + :ivar enabled: Indicates whether this account is hosting a static website. Required. + :vartype enabled: bool + :ivar index_document: The index document. + :vartype index_document: str + :ivar error_document404_path: The error document. + :vartype error_document404_path: str + :ivar default_index_document_path: Absolute path of the default index page. + :vartype default_index_document_path: str + """ + + enabled: bool = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Enabled", "text": False, "unwrapped": False}, + ) + """Indicates whether this account is hosting a static website. Required.""" + index_document: Optional[str] = rest_field( + name="indexDocument", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "IndexDocument", "text": False, "unwrapped": False}, + ) + """The index document.""" + error_document404_path: Optional[str] = rest_field( + name="errorDocument404Path", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "ErrorDocument404Path", "text": False, "unwrapped": False}, + ) + """The error document.""" + default_index_document_path: Optional[str] = rest_field( + name="defaultIndexDocumentPath", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "DefaultIndexDocumentPath", "text": False, "unwrapped": False}, + ) + """Absolute path of the default index page.""" + + _xml = {"attribute": False, "name": "StaticWebsite", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + enabled: bool, + index_document: Optional[str] = None, + error_document404_path: Optional[str] = None, + default_index_document_path: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class StorageError(_Model): + """The error response. + + :ivar code: The error code. + :vartype code: str + :ivar message: The error message. + :vartype message: str + :ivar copy_source_status_code: Copy source status code. + :vartype copy_source_status_code: int + :ivar copy_source_error_code: Copy source error code. + :vartype copy_source_error_code: str + :ivar copy_source_error_message: Copy source error message. + :vartype copy_source_error_message: str + """ + + code: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Code", "text": False, "unwrapped": False}, + ) + """The error code.""" + message: Optional[str] = rest_field( + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "Message", "text": False, "unwrapped": False}, + ) + """The error message.""" + copy_source_status_code: Optional[int] = rest_field( + name="copySourceStatusCode", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "CopySourceStatusCode", "text": False, "unwrapped": False}, + ) + """Copy source status code.""" + copy_source_error_code: Optional[str] = rest_field( + name="copySourceErrorCode", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "CopySourceErrorCode", "text": False, "unwrapped": False}, + ) + """Copy source error code.""" + copy_source_error_message: Optional[str] = rest_field( + name="copySourceErrorMessage", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "CopySourceErrorMessage", "text": False, "unwrapped": False}, + ) + """Copy source error message.""" + + _xml = {"attribute": False, "name": "StorageError", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + code: Optional[str] = None, + message: Optional[str] = None, + copy_source_status_code: Optional[int] = None, + copy_source_error_code: Optional[str] = None, + copy_source_error_message: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class StorageServiceStats(_Model): + """Stats for the storage service. + + :ivar geo_replication: The geo replication stats. + :vartype geo_replication: ~azure.storage.blobs.models.GeoReplication + """ + + geo_replication: Optional["_models.GeoReplication"] = rest_field( + name="geoReplication", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "GeoReplication", "text": False, "unwrapped": False}, + ) + """The geo replication stats.""" + + _xml = {"attribute": False, "name": "StorageServiceStats", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + geo_replication: Optional["_models.GeoReplication"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class SubmitBatchRequest(_Model): + """SubmitBatchRequest. + + :ivar name: Required. + :vartype name: str + :ivar body: Required. + :vartype body: ~azure.storage.blobs._utils.utils.FileType + """ + + name: str = rest_field(visibility=["read", "create", "update", "delete", "query"]) + """Required.""" + body: FileType = rest_field( + visibility=["read", "create", "update", "delete", "query"], is_multipart_file_input=True + ) + """Required.""" + + @overload + def __init__( + self, + *, + name: str, + body: FileType, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class UserDelegationKey(_Model): + """A user delegation key. + + :ivar signed_oid: The Azure Active Directory object ID in GUID format. Required. + :vartype signed_oid: str + :ivar signed_tid: The Azure Active Directory tenant ID in GUID format. Required. + :vartype signed_tid: str + :ivar signed_start: The date-time the key is active. Required. + :vartype signed_start: str + :ivar signed_expiry: The date-time the key expires. Required. + :vartype signed_expiry: str + :ivar signed_service: Abbreviation of the Azure Storage service that accepts the key. Required. + :vartype signed_service: str + :ivar signed_version: The service version that created the key. Required. + :vartype signed_version: str + :ivar signed_delegated_user_tid: The delegated user tenant id in Azure AD. Return if + DelegatedUserTid is specified. + :vartype signed_delegated_user_tid: str + :ivar value: The key as a base64 string. Required. + :vartype value: bytes + """ + + signed_oid: str = rest_field( + name="signedOid", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "SignedOid", "text": False, "unwrapped": False}, + ) + """The Azure Active Directory object ID in GUID format. Required.""" + signed_tid: str = rest_field( + name="signedTid", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "SignedTid", "text": False, "unwrapped": False}, + ) + """The Azure Active Directory tenant ID in GUID format. Required.""" + signed_start: str = rest_field( + name="signedStart", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "SignedStart", "text": False, "unwrapped": False}, + ) + """The date-time the key is active. Required.""" + signed_expiry: str = rest_field( + name="signedExpiry", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "SignedExpiry", "text": False, "unwrapped": False}, + ) + """The date-time the key expires. Required.""" + signed_service: str = rest_field( + name="signedService", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "SignedService", "text": False, "unwrapped": False}, + ) + """Abbreviation of the Azure Storage service that accepts the key. Required.""" + signed_version: str = rest_field( + name="signedVersion", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "SignedVersion", "text": False, "unwrapped": False}, + ) + """The service version that created the key. Required.""" + signed_delegated_user_tid: Optional[str] = rest_field( + name="signedDelegatedUserTid", + visibility=["read", "create", "update", "delete", "query"], + xml={"attribute": False, "name": "SignedDelegatedUserTid", "text": False, "unwrapped": False}, + ) + """The delegated user tenant id in Azure AD. Return if DelegatedUserTid is specified.""" + value: bytes = rest_field( + visibility=["read", "create", "update", "delete", "query"], + format="base64", + xml={"attribute": False, "name": "Value", "text": False, "unwrapped": False}, + ) + """The key as a base64 string. Required.""" + + _xml = {"attribute": False, "name": "UserDelegationKey", "text": False, "unwrapped": False} + + @overload + def __init__( + self, + *, + signed_oid: str, + signed_tid: str, + signed_start: str, + signed_expiry: str, + signed_service: str, + signed_version: str, + value: bytes, + signed_delegated_user_tid: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/models/_patch.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/models/_patch.py new file mode 100644 index 000000000000..d8180563dfb1 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/models/_patch.py @@ -0,0 +1,190 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------- +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import Optional +from enum import Enum +from azure.core import CaseInsensitiveEnumMeta + + +class AppendPositionAccessConditions: + """Parameter group for append position access conditions.""" + + def __init__( + self, + *, + max_size: Optional[int] = None, + append_position: Optional[int] = None, + ): + self.max_size = max_size + self.append_position = append_position + + +class BlobHTTPHeaders: + """Parameter group for blob HTTP headers.""" + + def __init__( + self, + *, + blob_cache_control: Optional[str] = None, + blob_content_type: Optional[str] = None, + blob_content_md5: Optional[bytes] = None, + blob_content_encoding: Optional[str] = None, + blob_content_language: Optional[str] = None, + blob_content_disposition: Optional[str] = None, + ): + self.blob_cache_control = blob_cache_control + self.blob_content_type = blob_content_type + self.blob_content_md5 = blob_content_md5 + self.blob_content_encoding = blob_content_encoding + self.blob_content_language = blob_content_language + self.blob_content_disposition = blob_content_disposition + + +class BlobModifiedAccessConditions: + """Parameter group for blob modified access conditions.""" + + def __init__( + self, + *, + if_modified_since: Optional[str] = None, + if_unmodified_since: Optional[str] = None, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + ): + self.if_modified_since = if_modified_since + self.if_unmodified_since = if_unmodified_since + self.if_match = if_match + self.if_none_match = if_none_match + + +class ContainerCpkScopeInfo: + """Parameter group for container CPK scope info.""" + + def __init__( + self, + *, + default_encryption_scope: Optional[str] = None, + prevent_encryption_scope_override: Optional[bool] = None, + ): + self.default_encryption_scope = default_encryption_scope + self.prevent_encryption_scope_override = prevent_encryption_scope_override + + +class CpkInfo: + """Parameter group for CPK info.""" + + def __init__( + self, + *, + encryption_key: Optional[str] = None, + encryption_key_sha256: Optional[str] = None, + encryption_algorithm: Optional[str] = None, + ): + self.encryption_key = encryption_key + self.encryption_key_sha256 = encryption_key_sha256 + self.encryption_algorithm = encryption_algorithm + +class ModifiedAccessConditions: + """Parameter group for modified access conditions.""" + + def __init__( + self, + *, + if_modified_since: Optional[str] = None, + if_unmodified_since: Optional[str] = None, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + if_tags: Optional[str] = None, + ): + self.if_modified_since = if_modified_since + self.if_unmodified_since = if_unmodified_since + self.if_match = if_match + self.if_none_match = if_none_match + self.if_tags = if_tags + + +class QueryFormatType(Enum, metaclass=CaseInsensitiveEnumMeta): + """The query format type.""" + + DELIMITED = "delimited" + JSON = "json" + ARROW = "arrow" + PARQUET = "parquet" + + +class SequenceNumberAccessConditions: + """Parameter group for sequence number access conditions.""" + + def __init__( + self, + *, + if_sequence_number_less_than_or_equal_to: Optional[int] = None, + if_sequence_number_less_than: Optional[int] = None, + if_sequence_number_equal_to: Optional[int] = None, + ): + self.if_sequence_number_less_than_or_equal_to = if_sequence_number_less_than_or_equal_to + self.if_sequence_number_less_than = if_sequence_number_less_than + self.if_sequence_number_equal_to = if_sequence_number_equal_to + + +class SourceCpkInfo: + """Parameter group for source CPK info.""" + + def __init__( + self, + *, + source_encryption_key: Optional[str] = None, + source_encryption_key_sha256: Optional[str] = None, + source_encryption_algorithm: Optional[str] = None, + ): + self.source_encryption_key = source_encryption_key + self.source_encryption_key_sha256 = source_encryption_key_sha256 + self.source_encryption_algorithm = source_encryption_algorithm + + +class SourceModifiedAccessConditions: + """Parameter group for source modified access conditions.""" + + def __init__( + self, + *, + source_if_modified_since: Optional[str] = None, + source_if_unmodified_since: Optional[str] = None, + source_if_match: Optional[str] = None, + source_if_none_match: Optional[str] = None, + source_if_tags: Optional[str] = None, + ): + self.source_if_modified_since = source_if_modified_since + self.source_if_unmodified_since = source_if_unmodified_since + self.source_if_match = source_if_match + self.source_if_none_match = source_if_none_match + self.source_if_tags = source_if_tags + + +__all__: list[str] = [ + "AppendPositionAccessConditions", + "BlobHTTPHeaders", + "BlobModifiedAccessConditions", + "ContainerCpkScopeInfo", + "CpkInfo", + "ModifiedAccessConditions", + "QueryFormatType", + "SequenceNumberAccessConditions", + "SourceCpkInfo", + "SourceModifiedAccessConditions", +] + + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/py.typed b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/py.typed similarity index 100% rename from sdk/storage/azure-storage-blob/azure/storage/blob/_generated/py.typed rename to sdk/storage/azure-storage-blob/azure/storage/blob/_generated/azure/storage/blobs/py.typed diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/dev_requirements.txt b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/dev_requirements.txt new file mode 100644 index 000000000000..ad0907b03b93 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/dev_requirements.txt @@ -0,0 +1,4 @@ +-e ../../../eng/tools/azure-sdk-tools +../../core/azure-core +../../identity/azure-identity +aiohttp \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_models_py3.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_models_py3.py deleted file mode 100644 index e3cb9c5b99eb..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_models_py3.py +++ /dev/null @@ -1,2906 +0,0 @@ -# pylint: disable=too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from collections.abc import MutableMapping -import datetime -from typing import Any, Optional, TYPE_CHECKING, Union - -from .._utils import serialization as _serialization - -if TYPE_CHECKING: - from .. import models as _models -JSON = MutableMapping[str, Any] - - -class AccessPolicy(_serialization.Model): - """An Access policy. - - :ivar start: the date-time the policy is active. - :vartype start: str - :ivar expiry: the date-time the policy expires. - :vartype expiry: str - :ivar permission: the permissions for the acl policy. - :vartype permission: str - """ - - _attribute_map = { - "start": {"key": "Start", "type": "str"}, - "expiry": {"key": "Expiry", "type": "str"}, - "permission": {"key": "Permission", "type": "str"}, - } - - def __init__( - self, - *, - start: Optional[str] = None, - expiry: Optional[str] = None, - permission: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword start: the date-time the policy is active. - :paramtype start: str - :keyword expiry: the date-time the policy expires. - :paramtype expiry: str - :keyword permission: the permissions for the acl policy. - :paramtype permission: str - """ - super().__init__(**kwargs) - self.start = start - self.expiry = expiry - self.permission = permission - - -class AppendPositionAccessConditions(_serialization.Model): - """Parameter group. - - :ivar max_size: Optional conditional header. The max length in bytes permitted for the append - blob. If the Append Block operation would cause the blob to exceed that limit or if the blob - size is already greater than the value specified in this header, the request will fail with - MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed). - :vartype max_size: int - :ivar append_position: Optional conditional header, used only for the Append Block operation. A - number indicating the byte offset to compare. Append Block will succeed only if the append - position is equal to this number. If it is not, the request will fail with the - AppendPositionConditionNotMet error (HTTP status code 412 - Precondition Failed). - :vartype append_position: int - """ - - _attribute_map = { - "max_size": {"key": "maxSize", "type": "int"}, - "append_position": {"key": "appendPosition", "type": "int"}, - } - - def __init__(self, *, max_size: Optional[int] = None, append_position: Optional[int] = None, **kwargs: Any) -> None: - """ - :keyword max_size: Optional conditional header. The max length in bytes permitted for the - append blob. If the Append Block operation would cause the blob to exceed that limit or if the - blob size is already greater than the value specified in this header, the request will fail - with MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed). - :paramtype max_size: int - :keyword append_position: Optional conditional header, used only for the Append Block - operation. A number indicating the byte offset to compare. Append Block will succeed only if - the append position is equal to this number. If it is not, the request will fail with the - AppendPositionConditionNotMet error (HTTP status code 412 - Precondition Failed). - :paramtype append_position: int - """ - super().__init__(**kwargs) - self.max_size = max_size - self.append_position = append_position - - -class ArrowConfiguration(_serialization.Model): - """Groups the settings used for formatting the response if the response should be Arrow formatted. - - All required parameters must be populated in order to send to server. - - :ivar schema: Required. - :vartype schema: list[~azure.storage.blob.models.ArrowField] - """ - - _validation = { - "schema": {"required": True}, - } - - _attribute_map = { - "schema": { - "key": "Schema", - "type": "[ArrowField]", - "xml": {"name": "Schema", "wrapped": True, "itemsName": "Field"}, - }, - } - _xml_map = {"name": "ArrowConfiguration"} - - def __init__(self, *, schema: list["_models.ArrowField"], **kwargs: Any) -> None: - """ - :keyword schema: Required. - :paramtype schema: list[~azure.storage.blob.models.ArrowField] - """ - super().__init__(**kwargs) - self.schema = schema - - -class ArrowField(_serialization.Model): - """Groups settings regarding specific field of an arrow schema. - - All required parameters must be populated in order to send to server. - - :ivar type: Required. - :vartype type: str - :ivar name: - :vartype name: str - :ivar precision: - :vartype precision: int - :ivar scale: - :vartype scale: int - """ - - _validation = { - "type": {"required": True}, - } - - _attribute_map = { - "type": {"key": "Type", "type": "str"}, - "name": {"key": "Name", "type": "str"}, - "precision": {"key": "Precision", "type": "int"}, - "scale": {"key": "Scale", "type": "int"}, - } - _xml_map = {"name": "Field"} - - def __init__( - self, - *, - type: str, - name: Optional[str] = None, - precision: Optional[int] = None, - scale: Optional[int] = None, - **kwargs: Any - ) -> None: - """ - :keyword type: Required. - :paramtype type: str - :keyword name: - :paramtype name: str - :keyword precision: - :paramtype precision: int - :keyword scale: - :paramtype scale: int - """ - super().__init__(**kwargs) - self.type = type - self.name = name - self.precision = precision - self.scale = scale - - -class BlobFlatListSegment(_serialization.Model): - """BlobFlatListSegment. - - All required parameters must be populated in order to send to server. - - :ivar blob_items: Required. - :vartype blob_items: list[~azure.storage.blob.models.BlobItemInternal] - """ - - _validation = { - "blob_items": {"required": True}, - } - - _attribute_map = { - "blob_items": {"key": "BlobItems", "type": "[BlobItemInternal]", "xml": {"itemsName": "Blob"}}, - } - _xml_map = {"name": "Blobs"} - - def __init__(self, *, blob_items: list["_models.BlobItemInternal"], **kwargs: Any) -> None: - """ - :keyword blob_items: Required. - :paramtype blob_items: list[~azure.storage.blob.models.BlobItemInternal] - """ - super().__init__(**kwargs) - self.blob_items = blob_items - - -class BlobHierarchyListSegment(_serialization.Model): - """BlobHierarchyListSegment. - - All required parameters must be populated in order to send to server. - - :ivar blob_prefixes: - :vartype blob_prefixes: list[~azure.storage.blob.models.BlobPrefix] - :ivar blob_items: Required. - :vartype blob_items: list[~azure.storage.blob.models.BlobItemInternal] - """ - - _validation = { - "blob_items": {"required": True}, - } - - _attribute_map = { - "blob_prefixes": {"key": "BlobPrefixes", "type": "[BlobPrefix]", "xml": {"name": "BlobPrefix"}}, - "blob_items": {"key": "BlobItems", "type": "[BlobItemInternal]", "xml": {"name": "Blob", "itemsName": "Blob"}}, - } - _xml_map = {"name": "Blobs"} - - def __init__( - self, - *, - blob_items: list["_models.BlobItemInternal"], - blob_prefixes: Optional[list["_models.BlobPrefix"]] = None, - **kwargs: Any - ) -> None: - """ - :keyword blob_prefixes: - :paramtype blob_prefixes: list[~azure.storage.blob.models.BlobPrefix] - :keyword blob_items: Required. - :paramtype blob_items: list[~azure.storage.blob.models.BlobItemInternal] - """ - super().__init__(**kwargs) - self.blob_prefixes = blob_prefixes - self.blob_items = blob_items - - -class BlobHTTPHeaders(_serialization.Model): - """Parameter group. - - :ivar blob_cache_control: Optional. Sets the blob's cache control. If specified, this property - is stored with the blob and returned with a read request. - :vartype blob_cache_control: str - :ivar blob_content_type: Optional. Sets the blob's content type. If specified, this property is - stored with the blob and returned with a read request. - :vartype blob_content_type: str - :ivar blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is not - validated, as the hashes for the individual blocks were validated when each was uploaded. - :vartype blob_content_md5: bytes - :ivar blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this - property is stored with the blob and returned with a read request. - :vartype blob_content_encoding: str - :ivar blob_content_language: Optional. Set the blob's content language. If specified, this - property is stored with the blob and returned with a read request. - :vartype blob_content_language: str - :ivar blob_content_disposition: Optional. Sets the blob's Content-Disposition header. - :vartype blob_content_disposition: str - """ - - _attribute_map = { - "blob_cache_control": {"key": "blobCacheControl", "type": "str"}, - "blob_content_type": {"key": "blobContentType", "type": "str"}, - "blob_content_md5": {"key": "blobContentMD5", "type": "bytearray"}, - "blob_content_encoding": {"key": "blobContentEncoding", "type": "str"}, - "blob_content_language": {"key": "blobContentLanguage", "type": "str"}, - "blob_content_disposition": {"key": "blobContentDisposition", "type": "str"}, - } - - def __init__( - self, - *, - blob_cache_control: Optional[str] = None, - blob_content_type: Optional[str] = None, - blob_content_md5: Optional[bytes] = None, - blob_content_encoding: Optional[str] = None, - blob_content_language: Optional[str] = None, - blob_content_disposition: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword blob_cache_control: Optional. Sets the blob's cache control. If specified, this - property is stored with the blob and returned with a read request. - :paramtype blob_cache_control: str - :keyword blob_content_type: Optional. Sets the blob's content type. If specified, this property - is stored with the blob and returned with a read request. - :paramtype blob_content_type: str - :keyword blob_content_md5: Optional. An MD5 hash of the blob content. Note that this hash is - not validated, as the hashes for the individual blocks were validated when each was uploaded. - :paramtype blob_content_md5: bytes - :keyword blob_content_encoding: Optional. Sets the blob's content encoding. If specified, this - property is stored with the blob and returned with a read request. - :paramtype blob_content_encoding: str - :keyword blob_content_language: Optional. Set the blob's content language. If specified, this - property is stored with the blob and returned with a read request. - :paramtype blob_content_language: str - :keyword blob_content_disposition: Optional. Sets the blob's Content-Disposition header. - :paramtype blob_content_disposition: str - """ - super().__init__(**kwargs) - self.blob_cache_control = blob_cache_control - self.blob_content_type = blob_content_type - self.blob_content_md5 = blob_content_md5 - self.blob_content_encoding = blob_content_encoding - self.blob_content_language = blob_content_language - self.blob_content_disposition = blob_content_disposition - - -class BlobItemInternal(_serialization.Model): - """An Azure Storage blob. - - All required parameters must be populated in order to send to server. - - :ivar name: Required. - :vartype name: ~azure.storage.blob.models.BlobName - :ivar deleted: Required. - :vartype deleted: bool - :ivar snapshot: Required. - :vartype snapshot: str - :ivar version_id: - :vartype version_id: str - :ivar is_current_version: - :vartype is_current_version: bool - :ivar properties: Properties of a blob. Required. - :vartype properties: ~azure.storage.blob.models.BlobPropertiesInternal - :ivar metadata: - :vartype metadata: ~azure.storage.blob.models.BlobMetadata - :ivar blob_tags: Blob tags. - :vartype blob_tags: ~azure.storage.blob.models.BlobTags - :ivar has_versions_only: - :vartype has_versions_only: bool - :ivar object_replication_metadata: Dictionary of :code:``. - :vartype object_replication_metadata: dict[str, str] - """ - - _validation = { - "name": {"required": True}, - "deleted": {"required": True}, - "snapshot": {"required": True}, - "properties": {"required": True}, - } - - _attribute_map = { - "name": {"key": "Name", "type": "BlobName"}, - "deleted": {"key": "Deleted", "type": "bool"}, - "snapshot": {"key": "Snapshot", "type": "str"}, - "version_id": {"key": "VersionId", "type": "str"}, - "is_current_version": {"key": "IsCurrentVersion", "type": "bool"}, - "properties": {"key": "Properties", "type": "BlobPropertiesInternal"}, - "metadata": {"key": "Metadata", "type": "BlobMetadata"}, - "blob_tags": {"key": "BlobTags", "type": "BlobTags"}, - "has_versions_only": {"key": "HasVersionsOnly", "type": "bool"}, - "object_replication_metadata": {"key": "OrMetadata", "type": "{str}"}, - } - _xml_map = {"name": "Blob"} - - def __init__( - self, - *, - name: "_models.BlobName", - deleted: bool, - snapshot: str, - properties: "_models.BlobPropertiesInternal", - version_id: Optional[str] = None, - is_current_version: Optional[bool] = None, - metadata: Optional["_models.BlobMetadata"] = None, - blob_tags: Optional["_models.BlobTags"] = None, - has_versions_only: Optional[bool] = None, - object_replication_metadata: Optional[dict[str, str]] = None, - **kwargs: Any - ) -> None: - """ - :keyword name: Required. - :paramtype name: ~azure.storage.blob.models.BlobName - :keyword deleted: Required. - :paramtype deleted: bool - :keyword snapshot: Required. - :paramtype snapshot: str - :keyword version_id: - :paramtype version_id: str - :keyword is_current_version: - :paramtype is_current_version: bool - :keyword properties: Properties of a blob. Required. - :paramtype properties: ~azure.storage.blob.models.BlobPropertiesInternal - :keyword metadata: - :paramtype metadata: ~azure.storage.blob.models.BlobMetadata - :keyword blob_tags: Blob tags. - :paramtype blob_tags: ~azure.storage.blob.models.BlobTags - :keyword has_versions_only: - :paramtype has_versions_only: bool - :keyword object_replication_metadata: Dictionary of :code:``. - :paramtype object_replication_metadata: dict[str, str] - """ - super().__init__(**kwargs) - self.name = name - self.deleted = deleted - self.snapshot = snapshot - self.version_id = version_id - self.is_current_version = is_current_version - self.properties = properties - self.metadata = metadata - self.blob_tags = blob_tags - self.has_versions_only = has_versions_only - self.object_replication_metadata = object_replication_metadata - - -class BlobMetadata(_serialization.Model): - """BlobMetadata. - - :ivar additional_properties: Unmatched properties from the message are deserialized to this - collection. - :vartype additional_properties: dict[str, str] - :ivar encrypted: - :vartype encrypted: str - """ - - _attribute_map = { - "additional_properties": {"key": "", "type": "{str}"}, - "encrypted": {"key": "Encrypted", "type": "str", "xml": {"attr": True}}, - } - _xml_map = {"name": "Metadata"} - - def __init__( - self, *, additional_properties: Optional[dict[str, str]] = None, encrypted: Optional[str] = None, **kwargs: Any - ) -> None: - """ - :keyword additional_properties: Unmatched properties from the message are deserialized to this - collection. - :paramtype additional_properties: dict[str, str] - :keyword encrypted: - :paramtype encrypted: str - """ - super().__init__(**kwargs) - self.additional_properties = additional_properties - self.encrypted = encrypted - - -class BlobModifiedAccessConditions(_serialization.Model): - """Parameter group. - - :ivar if_modified_since: Specify this header value to operate only on a blob if it has been - modified since the specified date/time. - :vartype if_modified_since: ~datetime.datetime - :ivar if_unmodified_since: Specify this header value to operate only on a blob if it has not - been modified since the specified date/time. - :vartype if_unmodified_since: ~datetime.datetime - :ivar if_match: Specify an ETag value to operate only on blobs with a matching value. - :vartype if_match: str - :ivar if_none_match: Specify an ETag value to operate only on blobs without a matching value. - :vartype if_none_match: str - """ - - _attribute_map = { - "if_modified_since": {"key": "ifModifiedSince", "type": "rfc-1123"}, - "if_unmodified_since": {"key": "ifUnmodifiedSince", "type": "rfc-1123"}, - "if_match": {"key": "ifMatch", "type": "str"}, - "if_none_match": {"key": "ifNoneMatch", "type": "str"}, - } - - def __init__( - self, - *, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword if_modified_since: Specify this header value to operate only on a blob if it has been - modified since the specified date/time. - :paramtype if_modified_since: ~datetime.datetime - :keyword if_unmodified_since: Specify this header value to operate only on a blob if it has not - been modified since the specified date/time. - :paramtype if_unmodified_since: ~datetime.datetime - :keyword if_match: Specify an ETag value to operate only on blobs with a matching value. - :paramtype if_match: str - :keyword if_none_match: Specify an ETag value to operate only on blobs without a matching - value. - :paramtype if_none_match: str - """ - super().__init__(**kwargs) - self.if_modified_since = if_modified_since - self.if_unmodified_since = if_unmodified_since - self.if_match = if_match - self.if_none_match = if_none_match - - -class BlobName(_serialization.Model): - """BlobName. - - :ivar encoded: Indicates if the blob name is encoded. - :vartype encoded: bool - :ivar content: The name of the blob. - :vartype content: str - """ - - _attribute_map = { - "encoded": {"key": "Encoded", "type": "bool", "xml": {"name": "Encoded", "attr": True}}, - "content": {"key": "content", "type": "str", "xml": {"text": True}}, - } - - def __init__(self, *, encoded: Optional[bool] = None, content: Optional[str] = None, **kwargs: Any) -> None: - """ - :keyword encoded: Indicates if the blob name is encoded. - :paramtype encoded: bool - :keyword content: The name of the blob. - :paramtype content: str - """ - super().__init__(**kwargs) - self.encoded = encoded - self.content = content - - -class BlobPrefix(_serialization.Model): - """BlobPrefix. - - All required parameters must be populated in order to send to server. - - :ivar name: Required. - :vartype name: ~azure.storage.blob.models.BlobName - """ - - _validation = { - "name": {"required": True}, - } - - _attribute_map = { - "name": {"key": "Name", "type": "BlobName"}, - } - - def __init__(self, *, name: "_models.BlobName", **kwargs: Any) -> None: - """ - :keyword name: Required. - :paramtype name: ~azure.storage.blob.models.BlobName - """ - super().__init__(**kwargs) - self.name = name - - -class BlobPropertiesInternal(_serialization.Model): - """Properties of a blob. - - All required parameters must be populated in order to send to server. - - :ivar creation_time: - :vartype creation_time: ~datetime.datetime - :ivar last_modified: Required. - :vartype last_modified: ~datetime.datetime - :ivar etag: Required. - :vartype etag: str - :ivar content_length: Size in bytes. - :vartype content_length: int - :ivar content_type: - :vartype content_type: str - :ivar content_encoding: - :vartype content_encoding: str - :ivar content_language: - :vartype content_language: str - :ivar content_md5: - :vartype content_md5: bytes - :ivar content_disposition: - :vartype content_disposition: str - :ivar cache_control: - :vartype cache_control: str - :ivar blob_sequence_number: - :vartype blob_sequence_number: int - :ivar blob_type: Known values are: "BlockBlob", "PageBlob", and "AppendBlob". - :vartype blob_type: str or ~azure.storage.blob.models.BlobType - :ivar lease_status: Known values are: "locked" and "unlocked". - :vartype lease_status: str or ~azure.storage.blob.models.LeaseStatusType - :ivar lease_state: Known values are: "available", "leased", "expired", "breaking", and - "broken". - :vartype lease_state: str or ~azure.storage.blob.models.LeaseStateType - :ivar lease_duration: Known values are: "infinite" and "fixed". - :vartype lease_duration: str or ~azure.storage.blob.models.LeaseDurationType - :ivar copy_id: - :vartype copy_id: str - :ivar copy_status: Known values are: "pending", "success", "aborted", and "failed". - :vartype copy_status: str or ~azure.storage.blob.models.CopyStatusType - :ivar copy_source: - :vartype copy_source: str - :ivar copy_progress: - :vartype copy_progress: str - :ivar copy_completion_time: - :vartype copy_completion_time: ~datetime.datetime - :ivar copy_status_description: - :vartype copy_status_description: str - :ivar server_encrypted: - :vartype server_encrypted: bool - :ivar incremental_copy: - :vartype incremental_copy: bool - :ivar destination_snapshot: - :vartype destination_snapshot: str - :ivar deleted_time: - :vartype deleted_time: ~datetime.datetime - :ivar remaining_retention_days: - :vartype remaining_retention_days: int - :ivar access_tier: Known values are: "P4", "P6", "P10", "P15", "P20", "P30", "P40", "P50", - "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", and "Cold". - :vartype access_tier: str or ~azure.storage.blob.models.AccessTier - :ivar access_tier_inferred: - :vartype access_tier_inferred: bool - :ivar archive_status: Known values are: "rehydrate-pending-to-hot", - "rehydrate-pending-to-cool", and "rehydrate-pending-to-cold". - :vartype archive_status: str or ~azure.storage.blob.models.ArchiveStatus - :ivar customer_provided_key_sha256: - :vartype customer_provided_key_sha256: str - :ivar encryption_scope: The name of the encryption scope under which the blob is encrypted. - :vartype encryption_scope: str - :ivar access_tier_change_time: - :vartype access_tier_change_time: ~datetime.datetime - :ivar tag_count: - :vartype tag_count: int - :ivar expires_on: - :vartype expires_on: ~datetime.datetime - :ivar is_sealed: - :vartype is_sealed: bool - :ivar rehydrate_priority: If an object is in rehydrate pending state then this header is - returned with priority of rehydrate. Valid values are High and Standard. Known values are: - "High" and "Standard". - :vartype rehydrate_priority: str or ~azure.storage.blob.models.RehydratePriority - :ivar last_accessed_on: - :vartype last_accessed_on: ~datetime.datetime - :ivar immutability_policy_expires_on: - :vartype immutability_policy_expires_on: ~datetime.datetime - :ivar immutability_policy_mode: Known values are: "Mutable", "Unlocked", and "Locked". - :vartype immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :ivar legal_hold: - :vartype legal_hold: bool - """ - - _validation = { - "last_modified": {"required": True}, - "etag": {"required": True}, - } - - _attribute_map = { - "creation_time": {"key": "Creation-Time", "type": "rfc-1123"}, - "last_modified": {"key": "Last-Modified", "type": "rfc-1123"}, - "etag": {"key": "Etag", "type": "str"}, - "content_length": {"key": "Content-Length", "type": "int"}, - "content_type": {"key": "Content-Type", "type": "str"}, - "content_encoding": {"key": "Content-Encoding", "type": "str"}, - "content_language": {"key": "Content-Language", "type": "str"}, - "content_md5": {"key": "Content-MD5", "type": "bytearray"}, - "content_disposition": {"key": "Content-Disposition", "type": "str"}, - "cache_control": {"key": "Cache-Control", "type": "str"}, - "blob_sequence_number": {"key": "x-ms-blob-sequence-number", "type": "int"}, - "blob_type": {"key": "BlobType", "type": "str"}, - "lease_status": {"key": "LeaseStatus", "type": "str"}, - "lease_state": {"key": "LeaseState", "type": "str"}, - "lease_duration": {"key": "LeaseDuration", "type": "str"}, - "copy_id": {"key": "CopyId", "type": "str"}, - "copy_status": {"key": "CopyStatus", "type": "str"}, - "copy_source": {"key": "CopySource", "type": "str"}, - "copy_progress": {"key": "CopyProgress", "type": "str"}, - "copy_completion_time": {"key": "CopyCompletionTime", "type": "rfc-1123"}, - "copy_status_description": {"key": "CopyStatusDescription", "type": "str"}, - "server_encrypted": {"key": "ServerEncrypted", "type": "bool"}, - "incremental_copy": {"key": "IncrementalCopy", "type": "bool"}, - "destination_snapshot": {"key": "DestinationSnapshot", "type": "str"}, - "deleted_time": {"key": "DeletedTime", "type": "rfc-1123"}, - "remaining_retention_days": {"key": "RemainingRetentionDays", "type": "int"}, - "access_tier": {"key": "AccessTier", "type": "str"}, - "access_tier_inferred": {"key": "AccessTierInferred", "type": "bool"}, - "archive_status": {"key": "ArchiveStatus", "type": "str"}, - "customer_provided_key_sha256": {"key": "CustomerProvidedKeySha256", "type": "str"}, - "encryption_scope": {"key": "EncryptionScope", "type": "str"}, - "access_tier_change_time": {"key": "AccessTierChangeTime", "type": "rfc-1123"}, - "tag_count": {"key": "TagCount", "type": "int"}, - "expires_on": {"key": "Expiry-Time", "type": "rfc-1123"}, - "is_sealed": {"key": "Sealed", "type": "bool"}, - "rehydrate_priority": {"key": "RehydratePriority", "type": "str"}, - "last_accessed_on": {"key": "LastAccessTime", "type": "rfc-1123"}, - "immutability_policy_expires_on": {"key": "ImmutabilityPolicyUntilDate", "type": "rfc-1123"}, - "immutability_policy_mode": {"key": "ImmutabilityPolicyMode", "type": "str"}, - "legal_hold": {"key": "LegalHold", "type": "bool"}, - } - _xml_map = {"name": "Properties"} - - def __init__( # pylint: disable=too-many-locals - self, - *, - last_modified: datetime.datetime, - etag: str, - creation_time: Optional[datetime.datetime] = None, - content_length: Optional[int] = None, - content_type: Optional[str] = None, - content_encoding: Optional[str] = None, - content_language: Optional[str] = None, - content_md5: Optional[bytes] = None, - content_disposition: Optional[str] = None, - cache_control: Optional[str] = None, - blob_sequence_number: Optional[int] = None, - blob_type: Optional[Union[str, "_models.BlobType"]] = None, - lease_status: Optional[Union[str, "_models.LeaseStatusType"]] = None, - lease_state: Optional[Union[str, "_models.LeaseStateType"]] = None, - lease_duration: Optional[Union[str, "_models.LeaseDurationType"]] = None, - copy_id: Optional[str] = None, - copy_status: Optional[Union[str, "_models.CopyStatusType"]] = None, - copy_source: Optional[str] = None, - copy_progress: Optional[str] = None, - copy_completion_time: Optional[datetime.datetime] = None, - copy_status_description: Optional[str] = None, - server_encrypted: Optional[bool] = None, - incremental_copy: Optional[bool] = None, - destination_snapshot: Optional[str] = None, - deleted_time: Optional[datetime.datetime] = None, - remaining_retention_days: Optional[int] = None, - access_tier: Optional[Union[str, "_models.AccessTier"]] = None, - access_tier_inferred: Optional[bool] = None, - archive_status: Optional[Union[str, "_models.ArchiveStatus"]] = None, - customer_provided_key_sha256: Optional[str] = None, - encryption_scope: Optional[str] = None, - access_tier_change_time: Optional[datetime.datetime] = None, - tag_count: Optional[int] = None, - expires_on: Optional[datetime.datetime] = None, - is_sealed: Optional[bool] = None, - rehydrate_priority: Optional[Union[str, "_models.RehydratePriority"]] = None, - last_accessed_on: Optional[datetime.datetime] = None, - immutability_policy_expires_on: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, "_models.BlobImmutabilityPolicyMode"]] = None, - legal_hold: Optional[bool] = None, - **kwargs: Any - ) -> None: - """ - :keyword creation_time: - :paramtype creation_time: ~datetime.datetime - :keyword last_modified: Required. - :paramtype last_modified: ~datetime.datetime - :keyword etag: Required. - :paramtype etag: str - :keyword content_length: Size in bytes. - :paramtype content_length: int - :keyword content_type: - :paramtype content_type: str - :keyword content_encoding: - :paramtype content_encoding: str - :keyword content_language: - :paramtype content_language: str - :keyword content_md5: - :paramtype content_md5: bytes - :keyword content_disposition: - :paramtype content_disposition: str - :keyword cache_control: - :paramtype cache_control: str - :keyword blob_sequence_number: - :paramtype blob_sequence_number: int - :keyword blob_type: Known values are: "BlockBlob", "PageBlob", and "AppendBlob". - :paramtype blob_type: str or ~azure.storage.blob.models.BlobType - :keyword lease_status: Known values are: "locked" and "unlocked". - :paramtype lease_status: str or ~azure.storage.blob.models.LeaseStatusType - :keyword lease_state: Known values are: "available", "leased", "expired", "breaking", and - "broken". - :paramtype lease_state: str or ~azure.storage.blob.models.LeaseStateType - :keyword lease_duration: Known values are: "infinite" and "fixed". - :paramtype lease_duration: str or ~azure.storage.blob.models.LeaseDurationType - :keyword copy_id: - :paramtype copy_id: str - :keyword copy_status: Known values are: "pending", "success", "aborted", and "failed". - :paramtype copy_status: str or ~azure.storage.blob.models.CopyStatusType - :keyword copy_source: - :paramtype copy_source: str - :keyword copy_progress: - :paramtype copy_progress: str - :keyword copy_completion_time: - :paramtype copy_completion_time: ~datetime.datetime - :keyword copy_status_description: - :paramtype copy_status_description: str - :keyword server_encrypted: - :paramtype server_encrypted: bool - :keyword incremental_copy: - :paramtype incremental_copy: bool - :keyword destination_snapshot: - :paramtype destination_snapshot: str - :keyword deleted_time: - :paramtype deleted_time: ~datetime.datetime - :keyword remaining_retention_days: - :paramtype remaining_retention_days: int - :keyword access_tier: Known values are: "P4", "P6", "P10", "P15", "P20", "P30", "P40", "P50", - "P60", "P70", "P80", "Hot", "Cool", "Archive", "Premium", and "Cold". - :paramtype access_tier: str or ~azure.storage.blob.models.AccessTier - :keyword access_tier_inferred: - :paramtype access_tier_inferred: bool - :keyword archive_status: Known values are: "rehydrate-pending-to-hot", - "rehydrate-pending-to-cool", and "rehydrate-pending-to-cold". - :paramtype archive_status: str or ~azure.storage.blob.models.ArchiveStatus - :keyword customer_provided_key_sha256: - :paramtype customer_provided_key_sha256: str - :keyword encryption_scope: The name of the encryption scope under which the blob is encrypted. - :paramtype encryption_scope: str - :keyword access_tier_change_time: - :paramtype access_tier_change_time: ~datetime.datetime - :keyword tag_count: - :paramtype tag_count: int - :keyword expires_on: - :paramtype expires_on: ~datetime.datetime - :keyword is_sealed: - :paramtype is_sealed: bool - :keyword rehydrate_priority: If an object is in rehydrate pending state then this header is - returned with priority of rehydrate. Valid values are High and Standard. Known values are: - "High" and "Standard". - :paramtype rehydrate_priority: str or ~azure.storage.blob.models.RehydratePriority - :keyword last_accessed_on: - :paramtype last_accessed_on: ~datetime.datetime - :keyword immutability_policy_expires_on: - :paramtype immutability_policy_expires_on: ~datetime.datetime - :keyword immutability_policy_mode: Known values are: "Mutable", "Unlocked", and "Locked". - :paramtype immutability_policy_mode: str or - ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :keyword legal_hold: - :paramtype legal_hold: bool - """ - super().__init__(**kwargs) - self.creation_time = creation_time - self.last_modified = last_modified - self.etag = etag - self.content_length = content_length - self.content_type = content_type - self.content_encoding = content_encoding - self.content_language = content_language - self.content_md5 = content_md5 - self.content_disposition = content_disposition - self.cache_control = cache_control - self.blob_sequence_number = blob_sequence_number - self.blob_type = blob_type - self.lease_status = lease_status - self.lease_state = lease_state - self.lease_duration = lease_duration - self.copy_id = copy_id - self.copy_status = copy_status - self.copy_source = copy_source - self.copy_progress = copy_progress - self.copy_completion_time = copy_completion_time - self.copy_status_description = copy_status_description - self.server_encrypted = server_encrypted - self.incremental_copy = incremental_copy - self.destination_snapshot = destination_snapshot - self.deleted_time = deleted_time - self.remaining_retention_days = remaining_retention_days - self.access_tier = access_tier - self.access_tier_inferred = access_tier_inferred - self.archive_status = archive_status - self.customer_provided_key_sha256 = customer_provided_key_sha256 - self.encryption_scope = encryption_scope - self.access_tier_change_time = access_tier_change_time - self.tag_count = tag_count - self.expires_on = expires_on - self.is_sealed = is_sealed - self.rehydrate_priority = rehydrate_priority - self.last_accessed_on = last_accessed_on - self.immutability_policy_expires_on = immutability_policy_expires_on - self.immutability_policy_mode = immutability_policy_mode - self.legal_hold = legal_hold - - -class BlobTag(_serialization.Model): - """BlobTag. - - All required parameters must be populated in order to send to server. - - :ivar key: Required. - :vartype key: str - :ivar value: Required. - :vartype value: str - """ - - _validation = { - "key": {"required": True}, - "value": {"required": True}, - } - - _attribute_map = { - "key": {"key": "Key", "type": "str"}, - "value": {"key": "Value", "type": "str"}, - } - _xml_map = {"name": "Tag"} - - def __init__(self, *, key: str, value: str, **kwargs: Any) -> None: - """ - :keyword key: Required. - :paramtype key: str - :keyword value: Required. - :paramtype value: str - """ - super().__init__(**kwargs) - self.key = key - self.value = value - - -class BlobTags(_serialization.Model): - """Blob tags. - - All required parameters must be populated in order to send to server. - - :ivar blob_tag_set: Required. - :vartype blob_tag_set: list[~azure.storage.blob.models.BlobTag] - """ - - _validation = { - "blob_tag_set": {"required": True}, - } - - _attribute_map = { - "blob_tag_set": { - "key": "BlobTagSet", - "type": "[BlobTag]", - "xml": {"name": "TagSet", "wrapped": True, "itemsName": "Tag"}, - }, - } - _xml_map = {"name": "Tags"} - - def __init__(self, *, blob_tag_set: list["_models.BlobTag"], **kwargs: Any) -> None: - """ - :keyword blob_tag_set: Required. - :paramtype blob_tag_set: list[~azure.storage.blob.models.BlobTag] - """ - super().__init__(**kwargs) - self.blob_tag_set = blob_tag_set - - -class Block(_serialization.Model): - """Represents a single block in a block blob. It describes the block's ID and size. - - All required parameters must be populated in order to send to server. - - :ivar name: The base64 encoded block ID. Required. - :vartype name: str - :ivar size: The block size in bytes. Required. - :vartype size: int - """ - - _validation = { - "name": {"required": True}, - "size": {"required": True}, - } - - _attribute_map = { - "name": {"key": "Name", "type": "str"}, - "size": {"key": "Size", "type": "int"}, - } - - def __init__(self, *, name: str, size: int, **kwargs: Any) -> None: - """ - :keyword name: The base64 encoded block ID. Required. - :paramtype name: str - :keyword size: The block size in bytes. Required. - :paramtype size: int - """ - super().__init__(**kwargs) - self.name = name - self.size = size - - -class BlockList(_serialization.Model): - """BlockList. - - :ivar committed_blocks: - :vartype committed_blocks: list[~azure.storage.blob.models.Block] - :ivar uncommitted_blocks: - :vartype uncommitted_blocks: list[~azure.storage.blob.models.Block] - """ - - _attribute_map = { - "committed_blocks": {"key": "CommittedBlocks", "type": "[Block]", "xml": {"wrapped": True}}, - "uncommitted_blocks": {"key": "UncommittedBlocks", "type": "[Block]", "xml": {"wrapped": True}}, - } - - def __init__( - self, - *, - committed_blocks: Optional[list["_models.Block"]] = None, - uncommitted_blocks: Optional[list["_models.Block"]] = None, - **kwargs: Any - ) -> None: - """ - :keyword committed_blocks: - :paramtype committed_blocks: list[~azure.storage.blob.models.Block] - :keyword uncommitted_blocks: - :paramtype uncommitted_blocks: list[~azure.storage.blob.models.Block] - """ - super().__init__(**kwargs) - self.committed_blocks = committed_blocks - self.uncommitted_blocks = uncommitted_blocks - - -class BlockLookupList(_serialization.Model): - """BlockLookupList. - - :ivar committed: - :vartype committed: list[str] - :ivar uncommitted: - :vartype uncommitted: list[str] - :ivar latest: - :vartype latest: list[str] - """ - - _attribute_map = { - "committed": {"key": "Committed", "type": "[str]", "xml": {"itemsName": "Committed"}}, - "uncommitted": {"key": "Uncommitted", "type": "[str]", "xml": {"itemsName": "Uncommitted"}}, - "latest": {"key": "Latest", "type": "[str]", "xml": {"itemsName": "Latest"}}, - } - _xml_map = {"name": "BlockList"} - - def __init__( - self, - *, - committed: Optional[list[str]] = None, - uncommitted: Optional[list[str]] = None, - latest: Optional[list[str]] = None, - **kwargs: Any - ) -> None: - """ - :keyword committed: - :paramtype committed: list[str] - :keyword uncommitted: - :paramtype uncommitted: list[str] - :keyword latest: - :paramtype latest: list[str] - """ - super().__init__(**kwargs) - self.committed = committed - self.uncommitted = uncommitted - self.latest = latest - - -class ClearRange(_serialization.Model): - """ClearRange. - - All required parameters must be populated in order to send to server. - - :ivar start: Required. - :vartype start: int - :ivar end: Required. - :vartype end: int - """ - - _validation = { - "start": {"required": True}, - "end": {"required": True}, - } - - _attribute_map = { - "start": {"key": "Start", "type": "int", "xml": {"name": "Start"}}, - "end": {"key": "End", "type": "int", "xml": {"name": "End"}}, - } - _xml_map = {"name": "ClearRange"} - - def __init__(self, *, start: int, end: int, **kwargs: Any) -> None: - """ - :keyword start: Required. - :paramtype start: int - :keyword end: Required. - :paramtype end: int - """ - super().__init__(**kwargs) - self.start = start - self.end = end - - -class ContainerCpkScopeInfo(_serialization.Model): - """Parameter group. - - :ivar default_encryption_scope: Optional. Version 2019-07-07 and later. Specifies the default - encryption scope to set on the container and use for all future writes. - :vartype default_encryption_scope: str - :ivar prevent_encryption_scope_override: Optional. Version 2019-07-07 and newer. If true, - prevents any request from specifying a different encryption scope than the scope set on the - container. - :vartype prevent_encryption_scope_override: bool - """ - - _attribute_map = { - "default_encryption_scope": {"key": "DefaultEncryptionScope", "type": "str"}, - "prevent_encryption_scope_override": {"key": "PreventEncryptionScopeOverride", "type": "bool"}, - } - - def __init__( - self, - *, - default_encryption_scope: Optional[str] = None, - prevent_encryption_scope_override: Optional[bool] = None, - **kwargs: Any - ) -> None: - """ - :keyword default_encryption_scope: Optional. Version 2019-07-07 and later. Specifies the - default encryption scope to set on the container and use for all future writes. - :paramtype default_encryption_scope: str - :keyword prevent_encryption_scope_override: Optional. Version 2019-07-07 and newer. If true, - prevents any request from specifying a different encryption scope than the scope set on the - container. - :paramtype prevent_encryption_scope_override: bool - """ - super().__init__(**kwargs) - self.default_encryption_scope = default_encryption_scope - self.prevent_encryption_scope_override = prevent_encryption_scope_override - - -class ContainerItem(_serialization.Model): - """An Azure Storage container. - - All required parameters must be populated in order to send to server. - - :ivar name: Required. - :vartype name: str - :ivar deleted: - :vartype deleted: bool - :ivar version: - :vartype version: str - :ivar properties: Properties of a container. Required. - :vartype properties: ~azure.storage.blob.models.ContainerProperties - :ivar metadata: Dictionary of :code:``. - :vartype metadata: dict[str, str] - """ - - _validation = { - "name": {"required": True}, - "properties": {"required": True}, - } - - _attribute_map = { - "name": {"key": "Name", "type": "str"}, - "deleted": {"key": "Deleted", "type": "bool"}, - "version": {"key": "Version", "type": "str"}, - "properties": {"key": "Properties", "type": "ContainerProperties"}, - "metadata": {"key": "Metadata", "type": "{str}"}, - } - _xml_map = {"name": "Container"} - - def __init__( - self, - *, - name: str, - properties: "_models.ContainerProperties", - deleted: Optional[bool] = None, - version: Optional[str] = None, - metadata: Optional[dict[str, str]] = None, - **kwargs: Any - ) -> None: - """ - :keyword name: Required. - :paramtype name: str - :keyword deleted: - :paramtype deleted: bool - :keyword version: - :paramtype version: str - :keyword properties: Properties of a container. Required. - :paramtype properties: ~azure.storage.blob.models.ContainerProperties - :keyword metadata: Dictionary of :code:``. - :paramtype metadata: dict[str, str] - """ - super().__init__(**kwargs) - self.name = name - self.deleted = deleted - self.version = version - self.properties = properties - self.metadata = metadata - - -class ContainerProperties(_serialization.Model): - """Properties of a container. - - All required parameters must be populated in order to send to server. - - :ivar last_modified: Required. - :vartype last_modified: ~datetime.datetime - :ivar etag: Required. - :vartype etag: str - :ivar lease_status: Known values are: "locked" and "unlocked". - :vartype lease_status: str or ~azure.storage.blob.models.LeaseStatusType - :ivar lease_state: Known values are: "available", "leased", "expired", "breaking", and - "broken". - :vartype lease_state: str or ~azure.storage.blob.models.LeaseStateType - :ivar lease_duration: Known values are: "infinite" and "fixed". - :vartype lease_duration: str or ~azure.storage.blob.models.LeaseDurationType - :ivar public_access: Known values are: "container" and "blob". - :vartype public_access: str or ~azure.storage.blob.models.PublicAccessType - :ivar has_immutability_policy: - :vartype has_immutability_policy: bool - :ivar has_legal_hold: - :vartype has_legal_hold: bool - :ivar default_encryption_scope: - :vartype default_encryption_scope: str - :ivar prevent_encryption_scope_override: - :vartype prevent_encryption_scope_override: bool - :ivar deleted_time: - :vartype deleted_time: ~datetime.datetime - :ivar remaining_retention_days: - :vartype remaining_retention_days: int - :ivar is_immutable_storage_with_versioning_enabled: Indicates if version level worm is enabled - on this container. - :vartype is_immutable_storage_with_versioning_enabled: bool - """ - - _validation = { - "last_modified": {"required": True}, - "etag": {"required": True}, - } - - _attribute_map = { - "last_modified": {"key": "Last-Modified", "type": "rfc-1123"}, - "etag": {"key": "Etag", "type": "str"}, - "lease_status": {"key": "LeaseStatus", "type": "str"}, - "lease_state": {"key": "LeaseState", "type": "str"}, - "lease_duration": {"key": "LeaseDuration", "type": "str"}, - "public_access": {"key": "PublicAccess", "type": "str"}, - "has_immutability_policy": {"key": "HasImmutabilityPolicy", "type": "bool"}, - "has_legal_hold": {"key": "HasLegalHold", "type": "bool"}, - "default_encryption_scope": {"key": "DefaultEncryptionScope", "type": "str"}, - "prevent_encryption_scope_override": {"key": "DenyEncryptionScopeOverride", "type": "bool"}, - "deleted_time": {"key": "DeletedTime", "type": "rfc-1123"}, - "remaining_retention_days": {"key": "RemainingRetentionDays", "type": "int"}, - "is_immutable_storage_with_versioning_enabled": { - "key": "ImmutableStorageWithVersioningEnabled", - "type": "bool", - }, - } - - def __init__( - self, - *, - last_modified: datetime.datetime, - etag: str, - lease_status: Optional[Union[str, "_models.LeaseStatusType"]] = None, - lease_state: Optional[Union[str, "_models.LeaseStateType"]] = None, - lease_duration: Optional[Union[str, "_models.LeaseDurationType"]] = None, - public_access: Optional[Union[str, "_models.PublicAccessType"]] = None, - has_immutability_policy: Optional[bool] = None, - has_legal_hold: Optional[bool] = None, - default_encryption_scope: Optional[str] = None, - prevent_encryption_scope_override: Optional[bool] = None, - deleted_time: Optional[datetime.datetime] = None, - remaining_retention_days: Optional[int] = None, - is_immutable_storage_with_versioning_enabled: Optional[bool] = None, - **kwargs: Any - ) -> None: - """ - :keyword last_modified: Required. - :paramtype last_modified: ~datetime.datetime - :keyword etag: Required. - :paramtype etag: str - :keyword lease_status: Known values are: "locked" and "unlocked". - :paramtype lease_status: str or ~azure.storage.blob.models.LeaseStatusType - :keyword lease_state: Known values are: "available", "leased", "expired", "breaking", and - "broken". - :paramtype lease_state: str or ~azure.storage.blob.models.LeaseStateType - :keyword lease_duration: Known values are: "infinite" and "fixed". - :paramtype lease_duration: str or ~azure.storage.blob.models.LeaseDurationType - :keyword public_access: Known values are: "container" and "blob". - :paramtype public_access: str or ~azure.storage.blob.models.PublicAccessType - :keyword has_immutability_policy: - :paramtype has_immutability_policy: bool - :keyword has_legal_hold: - :paramtype has_legal_hold: bool - :keyword default_encryption_scope: - :paramtype default_encryption_scope: str - :keyword prevent_encryption_scope_override: - :paramtype prevent_encryption_scope_override: bool - :keyword deleted_time: - :paramtype deleted_time: ~datetime.datetime - :keyword remaining_retention_days: - :paramtype remaining_retention_days: int - :keyword is_immutable_storage_with_versioning_enabled: Indicates if version level worm is - enabled on this container. - :paramtype is_immutable_storage_with_versioning_enabled: bool - """ - super().__init__(**kwargs) - self.last_modified = last_modified - self.etag = etag - self.lease_status = lease_status - self.lease_state = lease_state - self.lease_duration = lease_duration - self.public_access = public_access - self.has_immutability_policy = has_immutability_policy - self.has_legal_hold = has_legal_hold - self.default_encryption_scope = default_encryption_scope - self.prevent_encryption_scope_override = prevent_encryption_scope_override - self.deleted_time = deleted_time - self.remaining_retention_days = remaining_retention_days - self.is_immutable_storage_with_versioning_enabled = is_immutable_storage_with_versioning_enabled - - -class CorsRule(_serialization.Model): - """CORS is an HTTP feature that enables a web application running under one domain to access - resources in another domain. Web browsers implement a security restriction known as same-origin - policy that prevents a web page from calling APIs in a different domain; CORS provides a secure - way to allow one domain (the origin domain) to call APIs in another domain. - - All required parameters must be populated in order to send to server. - - :ivar allowed_origins: The origin domains that are permitted to make a request against the - storage service via CORS. The origin domain is the domain from which the request originates. - Note that the origin must be an exact case-sensitive match with the origin that the user age - sends to the service. You can also use the wildcard character '*' to allow all origin domains - to make requests via CORS. Required. - :vartype allowed_origins: str - :ivar allowed_methods: The methods (HTTP request verbs) that the origin domain may use for a - CORS request. (comma separated). Required. - :vartype allowed_methods: str - :ivar allowed_headers: the request headers that the origin domain may specify on the CORS - request. Required. - :vartype allowed_headers: str - :ivar exposed_headers: The response headers that may be sent in the response to the CORS - request and exposed by the browser to the request issuer. Required. - :vartype exposed_headers: str - :ivar max_age_in_seconds: The maximum amount time that a browser should cache the preflight - OPTIONS request. Required. - :vartype max_age_in_seconds: int - """ - - _validation = { - "allowed_origins": {"required": True}, - "allowed_methods": {"required": True}, - "allowed_headers": {"required": True}, - "exposed_headers": {"required": True}, - "max_age_in_seconds": {"required": True, "minimum": 0}, - } - - _attribute_map = { - "allowed_origins": {"key": "AllowedOrigins", "type": "str"}, - "allowed_methods": {"key": "AllowedMethods", "type": "str"}, - "allowed_headers": {"key": "AllowedHeaders", "type": "str"}, - "exposed_headers": {"key": "ExposedHeaders", "type": "str"}, - "max_age_in_seconds": {"key": "MaxAgeInSeconds", "type": "int"}, - } - - def __init__( - self, - *, - allowed_origins: str, - allowed_methods: str, - allowed_headers: str, - exposed_headers: str, - max_age_in_seconds: int, - **kwargs: Any - ) -> None: - """ - :keyword allowed_origins: The origin domains that are permitted to make a request against the - storage service via CORS. The origin domain is the domain from which the request originates. - Note that the origin must be an exact case-sensitive match with the origin that the user age - sends to the service. You can also use the wildcard character '*' to allow all origin domains - to make requests via CORS. Required. - :paramtype allowed_origins: str - :keyword allowed_methods: The methods (HTTP request verbs) that the origin domain may use for a - CORS request. (comma separated). Required. - :paramtype allowed_methods: str - :keyword allowed_headers: the request headers that the origin domain may specify on the CORS - request. Required. - :paramtype allowed_headers: str - :keyword exposed_headers: The response headers that may be sent in the response to the CORS - request and exposed by the browser to the request issuer. Required. - :paramtype exposed_headers: str - :keyword max_age_in_seconds: The maximum amount time that a browser should cache the preflight - OPTIONS request. Required. - :paramtype max_age_in_seconds: int - """ - super().__init__(**kwargs) - self.allowed_origins = allowed_origins - self.allowed_methods = allowed_methods - self.allowed_headers = allowed_headers - self.exposed_headers = exposed_headers - self.max_age_in_seconds = max_age_in_seconds - - -class CpkInfo(_serialization.Model): - """Parameter group. - - :ivar encryption_key: Optional. Specifies the encryption key to use to encrypt the data - provided in the request. If not specified, encryption is performed with the root account - encryption key. For more information, see Encryption at Rest for Azure Storage Services. - :vartype encryption_key: str - :ivar encryption_key_sha256: The SHA-256 hash of the provided encryption key. Must be provided - if the x-ms-encryption-key header is provided. - :vartype encryption_key_sha256: str - :ivar encryption_algorithm: The algorithm used to produce the encryption key hash. Currently, - the only accepted value is "AES256". Must be provided if the x-ms-encryption-key header is - provided. Known values are: "None" and "AES256". - :vartype encryption_algorithm: str or ~azure.storage.blob.models.EncryptionAlgorithmType - """ - - _attribute_map = { - "encryption_key": {"key": "encryptionKey", "type": "str"}, - "encryption_key_sha256": {"key": "encryptionKeySha256", "type": "str"}, - "encryption_algorithm": {"key": "encryptionAlgorithm", "type": "str"}, - } - - def __init__( - self, - *, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, "_models.EncryptionAlgorithmType"]] = None, - **kwargs: Any - ) -> None: - """ - :keyword encryption_key: Optional. Specifies the encryption key to use to encrypt the data - provided in the request. If not specified, encryption is performed with the root account - encryption key. For more information, see Encryption at Rest for Azure Storage Services. - :paramtype encryption_key: str - :keyword encryption_key_sha256: The SHA-256 hash of the provided encryption key. Must be - provided if the x-ms-encryption-key header is provided. - :paramtype encryption_key_sha256: str - :keyword encryption_algorithm: The algorithm used to produce the encryption key hash. - Currently, the only accepted value is "AES256". Must be provided if the x-ms-encryption-key - header is provided. Known values are: "None" and "AES256". - :paramtype encryption_algorithm: str or ~azure.storage.blob.models.EncryptionAlgorithmType - """ - super().__init__(**kwargs) - self.encryption_key = encryption_key - self.encryption_key_sha256 = encryption_key_sha256 - self.encryption_algorithm = encryption_algorithm - - -class CpkScopeInfo(_serialization.Model): - """Parameter group. - - :ivar encryption_scope: Optional. Version 2019-07-07 and later. Specifies the name of the - encryption scope to use to encrypt the data provided in the request. If not specified, - encryption is performed with the default account encryption scope. For more information, see - Encryption at Rest for Azure Storage Services. - :vartype encryption_scope: str - """ - - _attribute_map = { - "encryption_scope": {"key": "encryptionScope", "type": "str"}, - } - - def __init__(self, *, encryption_scope: Optional[str] = None, **kwargs: Any) -> None: - """ - :keyword encryption_scope: Optional. Version 2019-07-07 and later. Specifies the name of the - encryption scope to use to encrypt the data provided in the request. If not specified, - encryption is performed with the default account encryption scope. For more information, see - Encryption at Rest for Azure Storage Services. - :paramtype encryption_scope: str - """ - super().__init__(**kwargs) - self.encryption_scope = encryption_scope - - -class DelimitedTextConfiguration(_serialization.Model): - """Groups the settings used for interpreting the blob data if the blob is delimited text - formatted. - - :ivar column_separator: The string used to separate columns. - :vartype column_separator: str - :ivar field_quote: The string used to quote a specific field. - :vartype field_quote: str - :ivar record_separator: The string used to separate records. - :vartype record_separator: str - :ivar escape_char: The string used as an escape character. - :vartype escape_char: str - :ivar headers_present: Represents whether the data has headers. - :vartype headers_present: bool - """ - - _attribute_map = { - "column_separator": {"key": "ColumnSeparator", "type": "str", "xml": {"name": "ColumnSeparator"}}, - "field_quote": {"key": "FieldQuote", "type": "str", "xml": {"name": "FieldQuote"}}, - "record_separator": {"key": "RecordSeparator", "type": "str", "xml": {"name": "RecordSeparator"}}, - "escape_char": {"key": "EscapeChar", "type": "str", "xml": {"name": "EscapeChar"}}, - "headers_present": {"key": "HeadersPresent", "type": "bool", "xml": {"name": "HasHeaders"}}, - } - _xml_map = {"name": "DelimitedTextConfiguration"} - - def __init__( - self, - *, - column_separator: Optional[str] = None, - field_quote: Optional[str] = None, - record_separator: Optional[str] = None, - escape_char: Optional[str] = None, - headers_present: Optional[bool] = None, - **kwargs: Any - ) -> None: - """ - :keyword column_separator: The string used to separate columns. - :paramtype column_separator: str - :keyword field_quote: The string used to quote a specific field. - :paramtype field_quote: str - :keyword record_separator: The string used to separate records. - :paramtype record_separator: str - :keyword escape_char: The string used as an escape character. - :paramtype escape_char: str - :keyword headers_present: Represents whether the data has headers. - :paramtype headers_present: bool - """ - super().__init__(**kwargs) - self.column_separator = column_separator - self.field_quote = field_quote - self.record_separator = record_separator - self.escape_char = escape_char - self.headers_present = headers_present - - -class FilterBlobItem(_serialization.Model): - """Blob info from a Filter Blobs API call. - - All required parameters must be populated in order to send to server. - - :ivar name: Required. - :vartype name: str - :ivar container_name: Required. - :vartype container_name: str - :ivar tags: Blob tags. - :vartype tags: ~azure.storage.blob.models.BlobTags - :ivar version_id: - :vartype version_id: str - :ivar is_current_version: - :vartype is_current_version: bool - """ - - _validation = { - "name": {"required": True}, - "container_name": {"required": True}, - } - - _attribute_map = { - "name": {"key": "Name", "type": "str"}, - "container_name": {"key": "ContainerName", "type": "str"}, - "tags": {"key": "Tags", "type": "BlobTags"}, - "version_id": {"key": "VersionId", "type": "str"}, - "is_current_version": {"key": "IsCurrentVersion", "type": "bool"}, - } - _xml_map = {"name": "Blob"} - - def __init__( - self, - *, - name: str, - container_name: str, - tags: Optional["_models.BlobTags"] = None, - version_id: Optional[str] = None, - is_current_version: Optional[bool] = None, - **kwargs: Any - ) -> None: - """ - :keyword name: Required. - :paramtype name: str - :keyword container_name: Required. - :paramtype container_name: str - :keyword tags: Blob tags. - :paramtype tags: ~azure.storage.blob.models.BlobTags - :keyword version_id: - :paramtype version_id: str - :keyword is_current_version: - :paramtype is_current_version: bool - """ - super().__init__(**kwargs) - self.name = name - self.container_name = container_name - self.tags = tags - self.version_id = version_id - self.is_current_version = is_current_version - - -class FilterBlobSegment(_serialization.Model): - """The result of a Filter Blobs API call. - - All required parameters must be populated in order to send to server. - - :ivar service_endpoint: Required. - :vartype service_endpoint: str - :ivar where: Required. - :vartype where: str - :ivar blobs: Required. - :vartype blobs: list[~azure.storage.blob.models.FilterBlobItem] - :ivar next_marker: - :vartype next_marker: str - """ - - _validation = { - "service_endpoint": {"required": True}, - "where": {"required": True}, - "blobs": {"required": True}, - } - - _attribute_map = { - "service_endpoint": {"key": "ServiceEndpoint", "type": "str", "xml": {"attr": True}}, - "where": {"key": "Where", "type": "str"}, - "blobs": { - "key": "Blobs", - "type": "[FilterBlobItem]", - "xml": {"name": "Blobs", "wrapped": True, "itemsName": "Blob"}, - }, - "next_marker": {"key": "NextMarker", "type": "str"}, - } - _xml_map = {"name": "EnumerationResults"} - - def __init__( - self, - *, - service_endpoint: str, - where: str, - blobs: list["_models.FilterBlobItem"], - next_marker: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword service_endpoint: Required. - :paramtype service_endpoint: str - :keyword where: Required. - :paramtype where: str - :keyword blobs: Required. - :paramtype blobs: list[~azure.storage.blob.models.FilterBlobItem] - :keyword next_marker: - :paramtype next_marker: str - """ - super().__init__(**kwargs) - self.service_endpoint = service_endpoint - self.where = where - self.blobs = blobs - self.next_marker = next_marker - - -class GeoReplication(_serialization.Model): - """Geo-Replication information for the Secondary Storage Service. - - All required parameters must be populated in order to send to server. - - :ivar status: The status of the secondary location. Required. Known values are: "live", - "bootstrap", and "unavailable". - :vartype status: str or ~azure.storage.blob.models.GeoReplicationStatusType - :ivar last_sync_time: A GMT date/time value, to the second. All primary writes preceding this - value are guaranteed to be available for read operations at the secondary. Primary writes after - this point in time may or may not be available for reads. Required. - :vartype last_sync_time: ~datetime.datetime - """ - - _validation = { - "status": {"required": True}, - "last_sync_time": {"required": True}, - } - - _attribute_map = { - "status": {"key": "Status", "type": "str"}, - "last_sync_time": {"key": "LastSyncTime", "type": "rfc-1123"}, - } - - def __init__( - self, - *, - status: Union[str, "_models.GeoReplicationStatusType"], - last_sync_time: datetime.datetime, - **kwargs: Any - ) -> None: - """ - :keyword status: The status of the secondary location. Required. Known values are: "live", - "bootstrap", and "unavailable". - :paramtype status: str or ~azure.storage.blob.models.GeoReplicationStatusType - :keyword last_sync_time: A GMT date/time value, to the second. All primary writes preceding - this value are guaranteed to be available for read operations at the secondary. Primary writes - after this point in time may or may not be available for reads. Required. - :paramtype last_sync_time: ~datetime.datetime - """ - super().__init__(**kwargs) - self.status = status - self.last_sync_time = last_sync_time - - -class JsonTextConfiguration(_serialization.Model): - """json text configuration. - - :ivar record_separator: The string used to separate records. - :vartype record_separator: str - """ - - _attribute_map = { - "record_separator": {"key": "RecordSeparator", "type": "str", "xml": {"name": "RecordSeparator"}}, - } - _xml_map = {"name": "JsonTextConfiguration"} - - def __init__(self, *, record_separator: Optional[str] = None, **kwargs: Any) -> None: - """ - :keyword record_separator: The string used to separate records. - :paramtype record_separator: str - """ - super().__init__(**kwargs) - self.record_separator = record_separator - - -class KeyInfo(_serialization.Model): - """Key information. - - All required parameters must be populated in order to send to server. - - :ivar start: The date-time the key is active in ISO 8601 UTC time. Required. - :vartype start: str - :ivar expiry: The date-time the key expires in ISO 8601 UTC time. Required. - :vartype expiry: str - :ivar delegated_user_tid: The delegated user tenant id in Azure AD. - :vartype delegated_user_tid: str - """ - - _validation = { - "start": {"required": True}, - "expiry": {"required": True}, - } - - _attribute_map = { - "start": {"key": "Start", "type": "str"}, - "expiry": {"key": "Expiry", "type": "str"}, - "delegated_user_tid": {"key": "DelegatedUserTid", "type": "str"}, - } - - def __init__(self, *, start: str, expiry: str, delegated_user_tid: Optional[str] = None, **kwargs: Any) -> None: - """ - :keyword start: The date-time the key is active in ISO 8601 UTC time. Required. - :paramtype start: str - :keyword expiry: The date-time the key expires in ISO 8601 UTC time. Required. - :paramtype expiry: str - :keyword delegated_user_tid: The delegated user tenant id in Azure AD. - :paramtype delegated_user_tid: str - """ - super().__init__(**kwargs) - self.start = start - self.expiry = expiry - self.delegated_user_tid = delegated_user_tid - - -class LeaseAccessConditions(_serialization.Model): - """Parameter group. - - :ivar lease_id: If specified, the operation only succeeds if the resource's lease is active and - matches this ID. - :vartype lease_id: str - """ - - _attribute_map = { - "lease_id": {"key": "leaseId", "type": "str"}, - } - - def __init__(self, *, lease_id: Optional[str] = None, **kwargs: Any) -> None: - """ - :keyword lease_id: If specified, the operation only succeeds if the resource's lease is active - and matches this ID. - :paramtype lease_id: str - """ - super().__init__(**kwargs) - self.lease_id = lease_id - - -class ListBlobsFlatSegmentResponse(_serialization.Model): - """An enumeration of blobs. - - All required parameters must be populated in order to send to server. - - :ivar service_endpoint: Required. - :vartype service_endpoint: str - :ivar container_name: Required. - :vartype container_name: str - :ivar prefix: - :vartype prefix: str - :ivar marker: - :vartype marker: str - :ivar max_results: - :vartype max_results: int - :ivar segment: Required. - :vartype segment: ~azure.storage.blob.models.BlobFlatListSegment - :ivar next_marker: - :vartype next_marker: str - """ - - _validation = { - "service_endpoint": {"required": True}, - "container_name": {"required": True}, - "segment": {"required": True}, - } - - _attribute_map = { - "service_endpoint": {"key": "ServiceEndpoint", "type": "str", "xml": {"attr": True}}, - "container_name": {"key": "ContainerName", "type": "str", "xml": {"attr": True}}, - "prefix": {"key": "Prefix", "type": "str"}, - "marker": {"key": "Marker", "type": "str"}, - "max_results": {"key": "MaxResults", "type": "int"}, - "segment": {"key": "Segment", "type": "BlobFlatListSegment"}, - "next_marker": {"key": "NextMarker", "type": "str"}, - } - _xml_map = {"name": "EnumerationResults"} - - def __init__( - self, - *, - service_endpoint: str, - container_name: str, - segment: "_models.BlobFlatListSegment", - prefix: Optional[str] = None, - marker: Optional[str] = None, - max_results: Optional[int] = None, - next_marker: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword service_endpoint: Required. - :paramtype service_endpoint: str - :keyword container_name: Required. - :paramtype container_name: str - :keyword prefix: - :paramtype prefix: str - :keyword marker: - :paramtype marker: str - :keyword max_results: - :paramtype max_results: int - :keyword segment: Required. - :paramtype segment: ~azure.storage.blob.models.BlobFlatListSegment - :keyword next_marker: - :paramtype next_marker: str - """ - super().__init__(**kwargs) - self.service_endpoint = service_endpoint - self.container_name = container_name - self.prefix = prefix - self.marker = marker - self.max_results = max_results - self.segment = segment - self.next_marker = next_marker - - -class ListBlobsHierarchySegmentResponse(_serialization.Model): - """An enumeration of blobs. - - All required parameters must be populated in order to send to server. - - :ivar service_endpoint: Required. - :vartype service_endpoint: str - :ivar container_name: Required. - :vartype container_name: str - :ivar prefix: - :vartype prefix: str - :ivar marker: - :vartype marker: str - :ivar max_results: - :vartype max_results: int - :ivar delimiter: - :vartype delimiter: str - :ivar segment: Required. - :vartype segment: ~azure.storage.blob.models.BlobHierarchyListSegment - :ivar next_marker: - :vartype next_marker: str - """ - - _validation = { - "service_endpoint": {"required": True}, - "container_name": {"required": True}, - "segment": {"required": True}, - } - - _attribute_map = { - "service_endpoint": {"key": "ServiceEndpoint", "type": "str", "xml": {"attr": True}}, - "container_name": {"key": "ContainerName", "type": "str", "xml": {"attr": True}}, - "prefix": {"key": "Prefix", "type": "str"}, - "marker": {"key": "Marker", "type": "str"}, - "max_results": {"key": "MaxResults", "type": "int"}, - "delimiter": {"key": "Delimiter", "type": "str"}, - "segment": {"key": "Segment", "type": "BlobHierarchyListSegment"}, - "next_marker": {"key": "NextMarker", "type": "str"}, - } - _xml_map = {"name": "EnumerationResults"} - - def __init__( - self, - *, - service_endpoint: str, - container_name: str, - segment: "_models.BlobHierarchyListSegment", - prefix: Optional[str] = None, - marker: Optional[str] = None, - max_results: Optional[int] = None, - delimiter: Optional[str] = None, - next_marker: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword service_endpoint: Required. - :paramtype service_endpoint: str - :keyword container_name: Required. - :paramtype container_name: str - :keyword prefix: - :paramtype prefix: str - :keyword marker: - :paramtype marker: str - :keyword max_results: - :paramtype max_results: int - :keyword delimiter: - :paramtype delimiter: str - :keyword segment: Required. - :paramtype segment: ~azure.storage.blob.models.BlobHierarchyListSegment - :keyword next_marker: - :paramtype next_marker: str - """ - super().__init__(**kwargs) - self.service_endpoint = service_endpoint - self.container_name = container_name - self.prefix = prefix - self.marker = marker - self.max_results = max_results - self.delimiter = delimiter - self.segment = segment - self.next_marker = next_marker - - -class ListContainersSegmentResponse(_serialization.Model): - """An enumeration of containers. - - All required parameters must be populated in order to send to server. - - :ivar service_endpoint: Required. - :vartype service_endpoint: str - :ivar prefix: - :vartype prefix: str - :ivar marker: - :vartype marker: str - :ivar max_results: - :vartype max_results: int - :ivar container_items: Required. - :vartype container_items: list[~azure.storage.blob.models.ContainerItem] - :ivar next_marker: - :vartype next_marker: str - """ - - _validation = { - "service_endpoint": {"required": True}, - "container_items": {"required": True}, - } - - _attribute_map = { - "service_endpoint": {"key": "ServiceEndpoint", "type": "str", "xml": {"attr": True}}, - "prefix": {"key": "Prefix", "type": "str"}, - "marker": {"key": "Marker", "type": "str"}, - "max_results": {"key": "MaxResults", "type": "int"}, - "container_items": { - "key": "ContainerItems", - "type": "[ContainerItem]", - "xml": {"name": "Containers", "wrapped": True, "itemsName": "Container"}, - }, - "next_marker": {"key": "NextMarker", "type": "str"}, - } - _xml_map = {"name": "EnumerationResults"} - - def __init__( - self, - *, - service_endpoint: str, - container_items: list["_models.ContainerItem"], - prefix: Optional[str] = None, - marker: Optional[str] = None, - max_results: Optional[int] = None, - next_marker: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword service_endpoint: Required. - :paramtype service_endpoint: str - :keyword prefix: - :paramtype prefix: str - :keyword marker: - :paramtype marker: str - :keyword max_results: - :paramtype max_results: int - :keyword container_items: Required. - :paramtype container_items: list[~azure.storage.blob.models.ContainerItem] - :keyword next_marker: - :paramtype next_marker: str - """ - super().__init__(**kwargs) - self.service_endpoint = service_endpoint - self.prefix = prefix - self.marker = marker - self.max_results = max_results - self.container_items = container_items - self.next_marker = next_marker - - -class Logging(_serialization.Model): - """Azure Analytics Logging settings. - - All required parameters must be populated in order to send to server. - - :ivar version: The version of Storage Analytics to configure. Required. - :vartype version: str - :ivar delete: Indicates whether all delete requests should be logged. Required. - :vartype delete: bool - :ivar read: Indicates whether all read requests should be logged. Required. - :vartype read: bool - :ivar write: Indicates whether all write requests should be logged. Required. - :vartype write: bool - :ivar retention_policy: the retention policy which determines how long the associated data - should persist. Required. - :vartype retention_policy: ~azure.storage.blob.models.RetentionPolicy - """ - - _validation = { - "version": {"required": True}, - "delete": {"required": True}, - "read": {"required": True}, - "write": {"required": True}, - "retention_policy": {"required": True}, - } - - _attribute_map = { - "version": {"key": "Version", "type": "str"}, - "delete": {"key": "Delete", "type": "bool"}, - "read": {"key": "Read", "type": "bool"}, - "write": {"key": "Write", "type": "bool"}, - "retention_policy": {"key": "RetentionPolicy", "type": "RetentionPolicy"}, - } - - def __init__( - self, - *, - version: str, - delete: bool, - read: bool, - write: bool, - retention_policy: "_models.RetentionPolicy", - **kwargs: Any - ) -> None: - """ - :keyword version: The version of Storage Analytics to configure. Required. - :paramtype version: str - :keyword delete: Indicates whether all delete requests should be logged. Required. - :paramtype delete: bool - :keyword read: Indicates whether all read requests should be logged. Required. - :paramtype read: bool - :keyword write: Indicates whether all write requests should be logged. Required. - :paramtype write: bool - :keyword retention_policy: the retention policy which determines how long the associated data - should persist. Required. - :paramtype retention_policy: ~azure.storage.blob.models.RetentionPolicy - """ - super().__init__(**kwargs) - self.version = version - self.delete = delete - self.read = read - self.write = write - self.retention_policy = retention_policy - - -class Metrics(_serialization.Model): - """a summary of request statistics grouped by API in hour or minute aggregates for blobs. - - All required parameters must be populated in order to send to server. - - :ivar version: The version of Storage Analytics to configure. - :vartype version: str - :ivar enabled: Indicates whether metrics are enabled for the Blob service. Required. - :vartype enabled: bool - :ivar include_apis: Indicates whether metrics should generate summary statistics for called API - operations. - :vartype include_apis: bool - :ivar retention_policy: the retention policy which determines how long the associated data - should persist. - :vartype retention_policy: ~azure.storage.blob.models.RetentionPolicy - """ - - _validation = { - "enabled": {"required": True}, - } - - _attribute_map = { - "version": {"key": "Version", "type": "str"}, - "enabled": {"key": "Enabled", "type": "bool"}, - "include_apis": {"key": "IncludeAPIs", "type": "bool"}, - "retention_policy": {"key": "RetentionPolicy", "type": "RetentionPolicy"}, - } - - def __init__( - self, - *, - enabled: bool, - version: Optional[str] = None, - include_apis: Optional[bool] = None, - retention_policy: Optional["_models.RetentionPolicy"] = None, - **kwargs: Any - ) -> None: - """ - :keyword version: The version of Storage Analytics to configure. - :paramtype version: str - :keyword enabled: Indicates whether metrics are enabled for the Blob service. Required. - :paramtype enabled: bool - :keyword include_apis: Indicates whether metrics should generate summary statistics for called - API operations. - :paramtype include_apis: bool - :keyword retention_policy: the retention policy which determines how long the associated data - should persist. - :paramtype retention_policy: ~azure.storage.blob.models.RetentionPolicy - """ - super().__init__(**kwargs) - self.version = version - self.enabled = enabled - self.include_apis = include_apis - self.retention_policy = retention_policy - - -class ModifiedAccessConditions(_serialization.Model): - """Parameter group. - - :ivar if_modified_since: Specify this header value to operate only on a blob if it has been - modified since the specified date/time. - :vartype if_modified_since: ~datetime.datetime - :ivar if_unmodified_since: Specify this header value to operate only on a blob if it has not - been modified since the specified date/time. - :vartype if_unmodified_since: ~datetime.datetime - :ivar if_match: Specify an ETag value to operate only on blobs with a matching value. - :vartype if_match: str - :ivar if_none_match: Specify an ETag value to operate only on blobs without a matching value. - :vartype if_none_match: str - :ivar if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a matching - value. - :vartype if_tags: str - """ - - _attribute_map = { - "if_modified_since": {"key": "ifModifiedSince", "type": "rfc-1123"}, - "if_unmodified_since": {"key": "ifUnmodifiedSince", "type": "rfc-1123"}, - "if_match": {"key": "ifMatch", "type": "str"}, - "if_none_match": {"key": "ifNoneMatch", "type": "str"}, - "if_tags": {"key": "ifTags", "type": "str"}, - } - - def __init__( - self, - *, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword if_modified_since: Specify this header value to operate only on a blob if it has been - modified since the specified date/time. - :paramtype if_modified_since: ~datetime.datetime - :keyword if_unmodified_since: Specify this header value to operate only on a blob if it has not - been modified since the specified date/time. - :paramtype if_unmodified_since: ~datetime.datetime - :keyword if_match: Specify an ETag value to operate only on blobs with a matching value. - :paramtype if_match: str - :keyword if_none_match: Specify an ETag value to operate only on blobs without a matching - value. - :paramtype if_none_match: str - :keyword if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a - matching value. - :paramtype if_tags: str - """ - super().__init__(**kwargs) - self.if_modified_since = if_modified_since - self.if_unmodified_since = if_unmodified_since - self.if_match = if_match - self.if_none_match = if_none_match - self.if_tags = if_tags - - -class PageList(_serialization.Model): - """the list of pages. - - :ivar page_range: - :vartype page_range: list[~azure.storage.blob.models.PageRange] - :ivar clear_range: - :vartype clear_range: list[~azure.storage.blob.models.ClearRange] - :ivar next_marker: - :vartype next_marker: str - """ - - _attribute_map = { - "page_range": {"key": "PageRange", "type": "[PageRange]", "xml": {"itemsName": "PageRange"}}, - "clear_range": {"key": "ClearRange", "type": "[ClearRange]", "xml": {"itemsName": "ClearRange"}}, - "next_marker": {"key": "NextMarker", "type": "str"}, - } - - def __init__( - self, - *, - page_range: Optional[list["_models.PageRange"]] = None, - clear_range: Optional[list["_models.ClearRange"]] = None, - next_marker: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword page_range: - :paramtype page_range: list[~azure.storage.blob.models.PageRange] - :keyword clear_range: - :paramtype clear_range: list[~azure.storage.blob.models.ClearRange] - :keyword next_marker: - :paramtype next_marker: str - """ - super().__init__(**kwargs) - self.page_range = page_range - self.clear_range = clear_range - self.next_marker = next_marker - - -class PageRange(_serialization.Model): - """PageRange. - - All required parameters must be populated in order to send to server. - - :ivar start: Required. - :vartype start: int - :ivar end: Required. - :vartype end: int - """ - - _validation = { - "start": {"required": True}, - "end": {"required": True}, - } - - _attribute_map = { - "start": {"key": "Start", "type": "int", "xml": {"name": "Start"}}, - "end": {"key": "End", "type": "int", "xml": {"name": "End"}}, - } - _xml_map = {"name": "PageRange"} - - def __init__(self, *, start: int, end: int, **kwargs: Any) -> None: - """ - :keyword start: Required. - :paramtype start: int - :keyword end: Required. - :paramtype end: int - """ - super().__init__(**kwargs) - self.start = start - self.end = end - - -class QueryFormat(_serialization.Model): - """QueryFormat. - - All required parameters must be populated in order to send to server. - - :ivar type: The quick query format type. Required. Known values are: "delimited", "json", - "arrow", and "parquet". - :vartype type: str or ~azure.storage.blob.models.QueryFormatType - :ivar delimited_text_configuration: Groups the settings used for interpreting the blob data if - the blob is delimited text formatted. - :vartype delimited_text_configuration: ~azure.storage.blob.models.DelimitedTextConfiguration - :ivar json_text_configuration: json text configuration. - :vartype json_text_configuration: ~azure.storage.blob.models.JsonTextConfiguration - :ivar arrow_configuration: Groups the settings used for formatting the response if the response - should be Arrow formatted. - :vartype arrow_configuration: ~azure.storage.blob.models.ArrowConfiguration - :ivar parquet_text_configuration: parquet configuration. - :vartype parquet_text_configuration: JSON - """ - - _validation = { - "type": {"required": True}, - } - - _attribute_map = { - "type": {"key": "Type", "type": "str", "xml": {"name": "Type"}}, - "delimited_text_configuration": {"key": "DelimitedTextConfiguration", "type": "DelimitedTextConfiguration"}, - "json_text_configuration": {"key": "JsonTextConfiguration", "type": "JsonTextConfiguration"}, - "arrow_configuration": {"key": "ArrowConfiguration", "type": "ArrowConfiguration"}, - "parquet_text_configuration": {"key": "ParquetTextConfiguration", "type": "object"}, - } - - def __init__( - self, - *, - type: Union[str, "_models.QueryFormatType"], - delimited_text_configuration: Optional["_models.DelimitedTextConfiguration"] = None, - json_text_configuration: Optional["_models.JsonTextConfiguration"] = None, - arrow_configuration: Optional["_models.ArrowConfiguration"] = None, - parquet_text_configuration: Optional[JSON] = None, - **kwargs: Any - ) -> None: - """ - :keyword type: The quick query format type. Required. Known values are: "delimited", "json", - "arrow", and "parquet". - :paramtype type: str or ~azure.storage.blob.models.QueryFormatType - :keyword delimited_text_configuration: Groups the settings used for interpreting the blob data - if the blob is delimited text formatted. - :paramtype delimited_text_configuration: ~azure.storage.blob.models.DelimitedTextConfiguration - :keyword json_text_configuration: json text configuration. - :paramtype json_text_configuration: ~azure.storage.blob.models.JsonTextConfiguration - :keyword arrow_configuration: Groups the settings used for formatting the response if the - response should be Arrow formatted. - :paramtype arrow_configuration: ~azure.storage.blob.models.ArrowConfiguration - :keyword parquet_text_configuration: parquet configuration. - :paramtype parquet_text_configuration: JSON - """ - super().__init__(**kwargs) - self.type = type - self.delimited_text_configuration = delimited_text_configuration - self.json_text_configuration = json_text_configuration - self.arrow_configuration = arrow_configuration - self.parquet_text_configuration = parquet_text_configuration - - -class QueryRequest(_serialization.Model): - """Groups the set of query request settings. - - Variables are only populated by the server, and will be ignored when sending a request. - - All required parameters must be populated in order to send to server. - - :ivar query_type: Required. The type of the provided query expression. Required. Default value - is "SQL". - :vartype query_type: str - :ivar expression: The query expression in SQL. The maximum size of the query expression is - 256KiB. Required. - :vartype expression: str - :ivar input_serialization: - :vartype input_serialization: ~azure.storage.blob.models.QuerySerialization - :ivar output_serialization: - :vartype output_serialization: ~azure.storage.blob.models.QuerySerialization - """ - - _validation = { - "query_type": {"required": True, "constant": True}, - "expression": {"required": True}, - } - - _attribute_map = { - "query_type": {"key": "QueryType", "type": "str", "xml": {"name": "QueryType"}}, - "expression": {"key": "Expression", "type": "str", "xml": {"name": "Expression"}}, - "input_serialization": {"key": "InputSerialization", "type": "QuerySerialization"}, - "output_serialization": {"key": "OutputSerialization", "type": "QuerySerialization"}, - } - _xml_map = {"name": "QueryRequest"} - - query_type = "SQL" - - def __init__( - self, - *, - expression: str, - input_serialization: Optional["_models.QuerySerialization"] = None, - output_serialization: Optional["_models.QuerySerialization"] = None, - **kwargs: Any - ) -> None: - """ - :keyword expression: The query expression in SQL. The maximum size of the query expression is - 256KiB. Required. - :paramtype expression: str - :keyword input_serialization: - :paramtype input_serialization: ~azure.storage.blob.models.QuerySerialization - :keyword output_serialization: - :paramtype output_serialization: ~azure.storage.blob.models.QuerySerialization - """ - super().__init__(**kwargs) - self.expression = expression - self.input_serialization = input_serialization - self.output_serialization = output_serialization - - -class QuerySerialization(_serialization.Model): - """QuerySerialization. - - All required parameters must be populated in order to send to server. - - :ivar format: Required. - :vartype format: ~azure.storage.blob.models.QueryFormat - """ - - _validation = { - "format": {"required": True}, - } - - _attribute_map = { - "format": {"key": "Format", "type": "QueryFormat"}, - } - - def __init__(self, *, format: "_models.QueryFormat", **kwargs: Any) -> None: - """ - :keyword format: Required. - :paramtype format: ~azure.storage.blob.models.QueryFormat - """ - super().__init__(**kwargs) - self.format = format - - -class RetentionPolicy(_serialization.Model): - """the retention policy which determines how long the associated data should persist. - - All required parameters must be populated in order to send to server. - - :ivar enabled: Indicates whether a retention policy is enabled for the storage service. - Required. - :vartype enabled: bool - :ivar days: Indicates the number of days that metrics or logging or soft-deleted data should be - retained. All data older than this value will be deleted. - :vartype days: int - :ivar allow_permanent_delete: Indicates whether permanent delete is allowed on this storage - account. - :vartype allow_permanent_delete: bool - """ - - _validation = { - "enabled": {"required": True}, - "days": {"minimum": 1}, - } - - _attribute_map = { - "enabled": {"key": "Enabled", "type": "bool"}, - "days": {"key": "Days", "type": "int"}, - "allow_permanent_delete": {"key": "AllowPermanentDelete", "type": "bool"}, - } - - def __init__( - self, *, enabled: bool, days: Optional[int] = None, allow_permanent_delete: Optional[bool] = None, **kwargs: Any - ) -> None: - """ - :keyword enabled: Indicates whether a retention policy is enabled for the storage service. - Required. - :paramtype enabled: bool - :keyword days: Indicates the number of days that metrics or logging or soft-deleted data should - be retained. All data older than this value will be deleted. - :paramtype days: int - :keyword allow_permanent_delete: Indicates whether permanent delete is allowed on this storage - account. - :paramtype allow_permanent_delete: bool - """ - super().__init__(**kwargs) - self.enabled = enabled - self.days = days - self.allow_permanent_delete = allow_permanent_delete - - -class SequenceNumberAccessConditions(_serialization.Model): - """Parameter group. - - :ivar if_sequence_number_less_than_or_equal_to: Specify this header value to operate only on a - blob if it has a sequence number less than or equal to the specified. - :vartype if_sequence_number_less_than_or_equal_to: int - :ivar if_sequence_number_less_than: Specify this header value to operate only on a blob if it - has a sequence number less than the specified. - :vartype if_sequence_number_less_than: int - :ivar if_sequence_number_equal_to: Specify this header value to operate only on a blob if it - has the specified sequence number. - :vartype if_sequence_number_equal_to: int - """ - - _attribute_map = { - "if_sequence_number_less_than_or_equal_to": {"key": "ifSequenceNumberLessThanOrEqualTo", "type": "int"}, - "if_sequence_number_less_than": {"key": "ifSequenceNumberLessThan", "type": "int"}, - "if_sequence_number_equal_to": {"key": "ifSequenceNumberEqualTo", "type": "int"}, - } - - def __init__( - self, - *, - if_sequence_number_less_than_or_equal_to: Optional[int] = None, - if_sequence_number_less_than: Optional[int] = None, - if_sequence_number_equal_to: Optional[int] = None, - **kwargs: Any - ) -> None: - """ - :keyword if_sequence_number_less_than_or_equal_to: Specify this header value to operate only on - a blob if it has a sequence number less than or equal to the specified. - :paramtype if_sequence_number_less_than_or_equal_to: int - :keyword if_sequence_number_less_than: Specify this header value to operate only on a blob if - it has a sequence number less than the specified. - :paramtype if_sequence_number_less_than: int - :keyword if_sequence_number_equal_to: Specify this header value to operate only on a blob if it - has the specified sequence number. - :paramtype if_sequence_number_equal_to: int - """ - super().__init__(**kwargs) - self.if_sequence_number_less_than_or_equal_to = if_sequence_number_less_than_or_equal_to - self.if_sequence_number_less_than = if_sequence_number_less_than - self.if_sequence_number_equal_to = if_sequence_number_equal_to - - -class SignedIdentifier(_serialization.Model): - """signed identifier. - - All required parameters must be populated in order to send to server. - - :ivar id: a unique id. Required. - :vartype id: str - :ivar access_policy: An Access policy. - :vartype access_policy: ~azure.storage.blob.models.AccessPolicy - """ - - _validation = { - "id": {"required": True}, - } - - _attribute_map = { - "id": {"key": "Id", "type": "str"}, - "access_policy": {"key": "AccessPolicy", "type": "AccessPolicy"}, - } - _xml_map = {"name": "SignedIdentifier"} - - def __init__( - self, - *, - id: str, # pylint: disable=redefined-builtin - access_policy: Optional["_models.AccessPolicy"] = None, - **kwargs: Any - ) -> None: - """ - :keyword id: a unique id. Required. - :paramtype id: str - :keyword access_policy: An Access policy. - :paramtype access_policy: ~azure.storage.blob.models.AccessPolicy - """ - super().__init__(**kwargs) - self.id = id - self.access_policy = access_policy - - -class SourceCpkInfo(_serialization.Model): - """Parameter group. - - :ivar source_encryption_key: Optional. Specifies the source encryption key to use to encrypt - the source data provided in the request. - :vartype source_encryption_key: str - :ivar source_encryption_key_sha256: The SHA-256 hash of the provided source encryption key. - Must be provided if the x-ms-source-encryption-key header is provided. - :vartype source_encryption_key_sha256: str - :ivar source_encryption_algorithm: The algorithm used to produce the source encryption key - hash. Currently, the only accepted value is "AES256". Must be provided if the - x-ms-source-encryption-key is provided. Known values are: "None" and "AES256". - :vartype source_encryption_algorithm: str or ~azure.storage.blob.models.EncryptionAlgorithmType - """ - - _attribute_map = { - "source_encryption_key": {"key": "sourceEncryptionKey", "type": "str"}, - "source_encryption_key_sha256": {"key": "sourceEncryptionKeySha256", "type": "str"}, - "source_encryption_algorithm": {"key": "sourceEncryptionAlgorithm", "type": "str"}, - } - - def __init__( - self, - *, - source_encryption_key: Optional[str] = None, - source_encryption_key_sha256: Optional[str] = None, - source_encryption_algorithm: Optional[Union[str, "_models.EncryptionAlgorithmType"]] = None, - **kwargs: Any - ) -> None: - """ - :keyword source_encryption_key: Optional. Specifies the source encryption key to use to encrypt - the source data provided in the request. - :paramtype source_encryption_key: str - :keyword source_encryption_key_sha256: The SHA-256 hash of the provided source encryption key. - Must be provided if the x-ms-source-encryption-key header is provided. - :paramtype source_encryption_key_sha256: str - :keyword source_encryption_algorithm: The algorithm used to produce the source encryption key - hash. Currently, the only accepted value is "AES256". Must be provided if the - x-ms-source-encryption-key is provided. Known values are: "None" and "AES256". - :paramtype source_encryption_algorithm: str or - ~azure.storage.blob.models.EncryptionAlgorithmType - """ - super().__init__(**kwargs) - self.source_encryption_key = source_encryption_key - self.source_encryption_key_sha256 = source_encryption_key_sha256 - self.source_encryption_algorithm = source_encryption_algorithm - - -class SourceModifiedAccessConditions(_serialization.Model): - """Parameter group. - - :ivar source_if_modified_since: Specify this header value to operate only on a blob if it has - been modified since the specified date/time. - :vartype source_if_modified_since: ~datetime.datetime - :ivar source_if_unmodified_since: Specify this header value to operate only on a blob if it has - not been modified since the specified date/time. - :vartype source_if_unmodified_since: ~datetime.datetime - :ivar source_if_match: Specify an ETag value to operate only on blobs with a matching value. - :vartype source_if_match: str - :ivar source_if_none_match: Specify an ETag value to operate only on blobs without a matching - value. - :vartype source_if_none_match: str - :ivar source_if_tags: Specify a SQL where clause on blob tags to operate only on blobs with a - matching value. - :vartype source_if_tags: str - """ - - _attribute_map = { - "source_if_modified_since": {"key": "sourceIfModifiedSince", "type": "rfc-1123"}, - "source_if_unmodified_since": {"key": "sourceIfUnmodifiedSince", "type": "rfc-1123"}, - "source_if_match": {"key": "sourceIfMatch", "type": "str"}, - "source_if_none_match": {"key": "sourceIfNoneMatch", "type": "str"}, - "source_if_tags": {"key": "sourceIfTags", "type": "str"}, - } - - def __init__( - self, - *, - source_if_modified_since: Optional[datetime.datetime] = None, - source_if_unmodified_since: Optional[datetime.datetime] = None, - source_if_match: Optional[str] = None, - source_if_none_match: Optional[str] = None, - source_if_tags: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword source_if_modified_since: Specify this header value to operate only on a blob if it - has been modified since the specified date/time. - :paramtype source_if_modified_since: ~datetime.datetime - :keyword source_if_unmodified_since: Specify this header value to operate only on a blob if it - has not been modified since the specified date/time. - :paramtype source_if_unmodified_since: ~datetime.datetime - :keyword source_if_match: Specify an ETag value to operate only on blobs with a matching value. - :paramtype source_if_match: str - :keyword source_if_none_match: Specify an ETag value to operate only on blobs without a - matching value. - :paramtype source_if_none_match: str - :keyword source_if_tags: Specify a SQL where clause on blob tags to operate only on blobs with - a matching value. - :paramtype source_if_tags: str - """ - super().__init__(**kwargs) - self.source_if_modified_since = source_if_modified_since - self.source_if_unmodified_since = source_if_unmodified_since - self.source_if_match = source_if_match - self.source_if_none_match = source_if_none_match - self.source_if_tags = source_if_tags - - -class StaticWebsite(_serialization.Model): - """The properties that enable an account to host a static website. - - All required parameters must be populated in order to send to server. - - :ivar enabled: Indicates whether this account is hosting a static website. Required. - :vartype enabled: bool - :ivar index_document: The default name of the index page under each directory. - :vartype index_document: str - :ivar error_document404_path: The absolute path of the custom 404 page. - :vartype error_document404_path: str - :ivar default_index_document_path: Absolute path of the default index page. - :vartype default_index_document_path: str - """ - - _validation = { - "enabled": {"required": True}, - } - - _attribute_map = { - "enabled": {"key": "Enabled", "type": "bool"}, - "index_document": {"key": "IndexDocument", "type": "str"}, - "error_document404_path": {"key": "ErrorDocument404Path", "type": "str"}, - "default_index_document_path": {"key": "DefaultIndexDocumentPath", "type": "str"}, - } - - def __init__( - self, - *, - enabled: bool, - index_document: Optional[str] = None, - error_document404_path: Optional[str] = None, - default_index_document_path: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword enabled: Indicates whether this account is hosting a static website. Required. - :paramtype enabled: bool - :keyword index_document: The default name of the index page under each directory. - :paramtype index_document: str - :keyword error_document404_path: The absolute path of the custom 404 page. - :paramtype error_document404_path: str - :keyword default_index_document_path: Absolute path of the default index page. - :paramtype default_index_document_path: str - """ - super().__init__(**kwargs) - self.enabled = enabled - self.index_document = index_document - self.error_document404_path = error_document404_path - self.default_index_document_path = default_index_document_path - - -class StorageError(_serialization.Model): - """StorageError. - - :ivar message: - :vartype message: str - :ivar copy_source_status_code: - :vartype copy_source_status_code: int - :ivar copy_source_error_code: - :vartype copy_source_error_code: str - :ivar copy_source_error_message: - :vartype copy_source_error_message: str - """ - - _attribute_map = { - "message": {"key": "Message", "type": "str"}, - "copy_source_status_code": {"key": "CopySourceStatusCode", "type": "int"}, - "copy_source_error_code": {"key": "CopySourceErrorCode", "type": "str"}, - "copy_source_error_message": {"key": "CopySourceErrorMessage", "type": "str"}, - } - - def __init__( - self, - *, - message: Optional[str] = None, - copy_source_status_code: Optional[int] = None, - copy_source_error_code: Optional[str] = None, - copy_source_error_message: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword message: - :paramtype message: str - :keyword copy_source_status_code: - :paramtype copy_source_status_code: int - :keyword copy_source_error_code: - :paramtype copy_source_error_code: str - :keyword copy_source_error_message: - :paramtype copy_source_error_message: str - """ - super().__init__(**kwargs) - self.message = message - self.copy_source_status_code = copy_source_status_code - self.copy_source_error_code = copy_source_error_code - self.copy_source_error_message = copy_source_error_message - - -class StorageServiceProperties(_serialization.Model): - """Storage Service Properties. - - :ivar logging: Azure Analytics Logging settings. - :vartype logging: ~azure.storage.blob.models.Logging - :ivar hour_metrics: a summary of request statistics grouped by API in hour or minute aggregates - for blobs. - :vartype hour_metrics: ~azure.storage.blob.models.Metrics - :ivar minute_metrics: a summary of request statistics grouped by API in hour or minute - aggregates for blobs. - :vartype minute_metrics: ~azure.storage.blob.models.Metrics - :ivar cors: The set of CORS rules. - :vartype cors: list[~azure.storage.blob.models.CorsRule] - :ivar default_service_version: The default version to use for requests to the Blob service if - an incoming request's version is not specified. Possible values include version 2008-10-27 and - all more recent versions. - :vartype default_service_version: str - :ivar delete_retention_policy: the retention policy which determines how long the associated - data should persist. - :vartype delete_retention_policy: ~azure.storage.blob.models.RetentionPolicy - :ivar static_website: The properties that enable an account to host a static website. - :vartype static_website: ~azure.storage.blob.models.StaticWebsite - """ - - _attribute_map = { - "logging": {"key": "Logging", "type": "Logging"}, - "hour_metrics": {"key": "HourMetrics", "type": "Metrics"}, - "minute_metrics": {"key": "MinuteMetrics", "type": "Metrics"}, - "cors": {"key": "Cors", "type": "[CorsRule]", "xml": {"wrapped": True}}, - "default_service_version": {"key": "DefaultServiceVersion", "type": "str"}, - "delete_retention_policy": {"key": "DeleteRetentionPolicy", "type": "RetentionPolicy"}, - "static_website": {"key": "StaticWebsite", "type": "StaticWebsite"}, - } - - def __init__( - self, - *, - logging: Optional["_models.Logging"] = None, - hour_metrics: Optional["_models.Metrics"] = None, - minute_metrics: Optional["_models.Metrics"] = None, - cors: Optional[list["_models.CorsRule"]] = None, - default_service_version: Optional[str] = None, - delete_retention_policy: Optional["_models.RetentionPolicy"] = None, - static_website: Optional["_models.StaticWebsite"] = None, - **kwargs: Any - ) -> None: - """ - :keyword logging: Azure Analytics Logging settings. - :paramtype logging: ~azure.storage.blob.models.Logging - :keyword hour_metrics: a summary of request statistics grouped by API in hour or minute - aggregates for blobs. - :paramtype hour_metrics: ~azure.storage.blob.models.Metrics - :keyword minute_metrics: a summary of request statistics grouped by API in hour or minute - aggregates for blobs. - :paramtype minute_metrics: ~azure.storage.blob.models.Metrics - :keyword cors: The set of CORS rules. - :paramtype cors: list[~azure.storage.blob.models.CorsRule] - :keyword default_service_version: The default version to use for requests to the Blob service - if an incoming request's version is not specified. Possible values include version 2008-10-27 - and all more recent versions. - :paramtype default_service_version: str - :keyword delete_retention_policy: the retention policy which determines how long the associated - data should persist. - :paramtype delete_retention_policy: ~azure.storage.blob.models.RetentionPolicy - :keyword static_website: The properties that enable an account to host a static website. - :paramtype static_website: ~azure.storage.blob.models.StaticWebsite - """ - super().__init__(**kwargs) - self.logging = logging - self.hour_metrics = hour_metrics - self.minute_metrics = minute_metrics - self.cors = cors - self.default_service_version = default_service_version - self.delete_retention_policy = delete_retention_policy - self.static_website = static_website - - -class StorageServiceStats(_serialization.Model): - """Stats for the storage service. - - :ivar geo_replication: Geo-Replication information for the Secondary Storage Service. - :vartype geo_replication: ~azure.storage.blob.models.GeoReplication - """ - - _attribute_map = { - "geo_replication": {"key": "GeoReplication", "type": "GeoReplication"}, - } - - def __init__(self, *, geo_replication: Optional["_models.GeoReplication"] = None, **kwargs: Any) -> None: - """ - :keyword geo_replication: Geo-Replication information for the Secondary Storage Service. - :paramtype geo_replication: ~azure.storage.blob.models.GeoReplication - """ - super().__init__(**kwargs) - self.geo_replication = geo_replication - - -class UserDelegationKey(_serialization.Model): - """A user delegation key. - - All required parameters must be populated in order to send to server. - - :ivar signed_oid: The Azure Active Directory object ID in GUID format. Required. - :vartype signed_oid: str - :ivar signed_tid: The Azure Active Directory tenant ID in GUID format. Required. - :vartype signed_tid: str - :ivar signed_start: The date-time the key is active. Required. - :vartype signed_start: ~datetime.datetime - :ivar signed_expiry: The date-time the key expires. Required. - :vartype signed_expiry: ~datetime.datetime - :ivar signed_service: Abbreviation of the Azure Storage service that accepts the key. Required. - :vartype signed_service: str - :ivar signed_version: The service version that created the key. Required. - :vartype signed_version: str - :ivar signed_delegated_user_tid: The delegated user tenant id in Azure AD. Return if - DelegatedUserTid is specified. - :vartype signed_delegated_user_tid: str - :ivar value: The key as a base64 string. Required. - :vartype value: str - """ - - _validation = { - "signed_oid": {"required": True}, - "signed_tid": {"required": True}, - "signed_start": {"required": True}, - "signed_expiry": {"required": True}, - "signed_service": {"required": True}, - "signed_version": {"required": True}, - "value": {"required": True}, - } - - _attribute_map = { - "signed_oid": {"key": "SignedOid", "type": "str"}, - "signed_tid": {"key": "SignedTid", "type": "str"}, - "signed_start": {"key": "SignedStart", "type": "iso-8601"}, - "signed_expiry": {"key": "SignedExpiry", "type": "iso-8601"}, - "signed_service": {"key": "SignedService", "type": "str"}, - "signed_version": {"key": "SignedVersion", "type": "str"}, - "signed_delegated_user_tid": {"key": "SignedDelegatedUserTid", "type": "str"}, - "value": {"key": "Value", "type": "str"}, - } - - def __init__( - self, - *, - signed_oid: str, - signed_tid: str, - signed_start: datetime.datetime, - signed_expiry: datetime.datetime, - signed_service: str, - signed_version: str, - value: str, - signed_delegated_user_tid: Optional[str] = None, - **kwargs: Any - ) -> None: - """ - :keyword signed_oid: The Azure Active Directory object ID in GUID format. Required. - :paramtype signed_oid: str - :keyword signed_tid: The Azure Active Directory tenant ID in GUID format. Required. - :paramtype signed_tid: str - :keyword signed_start: The date-time the key is active. Required. - :paramtype signed_start: ~datetime.datetime - :keyword signed_expiry: The date-time the key expires. Required. - :paramtype signed_expiry: ~datetime.datetime - :keyword signed_service: Abbreviation of the Azure Storage service that accepts the key. - Required. - :paramtype signed_service: str - :keyword signed_version: The service version that created the key. Required. - :paramtype signed_version: str - :keyword signed_delegated_user_tid: The delegated user tenant id in Azure AD. Return if - DelegatedUserTid is specified. - :paramtype signed_delegated_user_tid: str - :keyword value: The key as a base64 string. Required. - :paramtype value: str - """ - super().__init__(**kwargs) - self.signed_oid = signed_oid - self.signed_tid = signed_tid - self.signed_start = signed_start - self.signed_expiry = signed_expiry - self.signed_service = signed_service - self.signed_version = signed_version - self.signed_delegated_user_tid = signed_delegated_user_tid - self.value = value diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_patch.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_patch.py deleted file mode 100644 index f7dd32510333..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/models/_patch.py +++ /dev/null @@ -1,20 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -"""Customize generated code here. - -Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize -""" -from typing import List - -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level - - -def patch_sdk(): - """Do not remove from this file. - - `patch_sdk` is a last resort escape hatch that allows you to do customizations - you can't accomplish using the techniques described in - https://aka.ms/azsdk/python/dpcodegen/python/customize - """ diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_append_blob_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_append_blob_operations.py deleted file mode 100644 index 70a3ddb8178f..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_append_blob_operations.py +++ /dev/null @@ -1,1157 +0,0 @@ -# pylint: disable=line-too-long,useless-suppression,too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -from collections.abc import MutableMapping -import datetime -from typing import Any, Callable, IO, Literal, Optional, TypeVar, Union - -from azure.core import PipelineClient -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - map_error, -) -from azure.core.pipeline import PipelineResponse -from azure.core.rest import HttpRequest, HttpResponse -from azure.core.tracing.decorator import distributed_trace -from azure.core.utils import case_insensitive_dict - -from .. import models as _models -from .._configuration import AzureBlobStorageConfiguration -from .._utils.serialization import Deserializer, Serializer - -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, dict[str, Any]], Any]] - -_SERIALIZER = Serializer() -_SERIALIZER.client_side_validation = False - - -def build_create_request( # pylint: disable=too-many-locals - url: str, - *, - content_length: int, - version: str, - timeout: Optional[int] = None, - blob_content_type: Optional[str] = None, - blob_content_encoding: Optional[str] = None, - blob_content_language: Optional[str] = None, - blob_content_md5: Optional[bytes] = None, - blob_cache_control: Optional[str] = None, - metadata: Optional[dict[str, str]] = None, - lease_id: Optional[str] = None, - blob_content_disposition: Optional[str] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - blob_type: Literal["AppendBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "AppendBlob")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-blob-type"] = _SERIALIZER.header("blob_type", blob_type, "str") - _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") - if blob_content_type is not None: - _headers["x-ms-blob-content-type"] = _SERIALIZER.header("blob_content_type", blob_content_type, "str") - if blob_content_encoding is not None: - _headers["x-ms-blob-content-encoding"] = _SERIALIZER.header( - "blob_content_encoding", blob_content_encoding, "str" - ) - if blob_content_language is not None: - _headers["x-ms-blob-content-language"] = _SERIALIZER.header( - "blob_content_language", blob_content_language, "str" - ) - if blob_content_md5 is not None: - _headers["x-ms-blob-content-md5"] = _SERIALIZER.header("blob_content_md5", blob_content_md5, "bytearray") - if blob_cache_control is not None: - _headers["x-ms-blob-cache-control"] = _SERIALIZER.header("blob_cache_control", blob_cache_control, "str") - if metadata is not None: - _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "{str}") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if blob_content_disposition is not None: - _headers["x-ms-blob-content-disposition"] = _SERIALIZER.header( - "blob_content_disposition", blob_content_disposition, "str" - ) - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if blob_tags_string is not None: - _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") - if immutability_policy_expiry is not None: - _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header( - "immutability_policy_expiry", immutability_policy_expiry, "rfc-1123" - ) - if immutability_policy_mode is not None: - _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( - "immutability_policy_mode", immutability_policy_mode, "str" - ) - if legal_hold is not None: - _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_append_block_request( # pylint: disable=too-many-locals - url: str, - *, - content_length: int, - content: IO[bytes], - version: str, - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - lease_id: Optional[str] = None, - max_size: Optional[int] = None, - append_position: Optional[int] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - structured_body_type: Optional[str] = None, - structured_content_length: Optional[int] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["appendblock"] = kwargs.pop("comp", _params.pop("comp", "appendblock")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") - if transactional_content_md5 is not None: - _headers["Content-MD5"] = _SERIALIZER.header( - "transactional_content_md5", transactional_content_md5, "bytearray" - ) - if transactional_content_crc64 is not None: - _headers["x-ms-content-crc64"] = _SERIALIZER.header( - "transactional_content_crc64", transactional_content_crc64, "bytearray" - ) - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if max_size is not None: - _headers["x-ms-blob-condition-maxsize"] = _SERIALIZER.header("max_size", max_size, "int") - if append_position is not None: - _headers["x-ms-blob-condition-appendpos"] = _SERIALIZER.header("append_position", append_position, "int") - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if structured_body_type is not None: - _headers["x-ms-structured-body"] = _SERIALIZER.header("structured_body_type", structured_body_type, "str") - if structured_content_length is not None: - _headers["x-ms-structured-content-length"] = _SERIALIZER.header( - "structured_content_length", structured_content_length, "int" - ) - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, content=content, **kwargs) - - -def build_append_block_from_url_request( # pylint: disable=too-many-locals,too-many-statements,too-many-branches - url: str, - *, - source_url: str, - content_length: int, - version: str, - source_range: Optional[str] = None, - source_content_md5: Optional[bytes] = None, - source_contentcrc64: Optional[bytes] = None, - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - lease_id: Optional[str] = None, - max_size: Optional[int] = None, - append_position: Optional[int] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - source_if_modified_since: Optional[datetime.datetime] = None, - source_if_unmodified_since: Optional[datetime.datetime] = None, - source_if_match: Optional[str] = None, - source_if_none_match: Optional[str] = None, - request_id_parameter: Optional[str] = None, - copy_source_authorization: Optional[str] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - source_encryption_key: Optional[str] = None, - source_encryption_key_sha256: Optional[str] = None, - source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["appendblock"] = kwargs.pop("comp", _params.pop("comp", "appendblock")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-copy-source"] = _SERIALIZER.header("source_url", source_url, "str") - if source_range is not None: - _headers["x-ms-source-range"] = _SERIALIZER.header("source_range", source_range, "str") - if source_content_md5 is not None: - _headers["x-ms-source-content-md5"] = _SERIALIZER.header("source_content_md5", source_content_md5, "bytearray") - if source_contentcrc64 is not None: - _headers["x-ms-source-content-crc64"] = _SERIALIZER.header( - "source_contentcrc64", source_contentcrc64, "bytearray" - ) - _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") - if transactional_content_md5 is not None: - _headers["Content-MD5"] = _SERIALIZER.header( - "transactional_content_md5", transactional_content_md5, "bytearray" - ) - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if max_size is not None: - _headers["x-ms-blob-condition-maxsize"] = _SERIALIZER.header("max_size", max_size, "int") - if append_position is not None: - _headers["x-ms-blob-condition-appendpos"] = _SERIALIZER.header("append_position", append_position, "int") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - if source_if_modified_since is not None: - _headers["x-ms-source-if-modified-since"] = _SERIALIZER.header( - "source_if_modified_since", source_if_modified_since, "rfc-1123" - ) - if source_if_unmodified_since is not None: - _headers["x-ms-source-if-unmodified-since"] = _SERIALIZER.header( - "source_if_unmodified_since", source_if_unmodified_since, "rfc-1123" - ) - if source_if_match is not None: - _headers["x-ms-source-if-match"] = _SERIALIZER.header("source_if_match", source_if_match, "str") - if source_if_none_match is not None: - _headers["x-ms-source-if-none-match"] = _SERIALIZER.header("source_if_none_match", source_if_none_match, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if copy_source_authorization is not None: - _headers["x-ms-copy-source-authorization"] = _SERIALIZER.header( - "copy_source_authorization", copy_source_authorization, "str" - ) - if file_request_intent is not None: - _headers["x-ms-file-request-intent"] = _SERIALIZER.header("file_request_intent", file_request_intent, "str") - if source_encryption_key is not None: - _headers["x-ms-source-encryption-key"] = _SERIALIZER.header( - "source_encryption_key", source_encryption_key, "str" - ) - if source_encryption_key_sha256 is not None: - _headers["x-ms-source-encryption-key-sha256"] = _SERIALIZER.header( - "source_encryption_key_sha256", source_encryption_key_sha256, "str" - ) - if source_encryption_algorithm is not None: - _headers["x-ms-source-encryption-algorithm"] = _SERIALIZER.header( - "source_encryption_algorithm", source_encryption_algorithm, "str" - ) - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_seal_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_id: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - append_position: Optional[int] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["seal"] = kwargs.pop("comp", _params.pop("comp", "seal")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if append_position is not None: - _headers["x-ms-blob-condition-appendpos"] = _SERIALIZER.header("append_position", append_position, "int") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -class AppendBlobOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.storage.blob.AzureBlobStorage`'s - :attr:`append_blob` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: AzureBlobStorageConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace - def create( # pylint: disable=inconsistent-return-statements,too-many-locals - self, - content_length: int, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - blob_http_headers: Optional[_models.BlobHTTPHeaders] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Create Append Blob operation creates a new append blob. - - :param content_length: The length of the request. Required. - :type content_length: int - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param legal_hold: Specified if a legal hold should be set on the blob. Default value is None. - :type legal_hold: bool - :param blob_http_headers: Parameter group. Default value is None. - :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - blob_type: Literal["AppendBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "AppendBlob")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _blob_content_type = None - _blob_content_encoding = None - _blob_content_language = None - _blob_content_md5 = None - _blob_cache_control = None - _lease_id = None - _blob_content_disposition = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if blob_http_headers is not None: - _blob_cache_control = blob_http_headers.blob_cache_control - _blob_content_disposition = blob_http_headers.blob_content_disposition - _blob_content_encoding = blob_http_headers.blob_content_encoding - _blob_content_language = blob_http_headers.blob_content_language - _blob_content_md5 = blob_http_headers.blob_content_md5 - _blob_content_type = blob_http_headers.blob_content_type - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_create_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - timeout=timeout, - blob_content_type=_blob_content_type, - blob_content_encoding=_blob_content_encoding, - blob_content_language=_blob_content_language, - blob_content_md5=_blob_content_md5, - blob_cache_control=_blob_cache_control, - metadata=metadata, - lease_id=_lease_id, - blob_content_disposition=_blob_content_disposition, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - blob_tags_string=blob_tags_string, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - legal_hold=legal_hold, - blob_type=blob_type, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def append_block( # pylint: disable=inconsistent-return-statements,too-many-locals - self, - content_length: int, - body: IO[bytes], - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - request_id_parameter: Optional[str] = None, - structured_body_type: Optional[str] = None, - structured_content_length: Optional[int] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - append_position_access_conditions: Optional[_models.AppendPositionAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Append Block operation commits a new block of data to the end of an existing append blob. - The Append Block operation is permitted only if the blob was created with x-ms-blob-type set to - AppendBlob. Append Block is supported only on version 2015-02-21 version or later. - - :param content_length: The length of the request. Required. - :type content_length: int - :param body: Initial data. Required. - :type body: IO[bytes] - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param transactional_content_crc64: Specify the transactional crc64 for the body, to be - validated by the service. Default value is None. - :type transactional_content_crc64: bytes - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param structured_body_type: Required if the request body is a structured message. Specifies - the message schema version and properties. Default value is None. - :type structured_body_type: str - :param structured_content_length: Required if the request body is a structured message. - Specifies the length of the blob/file content inside the message body. Will always be smaller - than Content-Length. Default value is None. - :type structured_content_length: int - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param append_position_access_conditions: Parameter group. Default value is None. - :type append_position_access_conditions: - ~azure.storage.blob.models.AppendPositionAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["appendblock"] = kwargs.pop("comp", _params.pop("comp", "appendblock")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _max_size = None - _append_position = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if append_position_access_conditions is not None: - _append_position = append_position_access_conditions.append_position - _max_size = append_position_access_conditions.max_size - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - _content = body - - _request = build_append_block_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - timeout=timeout, - transactional_content_md5=transactional_content_md5, - transactional_content_crc64=transactional_content_crc64, - lease_id=_lease_id, - max_size=_max_size, - append_position=_append_position, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - structured_body_type=structured_body_type, - structured_content_length=structured_content_length, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-append-offset"] = self._deserialize( - "str", response.headers.get("x-ms-blob-append-offset") - ) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-structured-body"] = self._deserialize( - "str", response.headers.get("x-ms-structured-body") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def append_block_from_url( # pylint: disable=inconsistent-return-statements,too-many-locals - self, - source_url: str, - content_length: int, - source_range: Optional[str] = None, - source_content_md5: Optional[bytes] = None, - source_contentcrc64: Optional[bytes] = None, - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - request_id_parameter: Optional[str] = None, - copy_source_authorization: Optional[str] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - append_position_access_conditions: Optional[_models.AppendPositionAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - source_modified_access_conditions: Optional[_models.SourceModifiedAccessConditions] = None, - source_cpk_info: Optional[_models.SourceCpkInfo] = None, - **kwargs: Any - ) -> None: - """The Append Block operation commits a new block of data to the end of an existing append blob - where the contents are read from a source url. The Append Block operation is permitted only if - the blob was created with x-ms-blob-type set to AppendBlob. Append Block is supported only on - version 2015-02-21 version or later. - - :param source_url: Specify a URL to the copy source. Required. - :type source_url: str - :param content_length: The length of the request. Required. - :type content_length: int - :param source_range: Bytes of source data in the specified range. Default value is None. - :type source_range: str - :param source_content_md5: Specify the md5 calculated for the range of bytes that must be read - from the copy source. Default value is None. - :type source_content_md5: bytes - :param source_contentcrc64: Specify the crc64 calculated for the range of bytes that must be - read from the copy source. Default value is None. - :type source_contentcrc64: bytes - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param copy_source_authorization: Only Bearer type is supported. Credentials should be a valid - OAuth access token to copy source. Default value is None. - :type copy_source_authorization: str - :param file_request_intent: Valid value is backup. "backup" Default value is None. - :type file_request_intent: str or ~azure.storage.blob.models.FileShareTokenIntent - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param append_position_access_conditions: Parameter group. Default value is None. - :type append_position_access_conditions: - ~azure.storage.blob.models.AppendPositionAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param source_modified_access_conditions: Parameter group. Default value is None. - :type source_modified_access_conditions: - ~azure.storage.blob.models.SourceModifiedAccessConditions - :param source_cpk_info: Parameter group. Default value is None. - :type source_cpk_info: ~azure.storage.blob.models.SourceCpkInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["appendblock"] = kwargs.pop("comp", _params.pop("comp", "appendblock")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _lease_id = None - _max_size = None - _append_position = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _source_if_modified_since = None - _source_if_unmodified_since = None - _source_if_match = None - _source_if_none_match = None - _source_encryption_key = None - _source_encryption_key_sha256 = None - _source_encryption_algorithm = None - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if append_position_access_conditions is not None: - _append_position = append_position_access_conditions.append_position - _max_size = append_position_access_conditions.max_size - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if source_modified_access_conditions is not None: - _source_if_match = source_modified_access_conditions.source_if_match - _source_if_modified_since = source_modified_access_conditions.source_if_modified_since - _source_if_none_match = source_modified_access_conditions.source_if_none_match - _source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since - if source_cpk_info is not None: - _source_encryption_algorithm = source_cpk_info.source_encryption_algorithm - _source_encryption_key = source_cpk_info.source_encryption_key - _source_encryption_key_sha256 = source_cpk_info.source_encryption_key_sha256 - - _request = build_append_block_from_url_request( - url=self._config.url, - source_url=source_url, - content_length=content_length, - version=self._config.version, - source_range=source_range, - source_content_md5=source_content_md5, - source_contentcrc64=source_contentcrc64, - timeout=timeout, - transactional_content_md5=transactional_content_md5, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - lease_id=_lease_id, - max_size=_max_size, - append_position=_append_position, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - source_if_modified_since=_source_if_modified_since, - source_if_unmodified_since=_source_if_unmodified_since, - source_if_match=_source_if_match, - source_if_none_match=_source_if_none_match, - request_id_parameter=request_id_parameter, - copy_source_authorization=copy_source_authorization, - file_request_intent=file_request_intent, - source_encryption_key=_source_encryption_key, - source_encryption_key_sha256=_source_encryption_key_sha256, - source_encryption_algorithm=_source_encryption_algorithm, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-append-offset"] = self._deserialize( - "str", response.headers.get("x-ms-blob-append-offset") - ) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def seal( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - append_position_access_conditions: Optional[_models.AppendPositionAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Seal operation seals the Append Blob to make it read-only. Seal is supported only on - version 2019-12-12 version or later. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param append_position_access_conditions: Parameter group. Default value is None. - :type append_position_access_conditions: - ~azure.storage.blob.models.AppendPositionAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["seal"] = kwargs.pop("comp", _params.pop("comp", "seal")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _append_position = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if append_position_access_conditions is not None: - _append_position = append_position_access_conditions.append_position - - _request = build_seal_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - append_position=_append_position, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_blob_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_blob_operations.py deleted file mode 100644 index cb8e18ed1e0d..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_blob_operations.py +++ /dev/null @@ -1,4773 +0,0 @@ -# pylint: disable=line-too-long,useless-suppression,too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -from collections.abc import MutableMapping -import datetime -from typing import Any, Callable, Iterator, Literal, Optional, TypeVar, Union - -from azure.core import PipelineClient -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - StreamClosedError, - StreamConsumedError, - map_error, -) -from azure.core.pipeline import PipelineResponse -from azure.core.rest import HttpRequest, HttpResponse -from azure.core.tracing.decorator import distributed_trace -from azure.core.utils import case_insensitive_dict - -from .. import models as _models -from .._configuration import AzureBlobStorageConfiguration -from .._utils.serialization import Deserializer, Serializer - -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, dict[str, Any]], Any]] - -_SERIALIZER = Serializer() -_SERIALIZER.client_side_validation = False - - -def build_download_request( - url: str, - *, - version: str, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - timeout: Optional[int] = None, - range: Optional[str] = None, - lease_id: Optional[str] = None, - range_get_content_md5: Optional[bool] = None, - range_get_content_crc64: Optional[bool] = None, - structured_body_type: Optional[str] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - if snapshot is not None: - _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") - if version_id is not None: - _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if range is not None: - _headers["x-ms-range"] = _SERIALIZER.header("range", range, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if range_get_content_md5 is not None: - _headers["x-ms-range-get-content-md5"] = _SERIALIZER.header( - "range_get_content_md5", range_get_content_md5, "bool" - ) - if range_get_content_crc64 is not None: - _headers["x-ms-range-get-content-crc64"] = _SERIALIZER.header( - "range_get_content_crc64", range_get_content_crc64, "bool" - ) - if structured_body_type is not None: - _headers["x-ms-structured-body"] = _SERIALIZER.header("structured_body_type", structured_body_type, "str") - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_get_properties_request( - url: str, - *, - version: str, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - timeout: Optional[int] = None, - lease_id: Optional[str] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - if snapshot is not None: - _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") - if version_id is not None: - _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="HEAD", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_delete_request( - url: str, - *, - version: str, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - timeout: Optional[int] = None, - lease_id: Optional[str] = None, - delete_snapshots: Optional[Union[str, _models.DeleteSnapshotsOptionType]] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - blob_delete_type: Literal["Permanent"] = "Permanent", - access_tier_if_modified_since: Optional[datetime.datetime] = None, - access_tier_if_unmodified_since: Optional[datetime.datetime] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - if snapshot is not None: - _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") - if version_id is not None: - _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - if blob_delete_type is not None: - _params["deletetype"] = _SERIALIZER.query("blob_delete_type", blob_delete_type, "str") - - # Construct headers - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if delete_snapshots is not None: - _headers["x-ms-delete-snapshots"] = _SERIALIZER.header("delete_snapshots", delete_snapshots, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if access_tier_if_modified_since is not None: - _headers["x-ms-access-tier-if-modified-since"] = _SERIALIZER.header( - "access_tier_if_modified_since", access_tier_if_modified_since, "rfc-1123" - ) - if access_tier_if_unmodified_since is not None: - _headers["x-ms-access-tier-if-unmodified-since"] = _SERIALIZER.header( - "access_tier_if_unmodified_since", access_tier_if_unmodified_since, "rfc-1123" - ) - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_undelete_request( - url: str, *, version: str, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["undelete"] = kwargs.pop("comp", _params.pop("comp", "undelete")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_set_expiry_request( - url: str, - *, - expiry_options: Union[str, _models.BlobExpiryOptions], - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - expires_on: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["expiry"] = kwargs.pop("comp", _params.pop("comp", "expiry")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["x-ms-expiry-option"] = _SERIALIZER.header("expiry_options", expiry_options, "str") - if expires_on is not None: - _headers["x-ms-expiry-time"] = _SERIALIZER.header("expires_on", expires_on, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_set_http_headers_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - blob_cache_control: Optional[str] = None, - blob_content_type: Optional[str] = None, - blob_content_md5: Optional[bytes] = None, - blob_content_encoding: Optional[str] = None, - blob_content_language: Optional[str] = None, - lease_id: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - blob_content_disposition: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if blob_cache_control is not None: - _headers["x-ms-blob-cache-control"] = _SERIALIZER.header("blob_cache_control", blob_cache_control, "str") - if blob_content_type is not None: - _headers["x-ms-blob-content-type"] = _SERIALIZER.header("blob_content_type", blob_content_type, "str") - if blob_content_md5 is not None: - _headers["x-ms-blob-content-md5"] = _SERIALIZER.header("blob_content_md5", blob_content_md5, "bytearray") - if blob_content_encoding is not None: - _headers["x-ms-blob-content-encoding"] = _SERIALIZER.header( - "blob_content_encoding", blob_content_encoding, "str" - ) - if blob_content_language is not None: - _headers["x-ms-blob-content-language"] = _SERIALIZER.header( - "blob_content_language", blob_content_language, "str" - ) - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - if blob_content_disposition is not None: - _headers["x-ms-blob-content-disposition"] = _SERIALIZER.header( - "blob_content_disposition", blob_content_disposition, "str" - ) - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_set_immutability_policy_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["immutabilityPolicies"] = kwargs.pop("comp", _params.pop("comp", "immutabilityPolicies")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - if snapshot is not None: - _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") - if version_id is not None: - _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if immutability_policy_expiry is not None: - _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header( - "immutability_policy_expiry", immutability_policy_expiry, "rfc-1123" - ) - if immutability_policy_mode is not None: - _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( - "immutability_policy_mode", immutability_policy_mode, "str" - ) - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_delete_immutability_policy_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["immutabilityPolicies"] = kwargs.pop("comp", _params.pop("comp", "immutabilityPolicies")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - if snapshot is not None: - _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") - if version_id is not None: - _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_set_legal_hold_request( - url: str, - *, - legal_hold: bool, - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["legalhold"] = kwargs.pop("comp", _params.pop("comp", "legalhold")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - if snapshot is not None: - _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") - if version_id is not None: - _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_set_metadata_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - lease_id: Optional[str] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["metadata"] = kwargs.pop("comp", _params.pop("comp", "metadata")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if metadata is not None: - _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "{str}") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_acquire_lease_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - duration: Optional[int] = None, - proposed_lease_id: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["acquire"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "acquire")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") - if duration is not None: - _headers["x-ms-lease-duration"] = _SERIALIZER.header("duration", duration, "int") - if proposed_lease_id is not None: - _headers["x-ms-proposed-lease-id"] = _SERIALIZER.header("proposed_lease_id", proposed_lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_release_lease_request( - url: str, - *, - lease_id: str, - version: str, - timeout: Optional[int] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["release"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "release")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_renew_lease_request( - url: str, - *, - lease_id: str, - version: str, - timeout: Optional[int] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["renew"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "renew")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_change_lease_request( - url: str, - *, - lease_id: str, - proposed_lease_id: str, - version: str, - timeout: Optional[int] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["change"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "change")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - _headers["x-ms-proposed-lease-id"] = _SERIALIZER.header("proposed_lease_id", proposed_lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_break_lease_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - break_period: Optional[int] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["break"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "break")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") - if break_period is not None: - _headers["x-ms-lease-break-period"] = _SERIALIZER.header("break_period", break_period, "int") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_create_snapshot_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - lease_id: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["snapshot"] = kwargs.pop("comp", _params.pop("comp", "snapshot")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if metadata is not None: - _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "{str}") - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_start_copy_from_url_request( # pylint: disable=too-many-locals - url: str, - *, - copy_source: str, - version: str, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - rehydrate_priority: Optional[Union[str, _models.RehydratePriority]] = None, - source_if_modified_since: Optional[datetime.datetime] = None, - source_if_unmodified_since: Optional[datetime.datetime] = None, - source_if_match: Optional[str] = None, - source_if_none_match: Optional[str] = None, - source_if_tags: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - lease_id: Optional[str] = None, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - seal_blob: Optional[bool] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if metadata is not None: - _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "{str}") - if tier is not None: - _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") - if rehydrate_priority is not None: - _headers["x-ms-rehydrate-priority"] = _SERIALIZER.header("rehydrate_priority", rehydrate_priority, "str") - if source_if_modified_since is not None: - _headers["x-ms-source-if-modified-since"] = _SERIALIZER.header( - "source_if_modified_since", source_if_modified_since, "rfc-1123" - ) - if source_if_unmodified_since is not None: - _headers["x-ms-source-if-unmodified-since"] = _SERIALIZER.header( - "source_if_unmodified_since", source_if_unmodified_since, "rfc-1123" - ) - if source_if_match is not None: - _headers["x-ms-source-if-match"] = _SERIALIZER.header("source_if_match", source_if_match, "str") - if source_if_none_match is not None: - _headers["x-ms-source-if-none-match"] = _SERIALIZER.header("source_if_none_match", source_if_none_match, "str") - if source_if_tags is not None: - _headers["x-ms-source-if-tags"] = _SERIALIZER.header("source_if_tags", source_if_tags, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-copy-source"] = _SERIALIZER.header("copy_source", copy_source, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if blob_tags_string is not None: - _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") - if seal_blob is not None: - _headers["x-ms-seal-blob"] = _SERIALIZER.header("seal_blob", seal_blob, "bool") - if immutability_policy_expiry is not None: - _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header( - "immutability_policy_expiry", immutability_policy_expiry, "rfc-1123" - ) - if immutability_policy_mode is not None: - _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( - "immutability_policy_mode", immutability_policy_mode, "str" - ) - if legal_hold is not None: - _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_copy_from_url_request( # pylint: disable=too-many-locals - url: str, - *, - copy_source: str, - version: str, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - source_if_modified_since: Optional[datetime.datetime] = None, - source_if_unmodified_since: Optional[datetime.datetime] = None, - source_if_match: Optional[str] = None, - source_if_none_match: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - lease_id: Optional[str] = None, - request_id_parameter: Optional[str] = None, - source_content_md5: Optional[bytes] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - copy_source_authorization: Optional[str] = None, - encryption_scope: Optional[str] = None, - copy_source_tags: Optional[Union[str, _models.BlobCopySourceTags]] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - x_ms_requires_sync: Literal["true"] = kwargs.pop("x_ms_requires_sync", _headers.pop("x-ms-requires-sync", "true")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-requires-sync"] = _SERIALIZER.header("x_ms_requires_sync", x_ms_requires_sync, "str") - if metadata is not None: - _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "{str}") - if tier is not None: - _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") - if source_if_modified_since is not None: - _headers["x-ms-source-if-modified-since"] = _SERIALIZER.header( - "source_if_modified_since", source_if_modified_since, "rfc-1123" - ) - if source_if_unmodified_since is not None: - _headers["x-ms-source-if-unmodified-since"] = _SERIALIZER.header( - "source_if_unmodified_since", source_if_unmodified_since, "rfc-1123" - ) - if source_if_match is not None: - _headers["x-ms-source-if-match"] = _SERIALIZER.header("source_if_match", source_if_match, "str") - if source_if_none_match is not None: - _headers["x-ms-source-if-none-match"] = _SERIALIZER.header("source_if_none_match", source_if_none_match, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-copy-source"] = _SERIALIZER.header("copy_source", copy_source, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if source_content_md5 is not None: - _headers["x-ms-source-content-md5"] = _SERIALIZER.header("source_content_md5", source_content_md5, "bytearray") - if blob_tags_string is not None: - _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") - if immutability_policy_expiry is not None: - _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header( - "immutability_policy_expiry", immutability_policy_expiry, "rfc-1123" - ) - if immutability_policy_mode is not None: - _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( - "immutability_policy_mode", immutability_policy_mode, "str" - ) - if legal_hold is not None: - _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") - if copy_source_authorization is not None: - _headers["x-ms-copy-source-authorization"] = _SERIALIZER.header( - "copy_source_authorization", copy_source_authorization, "str" - ) - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if copy_source_tags is not None: - _headers["x-ms-copy-source-tag-option"] = _SERIALIZER.header("copy_source_tags", copy_source_tags, "str") - if file_request_intent is not None: - _headers["x-ms-file-request-intent"] = _SERIALIZER.header("file_request_intent", file_request_intent, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_abort_copy_from_url_request( - url: str, - *, - copy_id: str, - version: str, - timeout: Optional[int] = None, - lease_id: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["copy"] = kwargs.pop("comp", _params.pop("comp", "copy")) - copy_action_abort_constant: Literal["abort"] = kwargs.pop( - "copy_action_abort_constant", _headers.pop("x-ms-copy-action", "abort") - ) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - _params["copyid"] = _SERIALIZER.query("copy_id", copy_id, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-copy-action"] = _SERIALIZER.header("copy_action_abort_constant", copy_action_abort_constant, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_set_tier_request( - url: str, - *, - tier: Union[str, _models.AccessTierRequired], - version: str, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - timeout: Optional[int] = None, - rehydrate_priority: Optional[Union[str, _models.RehydratePriority]] = None, - request_id_parameter: Optional[str] = None, - lease_id: Optional[str] = None, - if_tags: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["tier"] = kwargs.pop("comp", _params.pop("comp", "tier")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if snapshot is not None: - _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") - if version_id is not None: - _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") - if rehydrate_priority is not None: - _headers["x-ms-rehydrate-priority"] = _SERIALIZER.header("rehydrate_priority", rehydrate_priority, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_get_account_info_request( - url: str, *, version: str, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["account"] = kwargs.pop("restype", _params.pop("restype", "account")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_query_request( - url: str, - *, - version: str, - snapshot: Optional[str] = None, - timeout: Optional[int] = None, - lease_id: Optional[str] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - content: Any = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["query"] = kwargs.pop("comp", _params.pop("comp", "query")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if snapshot is not None: - _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, content=content, **kwargs) - - -def build_get_tags_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - if_tags: Optional[str] = None, - lease_id: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["tags"] = kwargs.pop("comp", _params.pop("comp", "tags")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - if snapshot is not None: - _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") - if version_id is not None: - _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_modified_since is not None: - _headers["x-ms-blob-if-modified-since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["x-ms-blob-if-unmodified-since"] = _SERIALIZER.header( - "if_unmodified_since", if_unmodified_since, "rfc-1123" - ) - if if_match is not None: - _headers["x-ms-blob-if-match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["x-ms-blob-if-none-match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_set_tags_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - version_id: Optional[str] = None, - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - request_id_parameter: Optional[str] = None, - if_tags: Optional[str] = None, - lease_id: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - content: Any = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["tags"] = kwargs.pop("comp", _params.pop("comp", "tags")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - if version_id is not None: - _params["versionid"] = _SERIALIZER.query("version_id", version_id, "str") - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if transactional_content_md5 is not None: - _headers["Content-MD5"] = _SERIALIZER.header( - "transactional_content_md5", transactional_content_md5, "bytearray" - ) - if transactional_content_crc64 is not None: - _headers["x-ms-content-crc64"] = _SERIALIZER.header( - "transactional_content_crc64", transactional_content_crc64, "bytearray" - ) - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_modified_since is not None: - _headers["x-ms-blob-if-modified-since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["x-ms-blob-if-unmodified-since"] = _SERIALIZER.header( - "if_unmodified_since", if_unmodified_since, "rfc-1123" - ) - if if_match is not None: - _headers["x-ms-blob-if-match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["x-ms-blob-if-none-match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, content=content, **kwargs) - - -class BlobOperations: # pylint: disable=too-many-public-methods - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.storage.blob.AzureBlobStorage`'s - :attr:`blob` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: AzureBlobStorageConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace - def download( - self, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - timeout: Optional[int] = None, - range: Optional[str] = None, - range_get_content_md5: Optional[bool] = None, - range_get_content_crc64: Optional[bool] = None, - structured_body_type: Optional[str] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> Iterator[bytes]: - """The Download operation reads or downloads a blob from the system, including its metadata and - properties. You can also call Download to read a snapshot. - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param range: Return only the bytes of the blob in the specified range. Default value is None. - :type range: str - :param range_get_content_md5: When set to true and specified together with the Range, the - service returns the MD5 hash for the range, as long as the range is less than or equal to 4 MB - in size. Default value is None. - :type range_get_content_md5: bool - :param range_get_content_crc64: When set to true and specified together with the Range, the - service returns the CRC64 hash for the range, as long as the range is less than or equal to 4 - MB in size. Default value is None. - :type range_get_content_crc64: bool - :param structured_body_type: Specifies the response content should be returned as a structured - message and specifies the message schema version and properties. Default value is None. - :type structured_body_type: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: Iterator[bytes] or the result of cls(response) - :rtype: Iterator[bytes] - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_download_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - version_id=version_id, - timeout=timeout, - range=range, - lease_id=_lease_id, - range_get_content_md5=range_get_content_md5, - range_get_content_crc64=range_get_content_crc64, - structured_body_type=structured_body_type, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _decompress = kwargs.pop("decompress", True) - _stream = True - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 206]: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - if response.status_code == 200: - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-creation-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-creation-time") - ) - response_headers["x-ms-meta"] = self._deserialize("{str}", response.headers.get("x-ms-meta")) - response_headers["x-ms-or-policy-id"] = self._deserialize("str", response.headers.get("x-ms-or-policy-id")) - response_headers["x-ms-or"] = self._deserialize("{str}", response.headers.get("x-ms-or")) - response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) - response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) - response_headers["Content-Disposition"] = self._deserialize( - "str", response.headers.get("Content-Disposition") - ) - response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) - response_headers["x-ms-copy-completion-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-copy-completion-time") - ) - response_headers["x-ms-copy-status-description"] = self._deserialize( - "str", response.headers.get("x-ms-copy-status-description") - ) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-progress"] = self._deserialize( - "str", response.headers.get("x-ms-copy-progress") - ) - response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - response_headers["x-ms-lease-duration"] = self._deserialize( - "str", response.headers.get("x-ms-lease-duration") - ) - response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) - response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["x-ms-is-current-version"] = self._deserialize( - "bool", response.headers.get("x-ms-is-current-version") - ) - response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-blob-content-md5"] = self._deserialize( - "bytearray", response.headers.get("x-ms-blob-content-md5") - ) - response_headers["x-ms-tag-count"] = self._deserialize("int", response.headers.get("x-ms-tag-count")) - response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) - response_headers["x-ms-last-access-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-last-access-time") - ) - response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") - ) - response_headers["x-ms-immutability-policy-mode"] = self._deserialize( - "str", response.headers.get("x-ms-immutability-policy-mode") - ) - response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) - response_headers["x-ms-structured-body"] = self._deserialize( - "str", response.headers.get("x-ms-structured-body") - ) - response_headers["x-ms-structured-content-length"] = self._deserialize( - "int", response.headers.get("x-ms-structured-content-length") - ) - - if response.status_code == 206: - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-creation-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-creation-time") - ) - response_headers["x-ms-meta"] = self._deserialize("{str}", response.headers.get("x-ms-meta")) - response_headers["x-ms-or-policy-id"] = self._deserialize("str", response.headers.get("x-ms-or-policy-id")) - response_headers["x-ms-or"] = self._deserialize("{str}", response.headers.get("x-ms-or")) - response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) - response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) - response_headers["Content-Disposition"] = self._deserialize( - "str", response.headers.get("Content-Disposition") - ) - response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-copy-completion-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-copy-completion-time") - ) - response_headers["x-ms-copy-status-description"] = self._deserialize( - "str", response.headers.get("x-ms-copy-status-description") - ) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-progress"] = self._deserialize( - "str", response.headers.get("x-ms-copy-progress") - ) - response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - response_headers["x-ms-lease-duration"] = self._deserialize( - "str", response.headers.get("x-ms-lease-duration") - ) - response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) - response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["x-ms-is-current-version"] = self._deserialize( - "bool", response.headers.get("x-ms-is-current-version") - ) - response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-blob-content-md5"] = self._deserialize( - "bytearray", response.headers.get("x-ms-blob-content-md5") - ) - response_headers["x-ms-tag-count"] = self._deserialize("int", response.headers.get("x-ms-tag-count")) - response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) - response_headers["x-ms-last-access-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-last-access-time") - ) - response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") - ) - response_headers["x-ms-immutability-policy-mode"] = self._deserialize( - "str", response.headers.get("x-ms-immutability-policy-mode") - ) - response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) - response_headers["x-ms-structured-body"] = self._deserialize( - "str", response.headers.get("x-ms-structured-body") - ) - response_headers["x-ms-structured-content-length"] = self._deserialize( - "int", response.headers.get("x-ms-structured-content-length") - ) - - deserialized = response.stream_download(self._client._pipeline, decompress=_decompress) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def get_properties( # pylint: disable=inconsistent-return-statements - self, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Get Properties operation returns all user-defined metadata, standard HTTP properties, and - system properties for the blob. It does not return the content of the blob. - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_get_properties_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - version_id=version_id, - timeout=timeout, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-creation-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-creation-time") - ) - response_headers["x-ms-meta"] = self._deserialize("{str}", response.headers.get("x-ms-meta")) - response_headers["x-ms-or-policy-id"] = self._deserialize("str", response.headers.get("x-ms-or-policy-id")) - response_headers["x-ms-or"] = self._deserialize("{str}", response.headers.get("x-ms-or")) - response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) - response_headers["x-ms-copy-completion-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-copy-completion-time") - ) - response_headers["x-ms-copy-status-description"] = self._deserialize( - "str", response.headers.get("x-ms-copy-status-description") - ) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-progress"] = self._deserialize("str", response.headers.get("x-ms-copy-progress")) - response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - response_headers["x-ms-incremental-copy"] = self._deserialize( - "bool", response.headers.get("x-ms-incremental-copy") - ) - response_headers["x-ms-copy-destination-snapshot"] = self._deserialize( - "str", response.headers.get("x-ms-copy-destination-snapshot") - ) - response_headers["x-ms-lease-duration"] = self._deserialize("str", response.headers.get("x-ms-lease-duration")) - response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) - response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) - response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) - response_headers["Content-Disposition"] = self._deserialize("str", response.headers.get("Content-Disposition")) - response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) - response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-access-tier"] = self._deserialize("str", response.headers.get("x-ms-access-tier")) - response_headers["x-ms-access-tier-inferred"] = self._deserialize( - "bool", response.headers.get("x-ms-access-tier-inferred") - ) - response_headers["x-ms-archive-status"] = self._deserialize("str", response.headers.get("x-ms-archive-status")) - response_headers["x-ms-access-tier-change-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-access-tier-change-time") - ) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["x-ms-is-current-version"] = self._deserialize( - "bool", response.headers.get("x-ms-is-current-version") - ) - response_headers["x-ms-tag-count"] = self._deserialize("int", response.headers.get("x-ms-tag-count")) - response_headers["x-ms-expiry-time"] = self._deserialize("rfc-1123", response.headers.get("x-ms-expiry-time")) - response_headers["x-ms-blob-sealed"] = self._deserialize("bool", response.headers.get("x-ms-blob-sealed")) - response_headers["x-ms-rehydrate-priority"] = self._deserialize( - "str", response.headers.get("x-ms-rehydrate-priority") - ) - response_headers["x-ms-last-access-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-last-access-time") - ) - response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") - ) - response_headers["x-ms-immutability-policy-mode"] = self._deserialize( - "str", response.headers.get("x-ms-immutability-policy-mode") - ) - response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def delete( # pylint: disable=inconsistent-return-statements - self, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - timeout: Optional[int] = None, - delete_snapshots: Optional[Union[str, _models.DeleteSnapshotsOptionType]] = None, - request_id_parameter: Optional[str] = None, - blob_delete_type: Literal["Permanent"] = "Permanent", - access_tier_if_modified_since: Optional[datetime.datetime] = None, - access_tier_if_unmodified_since: Optional[datetime.datetime] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """If the storage account's soft delete feature is disabled then, when a blob is deleted, it is - permanently removed from the storage account. If the storage account's soft delete feature is - enabled, then, when a blob is deleted, it is marked for deletion and becomes inaccessible - immediately. However, the blob service retains the blob or snapshot for the number of days - specified by the DeleteRetentionPolicy section of [Storage service properties] - (Set-Blob-Service-Properties.md). After the specified number of days has passed, the blob's - data is permanently removed from the storage account. Note that you continue to be charged for - the soft-deleted blob's storage until it is permanently removed. Use the List Blobs API and - specify the "include=deleted" query parameter to discover which blobs and snapshots have been - soft deleted. You can then use the Undelete Blob API to restore a soft-deleted blob. All other - operations on a soft-deleted blob or snapshot causes the service to return an HTTP status code - of 404 (ResourceNotFound). - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param delete_snapshots: Required if the blob has associated snapshots. Specify one of the - following two options: include: Delete the base blob and all of its snapshots. only: Delete - only the blob's snapshots and not the blob itself. Known values are: "include" and "only". - Default value is None. - :type delete_snapshots: str or ~azure.storage.blob.models.DeleteSnapshotsOptionType - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_delete_type: Optional. Only possible value is 'permanent', which specifies to - permanently delete a blob if blob soft delete is enabled. Known values are "Permanent" and - None. Default value is "Permanent". - :type blob_delete_type: str - :param access_tier_if_modified_since: Specify this header value to operate only on a blob if - the access-tier has been modified since the specified date/time. Default value is None. - :type access_tier_if_modified_since: ~datetime.datetime - :param access_tier_if_unmodified_since: Specify this header value to operate only on a blob if - the access-tier has not been modified since the specified date/time. Default value is None. - :type access_tier_if_unmodified_since: ~datetime.datetime - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_delete_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - version_id=version_id, - timeout=timeout, - lease_id=_lease_id, - delete_snapshots=delete_snapshots, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - blob_delete_type=blob_delete_type, - access_tier_if_modified_since=access_tier_if_modified_since, - access_tier_if_unmodified_since=access_tier_if_unmodified_since, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def undelete( # pylint: disable=inconsistent-return-statements - self, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any - ) -> None: - """Undelete a blob that was previously soft deleted. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["undelete"] = kwargs.pop("comp", _params.pop("comp", "undelete")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_undelete_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def set_expiry( # pylint: disable=inconsistent-return-statements - self, - expiry_options: Union[str, _models.BlobExpiryOptions], - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - expires_on: Optional[str] = None, - **kwargs: Any - ) -> None: - """Sets the time a blob will expire and be deleted. - - :param expiry_options: Required. Indicates mode of the expiry time. Known values are: - "NeverExpire", "RelativeToCreation", "RelativeToNow", and "Absolute". Required. - :type expiry_options: str or ~azure.storage.blob.models.BlobExpiryOptions - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param expires_on: The time to set the blob to expiry. Default value is None. - :type expires_on: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["expiry"] = kwargs.pop("comp", _params.pop("comp", "expiry")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_set_expiry_request( - url=self._config.url, - expiry_options=expiry_options, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - expires_on=expires_on, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def set_http_headers( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - blob_http_headers: Optional[_models.BlobHTTPHeaders] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Set HTTP Headers operation sets system properties on the blob. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_http_headers: Parameter group. Default value is None. - :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _blob_cache_control = None - _blob_content_type = None - _blob_content_md5 = None - _blob_content_encoding = None - _blob_content_language = None - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _blob_content_disposition = None - if blob_http_headers is not None: - _blob_cache_control = blob_http_headers.blob_cache_control - _blob_content_disposition = blob_http_headers.blob_content_disposition - _blob_content_encoding = blob_http_headers.blob_content_encoding - _blob_content_language = blob_http_headers.blob_content_language - _blob_content_md5 = blob_http_headers.blob_content_md5 - _blob_content_type = blob_http_headers.blob_content_type - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_set_http_headers_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - blob_cache_control=_blob_cache_control, - blob_content_type=_blob_content_type, - blob_content_md5=_blob_content_md5, - blob_content_encoding=_blob_content_encoding, - blob_content_language=_blob_content_language, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - blob_content_disposition=_blob_content_disposition, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def set_immutability_policy( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Set Immutability Policy operation sets the immutability policy on the blob. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["immutabilityPolicies"] = kwargs.pop("comp", _params.pop("comp", "immutabilityPolicies")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_unmodified_since = None - if modified_access_conditions is not None: - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_set_immutability_policy_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - if_unmodified_since=_if_unmodified_since, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - snapshot=snapshot, - version_id=version_id, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-immutability-policy-until-date"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-immutability-policy-until-date") - ) - response_headers["x-ms-immutability-policy-mode"] = self._deserialize( - "str", response.headers.get("x-ms-immutability-policy-mode") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def delete_immutability_policy( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - **kwargs: Any - ) -> None: - """The Delete Immutability Policy operation deletes the immutability policy on the blob. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["immutabilityPolicies"] = kwargs.pop("comp", _params.pop("comp", "immutabilityPolicies")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_delete_immutability_policy_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - snapshot=snapshot, - version_id=version_id, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def set_legal_hold( # pylint: disable=inconsistent-return-statements - self, - legal_hold: bool, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - **kwargs: Any - ) -> None: - """The Set Legal Hold operation sets a legal hold on the blob. - - :param legal_hold: Specified if a legal hold should be set on the blob. Required. - :type legal_hold: bool - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["legalhold"] = kwargs.pop("comp", _params.pop("comp", "legalhold")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_set_legal_hold_request( - url=self._config.url, - legal_hold=legal_hold, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - snapshot=snapshot, - version_id=version_id, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def set_metadata( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Set Blob Metadata operation sets user-defined metadata for the specified blob as one or - more name-value pairs. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["metadata"] = kwargs.pop("comp", _params.pop("comp", "metadata")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_set_metadata_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - metadata=metadata, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def acquire_lease( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - duration: Optional[int] = None, - proposed_lease_id: Optional[str] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete - operations. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param duration: Specifies the duration of the lease, in seconds, or negative one (-1) for a - lease that never expires. A non-infinite lease can be between 15 and 60 seconds. A lease - duration cannot be changed using renew or change. Default value is None. - :type duration: int - :param proposed_lease_id: Proposed lease ID, in a GUID string format. The Blob service returns - 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid - Constructor (String) for a list of valid GUID string formats. Default value is None. - :type proposed_lease_id: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["acquire"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "acquire")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_acquire_lease_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - duration=duration, - proposed_lease_id=proposed_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def release_lease( # pylint: disable=inconsistent-return-statements - self, - lease_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete - operations. - - :param lease_id: Specifies the current lease ID on the resource. Required. - :type lease_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["release"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "release")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_release_lease_request( - url=self._config.url, - lease_id=lease_id, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def renew_lease( # pylint: disable=inconsistent-return-statements - self, - lease_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete - operations. - - :param lease_id: Specifies the current lease ID on the resource. Required. - :type lease_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["renew"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "renew")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_renew_lease_request( - url=self._config.url, - lease_id=lease_id, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def change_lease( # pylint: disable=inconsistent-return-statements - self, - lease_id: str, - proposed_lease_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete - operations. - - :param lease_id: Specifies the current lease ID on the resource. Required. - :type lease_id: str - :param proposed_lease_id: Proposed lease ID, in a GUID string format. The Blob service returns - 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid - Constructor (String) for a list of valid GUID string formats. Required. - :type proposed_lease_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["change"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "change")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_change_lease_request( - url=self._config.url, - lease_id=lease_id, - proposed_lease_id=proposed_lease_id, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def break_lease( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - break_period: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete - operations. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param break_period: For a break operation, proposed duration the lease should continue before - it is broken, in seconds, between 0 and 60. This break period is only used if it is shorter - than the time remaining on the lease. If longer, the time remaining on the lease is used. A new - lease will not be available before the break period has expired, but the lease may be held for - longer than the break period. If this header does not appear with a break operation, a - fixed-duration lease breaks after the remaining lease period elapses, and an infinite lease - breaks immediately. Default value is None. - :type break_period: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - action: Literal["break"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "break")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_break_lease_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - break_period=break_period, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-time"] = self._deserialize("int", response.headers.get("x-ms-lease-time")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def create_snapshot( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - request_id_parameter: Optional[str] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Create Snapshot operation creates a read-only snapshot of a blob. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["snapshot"] = kwargs.pop("comp", _params.pop("comp", "snapshot")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _lease_id = None - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - - _request = build_create_snapshot_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - metadata=metadata, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - lease_id=_lease_id, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-snapshot"] = self._deserialize("str", response.headers.get("x-ms-snapshot")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def start_copy_from_url( # pylint: disable=inconsistent-return-statements,too-many-locals - self, - copy_source: str, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - rehydrate_priority: Optional[Union[str, _models.RehydratePriority]] = None, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - seal_blob: Optional[bool] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - source_modified_access_conditions: Optional[_models.SourceModifiedAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Start Copy From URL operation copies a blob or an internet resource to a new blob. - - :param copy_source: Specifies the name of the source page blob snapshot. This value is a URL of - up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it - would appear in a request URI. The source blob must either be public or must be authenticated - via a shared access signature. Required. - :type copy_source: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param tier: Optional. Indicates the tier to be set on the blob. Known values are: "P4", "P6", - "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", and - "Cold". Default value is None. - :type tier: str or ~azure.storage.blob.models.AccessTierOptional - :param rehydrate_priority: Optional: Indicates the priority with which to rehydrate an archived - blob. Known values are: "High" and "Standard". Default value is None. - :type rehydrate_priority: str or ~azure.storage.blob.models.RehydratePriority - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param seal_blob: Overrides the sealed state of the destination blob. Service version - 2019-12-12 and newer. Default value is None. - :type seal_blob: bool - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param legal_hold: Specified if a legal hold should be set on the blob. Default value is None. - :type legal_hold: bool - :param source_modified_access_conditions: Parameter group. Default value is None. - :type source_modified_access_conditions: - ~azure.storage.blob.models.SourceModifiedAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[None] = kwargs.pop("cls", None) - - _source_if_modified_since = None - _source_if_unmodified_since = None - _source_if_match = None - _source_if_none_match = None - _source_if_tags = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _lease_id = None - if source_modified_access_conditions is not None: - _source_if_match = source_modified_access_conditions.source_if_match - _source_if_modified_since = source_modified_access_conditions.source_if_modified_since - _source_if_none_match = source_modified_access_conditions.source_if_none_match - _source_if_tags = source_modified_access_conditions.source_if_tags - _source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - - _request = build_start_copy_from_url_request( - url=self._config.url, - copy_source=copy_source, - version=self._config.version, - timeout=timeout, - metadata=metadata, - tier=tier, - rehydrate_priority=rehydrate_priority, - source_if_modified_since=_source_if_modified_since, - source_if_unmodified_since=_source_if_unmodified_since, - source_if_match=_source_if_match, - source_if_none_match=_source_if_none_match, - source_if_tags=_source_if_tags, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - lease_id=_lease_id, - request_id_parameter=request_id_parameter, - blob_tags_string=blob_tags_string, - seal_blob=seal_blob, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - legal_hold=legal_hold, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def copy_from_url( # pylint: disable=inconsistent-return-statements,too-many-locals - self, - copy_source: str, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - request_id_parameter: Optional[str] = None, - source_content_md5: Optional[bytes] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - copy_source_authorization: Optional[str] = None, - copy_source_tags: Optional[Union[str, _models.BlobCopySourceTags]] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - source_modified_access_conditions: Optional[_models.SourceModifiedAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - **kwargs: Any - ) -> None: - """The Copy From URL operation copies a blob or an internet resource to a new blob. It will not - return a response until the copy is complete. - - :param copy_source: Specifies the name of the source page blob snapshot. This value is a URL of - up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it - would appear in a request URI. The source blob must either be public or must be authenticated - via a shared access signature. Required. - :type copy_source: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param tier: Optional. Indicates the tier to be set on the blob. Known values are: "P4", "P6", - "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", and - "Cold". Default value is None. - :type tier: str or ~azure.storage.blob.models.AccessTierOptional - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param source_content_md5: Specify the md5 calculated for the range of bytes that must be read - from the copy source. Default value is None. - :type source_content_md5: bytes - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param legal_hold: Specified if a legal hold should be set on the blob. Default value is None. - :type legal_hold: bool - :param copy_source_authorization: Only Bearer type is supported. Credentials should be a valid - OAuth access token to copy source. Default value is None. - :type copy_source_authorization: str - :param copy_source_tags: Optional, default 'replace'. Indicates if source tags should be - copied or replaced with the tags specified by x-ms-tags. Known values are: "REPLACE" and - "COPY". Default value is None. - :type copy_source_tags: str or ~azure.storage.blob.models.BlobCopySourceTags - :param file_request_intent: Valid value is backup. "backup" Default value is None. - :type file_request_intent: str or ~azure.storage.blob.models.FileShareTokenIntent - :param source_modified_access_conditions: Parameter group. Default value is None. - :type source_modified_access_conditions: - ~azure.storage.blob.models.SourceModifiedAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - x_ms_requires_sync: Literal["true"] = kwargs.pop( - "x_ms_requires_sync", _headers.pop("x-ms-requires-sync", "true") - ) - cls: ClsType[None] = kwargs.pop("cls", None) - - _source_if_modified_since = None - _source_if_unmodified_since = None - _source_if_match = None - _source_if_none_match = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _lease_id = None - _encryption_scope = None - if source_modified_access_conditions is not None: - _source_if_match = source_modified_access_conditions.source_if_match - _source_if_modified_since = source_modified_access_conditions.source_if_modified_since - _source_if_none_match = source_modified_access_conditions.source_if_none_match - _source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - - _request = build_copy_from_url_request( - url=self._config.url, - copy_source=copy_source, - version=self._config.version, - timeout=timeout, - metadata=metadata, - tier=tier, - source_if_modified_since=_source_if_modified_since, - source_if_unmodified_since=_source_if_unmodified_since, - source_if_match=_source_if_match, - source_if_none_match=_source_if_none_match, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - lease_id=_lease_id, - request_id_parameter=request_id_parameter, - source_content_md5=source_content_md5, - blob_tags_string=blob_tags_string, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - legal_hold=legal_hold, - copy_source_authorization=copy_source_authorization, - encryption_scope=_encryption_scope, - copy_source_tags=copy_source_tags, - file_request_intent=file_request_intent, - x_ms_requires_sync=x_ms_requires_sync, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def abort_copy_from_url( # pylint: disable=inconsistent-return-statements - self, - copy_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Abort Copy From URL operation aborts a pending Copy From URL operation, and leaves a - destination blob with zero length and full metadata. - - :param copy_id: The copy identifier provided in the x-ms-copy-id header of the original Copy - Blob operation. Required. - :type copy_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["copy"] = kwargs.pop("comp", _params.pop("comp", "copy")) - copy_action_abort_constant: Literal["abort"] = kwargs.pop( - "copy_action_abort_constant", _headers.pop("x-ms-copy-action", "abort") - ) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - - _request = build_abort_copy_from_url_request( - url=self._config.url, - copy_id=copy_id, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - request_id_parameter=request_id_parameter, - comp=comp, - copy_action_abort_constant=copy_action_abort_constant, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def set_tier( # pylint: disable=inconsistent-return-statements - self, - tier: Union[str, _models.AccessTierRequired], - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - timeout: Optional[int] = None, - rehydrate_priority: Optional[Union[str, _models.RehydratePriority]] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Set Tier operation sets the tier on a blob. The operation is allowed on a page blob in a - premium storage account and on a block blob in a blob storage account (locally redundant - storage only). A premium page blob's tier determines the allowed size, IOPS, and bandwidth of - the blob. A block blob's tier determines Hot/Cool/Archive storage type. This operation does not - update the blob's ETag. - - :param tier: Indicates the tier to be set on the blob. Known values are: "P4", "P6", "P10", - "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", and "Cold". - Required. - :type tier: str or ~azure.storage.blob.models.AccessTierRequired - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param rehydrate_priority: Optional: Indicates the priority with which to rehydrate an archived - blob. Known values are: "High" and "Standard". Default value is None. - :type rehydrate_priority: str or ~azure.storage.blob.models.RehydratePriority - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["tier"] = kwargs.pop("comp", _params.pop("comp", "tier")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_tags = modified_access_conditions.if_tags - - _request = build_set_tier_request( - url=self._config.url, - tier=tier, - version=self._config.version, - snapshot=snapshot, - version_id=version_id, - timeout=timeout, - rehydrate_priority=rehydrate_priority, - request_id_parameter=request_id_parameter, - lease_id=_lease_id, - if_tags=_if_tags, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def get_account_info( # pylint: disable=inconsistent-return-statements - self, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any - ) -> None: - """Returns the sku name and account kind. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["account"] = kwargs.pop("restype", _params.pop("restype", "account")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_get_account_info_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-sku-name"] = self._deserialize("str", response.headers.get("x-ms-sku-name")) - response_headers["x-ms-account-kind"] = self._deserialize("str", response.headers.get("x-ms-account-kind")) - response_headers["x-ms-is-hns-enabled"] = self._deserialize("bool", response.headers.get("x-ms-is-hns-enabled")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def query( - self, - snapshot: Optional[str] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - query_request: Optional[_models.QueryRequest] = None, - **kwargs: Any - ) -> Iterator[bytes]: - """The Query operation enables users to select/project on blob data by providing simple query - expressions. - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param query_request: the query request. Default value is None. - :type query_request: ~azure.storage.blob.models.QueryRequest - :return: Iterator[bytes] or the result of cls(response) - :rtype: Iterator[bytes] - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["query"] = kwargs.pop("comp", _params.pop("comp", "query")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) - content_type = content_type if query_request else None - cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if query_request is not None: - _content = self._serialize.body(query_request, "QueryRequest", is_xml=True) - else: - _content = None - - _request = build_query_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - timeout=timeout, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _decompress = kwargs.pop("decompress", True) - _stream = True - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 206]: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - if response.status_code == 200: - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-meta"] = self._deserialize("{str}", response.headers.get("x-ms-meta")) - response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) - response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) - response_headers["Content-Disposition"] = self._deserialize( - "str", response.headers.get("Content-Disposition") - ) - response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) - response_headers["x-ms-copy-completion-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-copy-completion-time") - ) - response_headers["x-ms-copy-status-description"] = self._deserialize( - "str", response.headers.get("x-ms-copy-status-description") - ) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-progress"] = self._deserialize( - "str", response.headers.get("x-ms-copy-progress") - ) - response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - response_headers["x-ms-lease-duration"] = self._deserialize( - "str", response.headers.get("x-ms-lease-duration") - ) - response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) - response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-blob-content-md5"] = self._deserialize( - "bytearray", response.headers.get("x-ms-blob-content-md5") - ) - - if response.status_code == 206: - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-meta"] = self._deserialize("{str}", response.headers.get("x-ms-meta")) - response_headers["Content-Length"] = self._deserialize("int", response.headers.get("Content-Length")) - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["Content-Range"] = self._deserialize("str", response.headers.get("Content-Range")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["Content-Encoding"] = self._deserialize("str", response.headers.get("Content-Encoding")) - response_headers["Cache-Control"] = self._deserialize("str", response.headers.get("Cache-Control")) - response_headers["Content-Disposition"] = self._deserialize( - "str", response.headers.get("Content-Disposition") - ) - response_headers["Content-Language"] = self._deserialize("str", response.headers.get("Content-Language")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-blob-type"] = self._deserialize("str", response.headers.get("x-ms-blob-type")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-copy-completion-time"] = self._deserialize( - "rfc-1123", response.headers.get("x-ms-copy-completion-time") - ) - response_headers["x-ms-copy-status-description"] = self._deserialize( - "str", response.headers.get("x-ms-copy-status-description") - ) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-progress"] = self._deserialize( - "str", response.headers.get("x-ms-copy-progress") - ) - response_headers["x-ms-copy-source"] = self._deserialize("str", response.headers.get("x-ms-copy-source")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - response_headers["x-ms-lease-duration"] = self._deserialize( - "str", response.headers.get("x-ms-lease-duration") - ) - response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) - response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Accept-Ranges"] = self._deserialize("str", response.headers.get("Accept-Ranges")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-committed-block-count"] = self._deserialize( - "int", response.headers.get("x-ms-blob-committed-block-count") - ) - response_headers["x-ms-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-blob-content-md5"] = self._deserialize( - "bytearray", response.headers.get("x-ms-blob-content-md5") - ) - - deserialized = response.stream_download(self._client._pipeline, decompress=_decompress) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def get_tags( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - snapshot: Optional[str] = None, - version_id: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - blob_modified_access_conditions: Optional[_models.BlobModifiedAccessConditions] = None, - **kwargs: Any - ) -> _models.BlobTags: - """The Get Tags operation enables users to get the tags associated with a blob. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param blob_modified_access_conditions: Parameter group. Default value is None. - :type blob_modified_access_conditions: ~azure.storage.blob.models.BlobModifiedAccessConditions - :return: BlobTags or the result of cls(response) - :rtype: ~azure.storage.blob.models.BlobTags - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["tags"] = kwargs.pop("comp", _params.pop("comp", "tags")) - cls: ClsType[_models.BlobTags] = kwargs.pop("cls", None) - - _if_tags = None - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - if modified_access_conditions is not None: - _if_tags = modified_access_conditions.if_tags - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if blob_modified_access_conditions is not None: - _if_match = blob_modified_access_conditions.if_match - _if_modified_since = blob_modified_access_conditions.if_modified_since - _if_none_match = blob_modified_access_conditions.if_none_match - _if_unmodified_since = blob_modified_access_conditions.if_unmodified_since - - _request = build_get_tags_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - snapshot=snapshot, - version_id=version_id, - if_tags=_if_tags, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("BlobTags", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def set_tags( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - version_id: Optional[str] = None, - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - blob_modified_access_conditions: Optional[_models.BlobModifiedAccessConditions] = None, - tags: Optional[_models.BlobTags] = None, - **kwargs: Any - ) -> None: - """The Set Tags operation enables users to set tags on a blob. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param version_id: The version id parameter is an opaque DateTime value that, when present, - specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - Default value is None. - :type version_id: str - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param transactional_content_crc64: Specify the transactional crc64 for the body, to be - validated by the service. Default value is None. - :type transactional_content_crc64: bytes - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param blob_modified_access_conditions: Parameter group. Default value is None. - :type blob_modified_access_conditions: ~azure.storage.blob.models.BlobModifiedAccessConditions - :param tags: Blob tags. Default value is None. - :type tags: ~azure.storage.blob.models.BlobTags - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["tags"] = kwargs.pop("comp", _params.pop("comp", "tags")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) - content_type = content_type if tags else None - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_tags = None - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - if modified_access_conditions is not None: - _if_tags = modified_access_conditions.if_tags - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if blob_modified_access_conditions is not None: - _if_match = blob_modified_access_conditions.if_match - _if_modified_since = blob_modified_access_conditions.if_modified_since - _if_none_match = blob_modified_access_conditions.if_none_match - _if_unmodified_since = blob_modified_access_conditions.if_unmodified_since - if tags is not None: - _content = self._serialize.body(tags, "BlobTags", is_xml=True) - else: - _content = None - - _request = build_set_tags_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - version_id=version_id, - transactional_content_md5=transactional_content_md5, - transactional_content_crc64=transactional_content_crc64, - request_id_parameter=request_id_parameter, - if_tags=_if_tags, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_block_blob_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_block_blob_operations.py deleted file mode 100644 index f4a3ca253280..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_block_blob_operations.py +++ /dev/null @@ -1,1868 +0,0 @@ -# pylint: disable=line-too-long,useless-suppression,too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -from collections.abc import MutableMapping -import datetime -from typing import Any, Callable, IO, Literal, Optional, TypeVar, Union - -from azure.core import PipelineClient -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - map_error, -) -from azure.core.pipeline import PipelineResponse -from azure.core.rest import HttpRequest, HttpResponse -from azure.core.tracing.decorator import distributed_trace -from azure.core.utils import case_insensitive_dict - -from .. import models as _models -from .._configuration import AzureBlobStorageConfiguration -from .._utils.serialization import Deserializer, Serializer - -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, dict[str, Any]], Any]] - -_SERIALIZER = Serializer() -_SERIALIZER.client_side_validation = False - - -def build_upload_request( # pylint: disable=too-many-locals,too-many-statements,too-many-branches - url: str, - *, - content_length: int, - content: IO[bytes], - version: str, - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - blob_content_type: Optional[str] = None, - blob_content_encoding: Optional[str] = None, - blob_content_language: Optional[str] = None, - blob_content_md5: Optional[bytes] = None, - blob_cache_control: Optional[str] = None, - metadata: Optional[dict[str, str]] = None, - lease_id: Optional[str] = None, - blob_content_disposition: Optional[str] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - transactional_content_crc64: Optional[bytes] = None, - structured_body_type: Optional[str] = None, - structured_content_length: Optional[int] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - blob_type: Literal["BlockBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "BlockBlob")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-blob-type"] = _SERIALIZER.header("blob_type", blob_type, "str") - if transactional_content_md5 is not None: - _headers["Content-MD5"] = _SERIALIZER.header( - "transactional_content_md5", transactional_content_md5, "bytearray" - ) - _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") - if blob_content_type is not None: - _headers["x-ms-blob-content-type"] = _SERIALIZER.header("blob_content_type", blob_content_type, "str") - if blob_content_encoding is not None: - _headers["x-ms-blob-content-encoding"] = _SERIALIZER.header( - "blob_content_encoding", blob_content_encoding, "str" - ) - if blob_content_language is not None: - _headers["x-ms-blob-content-language"] = _SERIALIZER.header( - "blob_content_language", blob_content_language, "str" - ) - if blob_content_md5 is not None: - _headers["x-ms-blob-content-md5"] = _SERIALIZER.header("blob_content_md5", blob_content_md5, "bytearray") - if blob_cache_control is not None: - _headers["x-ms-blob-cache-control"] = _SERIALIZER.header("blob_cache_control", blob_cache_control, "str") - if metadata is not None: - _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "{str}") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if blob_content_disposition is not None: - _headers["x-ms-blob-content-disposition"] = _SERIALIZER.header( - "blob_content_disposition", blob_content_disposition, "str" - ) - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if tier is not None: - _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if blob_tags_string is not None: - _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") - if immutability_policy_expiry is not None: - _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header( - "immutability_policy_expiry", immutability_policy_expiry, "rfc-1123" - ) - if immutability_policy_mode is not None: - _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( - "immutability_policy_mode", immutability_policy_mode, "str" - ) - if legal_hold is not None: - _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") - if transactional_content_crc64 is not None: - _headers["x-ms-content-crc64"] = _SERIALIZER.header( - "transactional_content_crc64", transactional_content_crc64, "bytearray" - ) - if structured_body_type is not None: - _headers["x-ms-structured-body"] = _SERIALIZER.header("structured_body_type", structured_body_type, "str") - if structured_content_length is not None: - _headers["x-ms-structured-content-length"] = _SERIALIZER.header( - "structured_content_length", structured_content_length, "int" - ) - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, content=content, **kwargs) - - -def build_put_blob_from_url_request( # pylint: disable=too-many-locals,too-many-statements,too-many-branches - url: str, - *, - content_length: int, - copy_source: str, - version: str, - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - blob_content_type: Optional[str] = None, - blob_content_encoding: Optional[str] = None, - blob_content_language: Optional[str] = None, - blob_content_md5: Optional[bytes] = None, - blob_cache_control: Optional[str] = None, - metadata: Optional[dict[str, str]] = None, - lease_id: Optional[str] = None, - blob_content_disposition: Optional[str] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - source_if_modified_since: Optional[datetime.datetime] = None, - source_if_unmodified_since: Optional[datetime.datetime] = None, - source_if_match: Optional[str] = None, - source_if_none_match: Optional[str] = None, - source_if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - source_content_md5: Optional[bytes] = None, - blob_tags_string: Optional[str] = None, - copy_source_blob_properties: Optional[bool] = None, - copy_source_authorization: Optional[str] = None, - copy_source_tags: Optional[Union[str, _models.BlobCopySourceTags]] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - source_encryption_key: Optional[str] = None, - source_encryption_key_sha256: Optional[str] = None, - source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - blob_type: Literal["BlockBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "BlockBlob")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-blob-type"] = _SERIALIZER.header("blob_type", blob_type, "str") - if transactional_content_md5 is not None: - _headers["Content-MD5"] = _SERIALIZER.header( - "transactional_content_md5", transactional_content_md5, "bytearray" - ) - _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") - if blob_content_type is not None: - _headers["x-ms-blob-content-type"] = _SERIALIZER.header("blob_content_type", blob_content_type, "str") - if blob_content_encoding is not None: - _headers["x-ms-blob-content-encoding"] = _SERIALIZER.header( - "blob_content_encoding", blob_content_encoding, "str" - ) - if blob_content_language is not None: - _headers["x-ms-blob-content-language"] = _SERIALIZER.header( - "blob_content_language", blob_content_language, "str" - ) - if blob_content_md5 is not None: - _headers["x-ms-blob-content-md5"] = _SERIALIZER.header("blob_content_md5", blob_content_md5, "bytearray") - if blob_cache_control is not None: - _headers["x-ms-blob-cache-control"] = _SERIALIZER.header("blob_cache_control", blob_cache_control, "str") - if metadata is not None: - _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "{str}") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if blob_content_disposition is not None: - _headers["x-ms-blob-content-disposition"] = _SERIALIZER.header( - "blob_content_disposition", blob_content_disposition, "str" - ) - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if tier is not None: - _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - if source_if_modified_since is not None: - _headers["x-ms-source-if-modified-since"] = _SERIALIZER.header( - "source_if_modified_since", source_if_modified_since, "rfc-1123" - ) - if source_if_unmodified_since is not None: - _headers["x-ms-source-if-unmodified-since"] = _SERIALIZER.header( - "source_if_unmodified_since", source_if_unmodified_since, "rfc-1123" - ) - if source_if_match is not None: - _headers["x-ms-source-if-match"] = _SERIALIZER.header("source_if_match", source_if_match, "str") - if source_if_none_match is not None: - _headers["x-ms-source-if-none-match"] = _SERIALIZER.header("source_if_none_match", source_if_none_match, "str") - if source_if_tags is not None: - _headers["x-ms-source-if-tags"] = _SERIALIZER.header("source_if_tags", source_if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if source_content_md5 is not None: - _headers["x-ms-source-content-md5"] = _SERIALIZER.header("source_content_md5", source_content_md5, "bytearray") - if blob_tags_string is not None: - _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") - _headers["x-ms-copy-source"] = _SERIALIZER.header("copy_source", copy_source, "str") - if copy_source_blob_properties is not None: - _headers["x-ms-copy-source-blob-properties"] = _SERIALIZER.header( - "copy_source_blob_properties", copy_source_blob_properties, "bool" - ) - if copy_source_authorization is not None: - _headers["x-ms-copy-source-authorization"] = _SERIALIZER.header( - "copy_source_authorization", copy_source_authorization, "str" - ) - if copy_source_tags is not None: - _headers["x-ms-copy-source-tag-option"] = _SERIALIZER.header("copy_source_tags", copy_source_tags, "str") - if file_request_intent is not None: - _headers["x-ms-file-request-intent"] = _SERIALIZER.header("file_request_intent", file_request_intent, "str") - if source_encryption_key is not None: - _headers["x-ms-source-encryption-key"] = _SERIALIZER.header( - "source_encryption_key", source_encryption_key, "str" - ) - if source_encryption_key_sha256 is not None: - _headers["x-ms-source-encryption-key-sha256"] = _SERIALIZER.header( - "source_encryption_key_sha256", source_encryption_key_sha256, "str" - ) - if source_encryption_algorithm is not None: - _headers["x-ms-source-encryption-algorithm"] = _SERIALIZER.header( - "source_encryption_algorithm", source_encryption_algorithm, "str" - ) - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_stage_block_request( - url: str, - *, - block_id: str, - content_length: int, - content: IO[bytes], - version: str, - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - timeout: Optional[int] = None, - lease_id: Optional[str] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - request_id_parameter: Optional[str] = None, - structured_body_type: Optional[str] = None, - structured_content_length: Optional[int] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["block"] = kwargs.pop("comp", _params.pop("comp", "block")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - _params["blockid"] = _SERIALIZER.query("block_id", block_id, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") - if transactional_content_md5 is not None: - _headers["Content-MD5"] = _SERIALIZER.header( - "transactional_content_md5", transactional_content_md5, "bytearray" - ) - if transactional_content_crc64 is not None: - _headers["x-ms-content-crc64"] = _SERIALIZER.header( - "transactional_content_crc64", transactional_content_crc64, "bytearray" - ) - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if structured_body_type is not None: - _headers["x-ms-structured-body"] = _SERIALIZER.header("structured_body_type", structured_body_type, "str") - if structured_content_length is not None: - _headers["x-ms-structured-content-length"] = _SERIALIZER.header( - "structured_content_length", structured_content_length, "int" - ) - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, content=content, **kwargs) - - -def build_stage_block_from_url_request( # pylint: disable=too-many-locals - url: str, - *, - block_id: str, - content_length: int, - source_url: str, - version: str, - source_range: Optional[str] = None, - source_content_md5: Optional[bytes] = None, - source_contentcrc64: Optional[bytes] = None, - timeout: Optional[int] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - lease_id: Optional[str] = None, - source_if_modified_since: Optional[datetime.datetime] = None, - source_if_unmodified_since: Optional[datetime.datetime] = None, - source_if_match: Optional[str] = None, - source_if_none_match: Optional[str] = None, - request_id_parameter: Optional[str] = None, - copy_source_authorization: Optional[str] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - source_encryption_key: Optional[str] = None, - source_encryption_key_sha256: Optional[str] = None, - source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["block"] = kwargs.pop("comp", _params.pop("comp", "block")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - _params["blockid"] = _SERIALIZER.query("block_id", block_id, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") - _headers["x-ms-copy-source"] = _SERIALIZER.header("source_url", source_url, "str") - if source_range is not None: - _headers["x-ms-source-range"] = _SERIALIZER.header("source_range", source_range, "str") - if source_content_md5 is not None: - _headers["x-ms-source-content-md5"] = _SERIALIZER.header("source_content_md5", source_content_md5, "bytearray") - if source_contentcrc64 is not None: - _headers["x-ms-source-content-crc64"] = _SERIALIZER.header( - "source_contentcrc64", source_contentcrc64, "bytearray" - ) - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if source_if_modified_since is not None: - _headers["x-ms-source-if-modified-since"] = _SERIALIZER.header( - "source_if_modified_since", source_if_modified_since, "rfc-1123" - ) - if source_if_unmodified_since is not None: - _headers["x-ms-source-if-unmodified-since"] = _SERIALIZER.header( - "source_if_unmodified_since", source_if_unmodified_since, "rfc-1123" - ) - if source_if_match is not None: - _headers["x-ms-source-if-match"] = _SERIALIZER.header("source_if_match", source_if_match, "str") - if source_if_none_match is not None: - _headers["x-ms-source-if-none-match"] = _SERIALIZER.header("source_if_none_match", source_if_none_match, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if copy_source_authorization is not None: - _headers["x-ms-copy-source-authorization"] = _SERIALIZER.header( - "copy_source_authorization", copy_source_authorization, "str" - ) - if file_request_intent is not None: - _headers["x-ms-file-request-intent"] = _SERIALIZER.header("file_request_intent", file_request_intent, "str") - if source_encryption_key is not None: - _headers["x-ms-source-encryption-key"] = _SERIALIZER.header( - "source_encryption_key", source_encryption_key, "str" - ) - if source_encryption_key_sha256 is not None: - _headers["x-ms-source-encryption-key-sha256"] = _SERIALIZER.header( - "source_encryption_key_sha256", source_encryption_key_sha256, "str" - ) - if source_encryption_algorithm is not None: - _headers["x-ms-source-encryption-algorithm"] = _SERIALIZER.header( - "source_encryption_algorithm", source_encryption_algorithm, "str" - ) - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_commit_block_list_request( # pylint: disable=too-many-locals,too-many-statements,too-many-branches - url: str, - *, - content: Any, - version: str, - timeout: Optional[int] = None, - blob_cache_control: Optional[str] = None, - blob_content_type: Optional[str] = None, - blob_content_encoding: Optional[str] = None, - blob_content_language: Optional[str] = None, - blob_content_md5: Optional[bytes] = None, - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - metadata: Optional[dict[str, str]] = None, - lease_id: Optional[str] = None, - blob_content_disposition: Optional[str] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["blocklist"] = kwargs.pop("comp", _params.pop("comp", "blocklist")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if blob_cache_control is not None: - _headers["x-ms-blob-cache-control"] = _SERIALIZER.header("blob_cache_control", blob_cache_control, "str") - if blob_content_type is not None: - _headers["x-ms-blob-content-type"] = _SERIALIZER.header("blob_content_type", blob_content_type, "str") - if blob_content_encoding is not None: - _headers["x-ms-blob-content-encoding"] = _SERIALIZER.header( - "blob_content_encoding", blob_content_encoding, "str" - ) - if blob_content_language is not None: - _headers["x-ms-blob-content-language"] = _SERIALIZER.header( - "blob_content_language", blob_content_language, "str" - ) - if blob_content_md5 is not None: - _headers["x-ms-blob-content-md5"] = _SERIALIZER.header("blob_content_md5", blob_content_md5, "bytearray") - if transactional_content_md5 is not None: - _headers["Content-MD5"] = _SERIALIZER.header( - "transactional_content_md5", transactional_content_md5, "bytearray" - ) - if transactional_content_crc64 is not None: - _headers["x-ms-content-crc64"] = _SERIALIZER.header( - "transactional_content_crc64", transactional_content_crc64, "bytearray" - ) - if metadata is not None: - _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "{str}") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if blob_content_disposition is not None: - _headers["x-ms-blob-content-disposition"] = _SERIALIZER.header( - "blob_content_disposition", blob_content_disposition, "str" - ) - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if tier is not None: - _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if blob_tags_string is not None: - _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") - if immutability_policy_expiry is not None: - _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header( - "immutability_policy_expiry", immutability_policy_expiry, "rfc-1123" - ) - if immutability_policy_mode is not None: - _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( - "immutability_policy_mode", immutability_policy_mode, "str" - ) - if legal_hold is not None: - _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, content=content, **kwargs) - - -def build_get_block_list_request( - url: str, - *, - version: str, - snapshot: Optional[str] = None, - list_type: Union[str, _models.BlockListType] = "committed", - timeout: Optional[int] = None, - lease_id: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["blocklist"] = kwargs.pop("comp", _params.pop("comp", "blocklist")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if snapshot is not None: - _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") - _params["blocklisttype"] = _SERIALIZER.query("list_type", list_type, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -class BlockBlobOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.storage.blob.AzureBlobStorage`'s - :attr:`block_blob` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: AzureBlobStorageConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace - def upload( # pylint: disable=inconsistent-return-statements,too-many-locals - self, - content_length: int, - body: IO[bytes], - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - metadata: Optional[dict[str, str]] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - transactional_content_crc64: Optional[bytes] = None, - structured_body_type: Optional[str] = None, - structured_content_length: Optional[int] = None, - blob_http_headers: Optional[_models.BlobHTTPHeaders] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Upload Block Blob operation updates the content of an existing block blob. Updating an - existing block blob overwrites any existing metadata on the blob. Partial updates are not - supported with Put Blob; the content of the existing blob is overwritten with the content of - the new blob. To perform a partial update of the content of a block blob, use the Put Block - List operation. - - :param content_length: The length of the request. Required. - :type content_length: int - :param body: Initial data. Required. - :type body: IO[bytes] - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param tier: Optional. Indicates the tier to be set on the blob. Known values are: "P4", "P6", - "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", and - "Cold". Default value is None. - :type tier: str or ~azure.storage.blob.models.AccessTierOptional - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param legal_hold: Specified if a legal hold should be set on the blob. Default value is None. - :type legal_hold: bool - :param transactional_content_crc64: Specify the transactional crc64 for the body, to be - validated by the service. Default value is None. - :type transactional_content_crc64: bytes - :param structured_body_type: Required if the request body is a structured message. Specifies - the message schema version and properties. Default value is None. - :type structured_body_type: str - :param structured_content_length: Required if the request body is a structured message. - Specifies the length of the blob/file content inside the message body. Will always be smaller - than Content-Length. Default value is None. - :type structured_content_length: int - :param blob_http_headers: Parameter group. Default value is None. - :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - blob_type: Literal["BlockBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "BlockBlob")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _blob_content_type = None - _blob_content_encoding = None - _blob_content_language = None - _blob_content_md5 = None - _blob_cache_control = None - _lease_id = None - _blob_content_disposition = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if blob_http_headers is not None: - _blob_cache_control = blob_http_headers.blob_cache_control - _blob_content_disposition = blob_http_headers.blob_content_disposition - _blob_content_encoding = blob_http_headers.blob_content_encoding - _blob_content_language = blob_http_headers.blob_content_language - _blob_content_md5 = blob_http_headers.blob_content_md5 - _blob_content_type = blob_http_headers.blob_content_type - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - _content = body - - _request = build_upload_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - timeout=timeout, - transactional_content_md5=transactional_content_md5, - blob_content_type=_blob_content_type, - blob_content_encoding=_blob_content_encoding, - blob_content_language=_blob_content_language, - blob_content_md5=_blob_content_md5, - blob_cache_control=_blob_cache_control, - metadata=metadata, - lease_id=_lease_id, - blob_content_disposition=_blob_content_disposition, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - tier=tier, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - blob_tags_string=blob_tags_string, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - legal_hold=legal_hold, - transactional_content_crc64=transactional_content_crc64, - structured_body_type=structured_body_type, - structured_content_length=structured_content_length, - blob_type=blob_type, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-structured-body"] = self._deserialize( - "str", response.headers.get("x-ms-structured-body") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def put_blob_from_url( # pylint: disable=inconsistent-return-statements,too-many-locals - self, - content_length: int, - copy_source: str, - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - metadata: Optional[dict[str, str]] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - request_id_parameter: Optional[str] = None, - source_content_md5: Optional[bytes] = None, - blob_tags_string: Optional[str] = None, - copy_source_blob_properties: Optional[bool] = None, - copy_source_authorization: Optional[str] = None, - copy_source_tags: Optional[Union[str, _models.BlobCopySourceTags]] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - blob_http_headers: Optional[_models.BlobHTTPHeaders] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - source_modified_access_conditions: Optional[_models.SourceModifiedAccessConditions] = None, - source_cpk_info: Optional[_models.SourceCpkInfo] = None, - **kwargs: Any - ) -> None: - """The Put Blob from URL operation creates a new Block Blob where the contents of the blob are - read from a given URL. This API is supported beginning with the 2020-04-08 version. Partial - updates are not supported with Put Blob from URL; the content of an existing blob is - overwritten with the content of the new blob. To perform partial updates to a block blob’s - contents using a source URL, use the Put Block from URL API in conjunction with Put Block List. - - :param content_length: The length of the request. Required. - :type content_length: int - :param copy_source: Specifies the name of the source page blob snapshot. This value is a URL of - up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it - would appear in a request URI. The source blob must either be public or must be authenticated - via a shared access signature. Required. - :type copy_source: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param tier: Optional. Indicates the tier to be set on the blob. Known values are: "P4", "P6", - "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", and - "Cold". Default value is None. - :type tier: str or ~azure.storage.blob.models.AccessTierOptional - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param source_content_md5: Specify the md5 calculated for the range of bytes that must be read - from the copy source. Default value is None. - :type source_content_md5: bytes - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param copy_source_blob_properties: Optional, default is true. Indicates if properties from - the source blob should be copied. Default value is None. - :type copy_source_blob_properties: bool - :param copy_source_authorization: Only Bearer type is supported. Credentials should be a valid - OAuth access token to copy source. Default value is None. - :type copy_source_authorization: str - :param copy_source_tags: Optional, default 'replace'. Indicates if source tags should be - copied or replaced with the tags specified by x-ms-tags. Known values are: "REPLACE" and - "COPY". Default value is None. - :type copy_source_tags: str or ~azure.storage.blob.models.BlobCopySourceTags - :param file_request_intent: Valid value is backup. "backup" Default value is None. - :type file_request_intent: str or ~azure.storage.blob.models.FileShareTokenIntent - :param blob_http_headers: Parameter group. Default value is None. - :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param source_modified_access_conditions: Parameter group. Default value is None. - :type source_modified_access_conditions: - ~azure.storage.blob.models.SourceModifiedAccessConditions - :param source_cpk_info: Parameter group. Default value is None. - :type source_cpk_info: ~azure.storage.blob.models.SourceCpkInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - blob_type: Literal["BlockBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "BlockBlob")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _blob_content_type = None - _blob_content_encoding = None - _blob_content_language = None - _blob_content_md5 = None - _blob_cache_control = None - _lease_id = None - _blob_content_disposition = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _source_if_modified_since = None - _source_if_unmodified_since = None - _source_if_match = None - _source_if_none_match = None - _source_if_tags = None - _source_encryption_key = None - _source_encryption_key_sha256 = None - _source_encryption_algorithm = None - if blob_http_headers is not None: - _blob_cache_control = blob_http_headers.blob_cache_control - _blob_content_disposition = blob_http_headers.blob_content_disposition - _blob_content_encoding = blob_http_headers.blob_content_encoding - _blob_content_language = blob_http_headers.blob_content_language - _blob_content_md5 = blob_http_headers.blob_content_md5 - _blob_content_type = blob_http_headers.blob_content_type - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if source_modified_access_conditions is not None: - _source_if_match = source_modified_access_conditions.source_if_match - _source_if_modified_since = source_modified_access_conditions.source_if_modified_since - _source_if_none_match = source_modified_access_conditions.source_if_none_match - _source_if_tags = source_modified_access_conditions.source_if_tags - _source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since - if source_cpk_info is not None: - _source_encryption_algorithm = source_cpk_info.source_encryption_algorithm - _source_encryption_key = source_cpk_info.source_encryption_key - _source_encryption_key_sha256 = source_cpk_info.source_encryption_key_sha256 - - _request = build_put_blob_from_url_request( - url=self._config.url, - content_length=content_length, - copy_source=copy_source, - version=self._config.version, - timeout=timeout, - transactional_content_md5=transactional_content_md5, - blob_content_type=_blob_content_type, - blob_content_encoding=_blob_content_encoding, - blob_content_language=_blob_content_language, - blob_content_md5=_blob_content_md5, - blob_cache_control=_blob_cache_control, - metadata=metadata, - lease_id=_lease_id, - blob_content_disposition=_blob_content_disposition, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - tier=tier, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - source_if_modified_since=_source_if_modified_since, - source_if_unmodified_since=_source_if_unmodified_since, - source_if_match=_source_if_match, - source_if_none_match=_source_if_none_match, - source_if_tags=_source_if_tags, - request_id_parameter=request_id_parameter, - source_content_md5=source_content_md5, - blob_tags_string=blob_tags_string, - copy_source_blob_properties=copy_source_blob_properties, - copy_source_authorization=copy_source_authorization, - copy_source_tags=copy_source_tags, - file_request_intent=file_request_intent, - source_encryption_key=_source_encryption_key, - source_encryption_key_sha256=_source_encryption_key_sha256, - source_encryption_algorithm=_source_encryption_algorithm, - blob_type=blob_type, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def stage_block( # pylint: disable=inconsistent-return-statements,too-many-locals - self, - block_id: str, - content_length: int, - body: IO[bytes], - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - structured_body_type: Optional[str] = None, - structured_content_length: Optional[int] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - **kwargs: Any - ) -> None: - """The Stage Block operation creates a new block to be committed as part of a blob. - - :param block_id: A valid Base64 string value that identifies the block. Prior to encoding, the - string must be less than or equal to 64 bytes in size. For a given blob, the length of the - value specified for the blockid parameter must be the same size for each block. Required. - :type block_id: str - :param content_length: The length of the request. Required. - :type content_length: int - :param body: Initial data. Required. - :type body: IO[bytes] - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param transactional_content_crc64: Specify the transactional crc64 for the body, to be - validated by the service. Default value is None. - :type transactional_content_crc64: bytes - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param structured_body_type: Required if the request body is a structured message. Specifies - the message schema version and properties. Default value is None. - :type structured_body_type: str - :param structured_content_length: Required if the request body is a structured message. - Specifies the length of the blob/file content inside the message body. Will always be smaller - than Content-Length. Default value is None. - :type structured_content_length: int - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["block"] = kwargs.pop("comp", _params.pop("comp", "block")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - _content = body - - _request = build_stage_block_request( - url=self._config.url, - block_id=block_id, - content_length=content_length, - version=self._config.version, - transactional_content_md5=transactional_content_md5, - transactional_content_crc64=transactional_content_crc64, - timeout=timeout, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - request_id_parameter=request_id_parameter, - structured_body_type=structured_body_type, - structured_content_length=structured_content_length, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-structured-body"] = self._deserialize( - "str", response.headers.get("x-ms-structured-body") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def stage_block_from_url( # pylint: disable=inconsistent-return-statements,too-many-locals - self, - block_id: str, - content_length: int, - source_url: str, - source_range: Optional[str] = None, - source_content_md5: Optional[bytes] = None, - source_contentcrc64: Optional[bytes] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - copy_source_authorization: Optional[str] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - source_modified_access_conditions: Optional[_models.SourceModifiedAccessConditions] = None, - source_cpk_info: Optional[_models.SourceCpkInfo] = None, - **kwargs: Any - ) -> None: - """The Stage Block operation creates a new block to be committed as part of a blob where the - contents are read from a URL. - - :param block_id: A valid Base64 string value that identifies the block. Prior to encoding, the - string must be less than or equal to 64 bytes in size. For a given blob, the length of the - value specified for the blockid parameter must be the same size for each block. Required. - :type block_id: str - :param content_length: The length of the request. Required. - :type content_length: int - :param source_url: Specify a URL to the copy source. Required. - :type source_url: str - :param source_range: Bytes of source data in the specified range. Default value is None. - :type source_range: str - :param source_content_md5: Specify the md5 calculated for the range of bytes that must be read - from the copy source. Default value is None. - :type source_content_md5: bytes - :param source_contentcrc64: Specify the crc64 calculated for the range of bytes that must be - read from the copy source. Default value is None. - :type source_contentcrc64: bytes - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param copy_source_authorization: Only Bearer type is supported. Credentials should be a valid - OAuth access token to copy source. Default value is None. - :type copy_source_authorization: str - :param file_request_intent: Valid value is backup. "backup" Default value is None. - :type file_request_intent: str or ~azure.storage.blob.models.FileShareTokenIntent - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param source_modified_access_conditions: Parameter group. Default value is None. - :type source_modified_access_conditions: - ~azure.storage.blob.models.SourceModifiedAccessConditions - :param source_cpk_info: Parameter group. Default value is None. - :type source_cpk_info: ~azure.storage.blob.models.SourceCpkInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["block"] = kwargs.pop("comp", _params.pop("comp", "block")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _lease_id = None - _source_if_modified_since = None - _source_if_unmodified_since = None - _source_if_match = None - _source_if_none_match = None - _source_encryption_key = None - _source_encryption_key_sha256 = None - _source_encryption_algorithm = None - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if source_modified_access_conditions is not None: - _source_if_match = source_modified_access_conditions.source_if_match - _source_if_modified_since = source_modified_access_conditions.source_if_modified_since - _source_if_none_match = source_modified_access_conditions.source_if_none_match - _source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since - if source_cpk_info is not None: - _source_encryption_algorithm = source_cpk_info.source_encryption_algorithm - _source_encryption_key = source_cpk_info.source_encryption_key - _source_encryption_key_sha256 = source_cpk_info.source_encryption_key_sha256 - - _request = build_stage_block_from_url_request( - url=self._config.url, - block_id=block_id, - content_length=content_length, - source_url=source_url, - version=self._config.version, - source_range=source_range, - source_content_md5=source_content_md5, - source_contentcrc64=source_contentcrc64, - timeout=timeout, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - lease_id=_lease_id, - source_if_modified_since=_source_if_modified_since, - source_if_unmodified_since=_source_if_unmodified_since, - source_if_match=_source_if_match, - source_if_none_match=_source_if_none_match, - request_id_parameter=request_id_parameter, - copy_source_authorization=copy_source_authorization, - file_request_intent=file_request_intent, - source_encryption_key=_source_encryption_key, - source_encryption_key_sha256=_source_encryption_key_sha256, - source_encryption_algorithm=_source_encryption_algorithm, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def commit_block_list( # pylint: disable=inconsistent-return-statements,too-many-locals - self, - blocks: _models.BlockLookupList, - timeout: Optional[int] = None, - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - metadata: Optional[dict[str, str]] = None, - tier: Optional[Union[str, _models.AccessTierOptional]] = None, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - blob_http_headers: Optional[_models.BlobHTTPHeaders] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Commit Block List operation writes a blob by specifying the list of block IDs that make up - the blob. In order to be written as part of a blob, a block must have been successfully written - to the server in a prior Put Block operation. You can call Put Block List to update a blob by - uploading only those blocks that have changed, then committing the new and existing blocks - together. You can do this by specifying whether to commit a block from the committed block list - or from the uncommitted block list, or to commit the most recently uploaded version of the - block, whichever list it may belong to. - - :param blocks: Blob Blocks. Required. - :type blocks: ~azure.storage.blob.models.BlockLookupList - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param transactional_content_crc64: Specify the transactional crc64 for the body, to be - validated by the service. Default value is None. - :type transactional_content_crc64: bytes - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param tier: Optional. Indicates the tier to be set on the blob. Known values are: "P4", "P6", - "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive", and - "Cold". Default value is None. - :type tier: str or ~azure.storage.blob.models.AccessTierOptional - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param legal_hold: Specified if a legal hold should be set on the blob. Default value is None. - :type legal_hold: bool - :param blob_http_headers: Parameter group. Default value is None. - :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["blocklist"] = kwargs.pop("comp", _params.pop("comp", "blocklist")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _blob_cache_control = None - _blob_content_type = None - _blob_content_encoding = None - _blob_content_language = None - _blob_content_md5 = None - _lease_id = None - _blob_content_disposition = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if blob_http_headers is not None: - _blob_cache_control = blob_http_headers.blob_cache_control - _blob_content_disposition = blob_http_headers.blob_content_disposition - _blob_content_encoding = blob_http_headers.blob_content_encoding - _blob_content_language = blob_http_headers.blob_content_language - _blob_content_md5 = blob_http_headers.blob_content_md5 - _blob_content_type = blob_http_headers.blob_content_type - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - _content = self._serialize.body(blocks, "BlockLookupList", is_xml=True) - - _request = build_commit_block_list_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - blob_cache_control=_blob_cache_control, - blob_content_type=_blob_content_type, - blob_content_encoding=_blob_content_encoding, - blob_content_language=_blob_content_language, - blob_content_md5=_blob_content_md5, - transactional_content_md5=transactional_content_md5, - transactional_content_crc64=transactional_content_crc64, - metadata=metadata, - lease_id=_lease_id, - blob_content_disposition=_blob_content_disposition, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - tier=tier, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - blob_tags_string=blob_tags_string, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - legal_hold=legal_hold, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def get_block_list( - self, - snapshot: Optional[str] = None, - list_type: Union[str, _models.BlockListType] = "committed", - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> _models.BlockList: - """The Get Block List operation retrieves the list of blocks that have been uploaded as part of a - block blob. - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param list_type: Specifies whether to return the list of committed blocks, the list of - uncommitted blocks, or both lists together. Known values are: "committed", "uncommitted", and - "all". Default value is "committed". - :type list_type: str or ~azure.storage.blob.models.BlockListType - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: BlockList or the result of cls(response) - :rtype: ~azure.storage.blob.models.BlockList - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["blocklist"] = kwargs.pop("comp", _params.pop("comp", "blocklist")) - cls: ClsType[_models.BlockList] = kwargs.pop("cls", None) - - _lease_id = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_tags = modified_access_conditions.if_tags - - _request = build_get_block_list_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - list_type=list_type, - timeout=timeout, - lease_id=_lease_id, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["x-ms-blob-content-length"] = self._deserialize( - "int", response.headers.get("x-ms-blob-content-length") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("BlockList", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_container_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_container_operations.py deleted file mode 100644 index ec2deb0de1c0..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_container_operations.py +++ /dev/null @@ -1,2698 +0,0 @@ -# pylint: disable=line-too-long,useless-suppression,too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -from collections.abc import MutableMapping -import datetime -from typing import Any, Callable, IO, Iterator, Literal, Optional, TypeVar, Union - -from azure.core import PipelineClient -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - StreamClosedError, - StreamConsumedError, - map_error, -) -from azure.core.pipeline import PipelineResponse -from azure.core.rest import HttpRequest, HttpResponse -from azure.core.tracing.decorator import distributed_trace -from azure.core.utils import case_insensitive_dict - -from .. import models as _models -from .._configuration import AzureBlobStorageConfiguration -from .._utils.serialization import Deserializer, Serializer - -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, dict[str, Any]], Any]] - -_SERIALIZER = Serializer() -_SERIALIZER.client_side_validation = False - - -def build_create_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - access: Optional[Union[str, _models.PublicAccessType]] = None, - request_id_parameter: Optional[str] = None, - default_encryption_scope: Optional[str] = None, - prevent_encryption_scope_override: Optional[bool] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if metadata is not None: - _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "{str}") - if access is not None: - _headers["x-ms-blob-public-access"] = _SERIALIZER.header("access", access, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if default_encryption_scope is not None: - _headers["x-ms-default-encryption-scope"] = _SERIALIZER.header( - "default_encryption_scope", default_encryption_scope, "str" - ) - if prevent_encryption_scope_override is not None: - _headers["x-ms-deny-encryption-scope-override"] = _SERIALIZER.header( - "prevent_encryption_scope_override", prevent_encryption_scope_override, "bool" - ) - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_get_properties_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - lease_id: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_delete_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - lease_id: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_set_metadata_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - lease_id: Optional[str] = None, - metadata: Optional[dict[str, str]] = None, - if_modified_since: Optional[datetime.datetime] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["metadata"] = kwargs.pop("comp", _params.pop("comp", "metadata")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if metadata is not None: - _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "{str}") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_get_access_policy_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - lease_id: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["acl"] = kwargs.pop("comp", _params.pop("comp", "acl")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_set_access_policy_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - lease_id: Optional[str] = None, - access: Optional[Union[str, _models.PublicAccessType]] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - request_id_parameter: Optional[str] = None, - content: Any = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["acl"] = kwargs.pop("comp", _params.pop("comp", "acl")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if access is not None: - _headers["x-ms-blob-public-access"] = _SERIALIZER.header("access", access, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, content=content, **kwargs) - - -def build_restore_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - deleted_container_name: Optional[str] = None, - deleted_container_version: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["undelete"] = kwargs.pop("comp", _params.pop("comp", "undelete")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if deleted_container_name is not None: - _headers["x-ms-deleted-container-name"] = _SERIALIZER.header( - "deleted_container_name", deleted_container_name, "str" - ) - if deleted_container_version is not None: - _headers["x-ms-deleted-container-version"] = _SERIALIZER.header( - "deleted_container_version", deleted_container_version, "str" - ) - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_rename_request( - url: str, - *, - source_container_name: str, - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - source_lease_id: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["rename"] = kwargs.pop("comp", _params.pop("comp", "rename")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["x-ms-source-container-name"] = _SERIALIZER.header("source_container_name", source_container_name, "str") - if source_lease_id is not None: - _headers["x-ms-source-lease-id"] = _SERIALIZER.header("source_lease_id", source_lease_id, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_submit_batch_request( - url: str, - *, - content_length: int, - content: IO[bytes], - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["batch"] = kwargs.pop("comp", _params.pop("comp", "batch")) - multipart_content_type: Optional[str] = kwargs.pop("multipart_content_type", _headers.pop("Content-Type", None)) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") - if multipart_content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("multipart_content_type", multipart_content_type, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, content=content, **kwargs) - - -def build_filter_blobs_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - where: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.FilterBlobsIncludeItem]]] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["blobs"] = kwargs.pop("comp", _params.pop("comp", "blobs")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - if where is not None: - _params["where"] = _SERIALIZER.query("where", where, "str") - if marker is not None: - _params["marker"] = _SERIALIZER.query("marker", marker, "str") - if maxresults is not None: - _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int", minimum=1) - if include is not None: - _params["include"] = _SERIALIZER.query("include", include, "[str]", div=",") - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_acquire_lease_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - duration: Optional[int] = None, - proposed_lease_id: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["acquire"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "acquire")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") - if duration is not None: - _headers["x-ms-lease-duration"] = _SERIALIZER.header("duration", duration, "int") - if proposed_lease_id is not None: - _headers["x-ms-proposed-lease-id"] = _SERIALIZER.header("proposed_lease_id", proposed_lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_release_lease_request( - url: str, - *, - lease_id: str, - version: str, - timeout: Optional[int] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["release"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "release")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_renew_lease_request( - url: str, - *, - lease_id: str, - version: str, - timeout: Optional[int] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["renew"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "renew")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_break_lease_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - break_period: Optional[int] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["break"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "break")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") - if break_period is not None: - _headers["x-ms-lease-break-period"] = _SERIALIZER.header("break_period", break_period, "int") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_change_lease_request( - url: str, - *, - lease_id: str, - proposed_lease_id: str, - version: str, - timeout: Optional[int] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["change"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "change")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-lease-action"] = _SERIALIZER.header("action", action, "str") - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - _headers["x-ms-proposed-lease-id"] = _SERIALIZER.header("proposed_lease_id", proposed_lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_list_blob_flat_segment_request( - url: str, - *, - version: str, - prefix: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.ListBlobsIncludeItem]]] = None, - start_from: Optional[str] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["list"] = kwargs.pop("comp", _params.pop("comp", "list")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if prefix is not None: - _params["prefix"] = _SERIALIZER.query("prefix", prefix, "str") - if marker is not None: - _params["marker"] = _SERIALIZER.query("marker", marker, "str") - if maxresults is not None: - _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int", minimum=1) - if include is not None: - _params["include"] = _SERIALIZER.query("include", include, "[str]", div=",") - if start_from is not None: - _params["startFrom"] = _SERIALIZER.query("start_from", start_from, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_list_blob_hierarchy_segment_request( # pylint: disable=name-too-long - url: str, - *, - delimiter: str, - version: str, - prefix: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.ListBlobsIncludeItem]]] = None, - start_from: Optional[str] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["list"] = kwargs.pop("comp", _params.pop("comp", "list")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if prefix is not None: - _params["prefix"] = _SERIALIZER.query("prefix", prefix, "str") - _params["delimiter"] = _SERIALIZER.query("delimiter", delimiter, "str") - if marker is not None: - _params["marker"] = _SERIALIZER.query("marker", marker, "str") - if maxresults is not None: - _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int", minimum=1) - if include is not None: - _params["include"] = _SERIALIZER.query("include", include, "[str]", div=",") - if start_from is not None: - _params["startFrom"] = _SERIALIZER.query("start_from", start_from, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_get_account_info_request( - url: str, *, version: str, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["account"] = kwargs.pop("restype", _params.pop("restype", "account")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -class ContainerOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.storage.blob.AzureBlobStorage`'s - :attr:`container` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: AzureBlobStorageConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace - def create( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - access: Optional[Union[str, _models.PublicAccessType]] = None, - request_id_parameter: Optional[str] = None, - container_cpk_scope_info: Optional[_models.ContainerCpkScopeInfo] = None, - **kwargs: Any - ) -> None: - """creates a new container under the specified account. If the container with the same name - already exists, the operation fails. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param access: Specifies whether data in the container may be accessed publicly and the level - of access. Known values are: "container" and "blob". Default value is None. - :type access: str or ~azure.storage.blob.models.PublicAccessType - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param container_cpk_scope_info: Parameter group. Default value is None. - :type container_cpk_scope_info: ~azure.storage.blob.models.ContainerCpkScopeInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _default_encryption_scope = None - _prevent_encryption_scope_override = None - if container_cpk_scope_info is not None: - _default_encryption_scope = container_cpk_scope_info.default_encryption_scope - _prevent_encryption_scope_override = container_cpk_scope_info.prevent_encryption_scope_override - - _request = build_create_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - metadata=metadata, - access=access, - request_id_parameter=request_id_parameter, - default_encryption_scope=_default_encryption_scope, - prevent_encryption_scope_override=_prevent_encryption_scope_override, - restype=restype, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def get_properties( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - **kwargs: Any - ) -> None: - """returns all user-defined metadata and system properties for the specified container. The data - returned does not include the container's list of blobs. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - - _request = build_get_properties_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - request_id_parameter=request_id_parameter, - restype=restype, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-meta"] = self._deserialize("{str}", response.headers.get("x-ms-meta")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-duration"] = self._deserialize("str", response.headers.get("x-ms-lease-duration")) - response_headers["x-ms-lease-state"] = self._deserialize("str", response.headers.get("x-ms-lease-state")) - response_headers["x-ms-lease-status"] = self._deserialize("str", response.headers.get("x-ms-lease-status")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-blob-public-access"] = self._deserialize( - "str", response.headers.get("x-ms-blob-public-access") - ) - response_headers["x-ms-has-immutability-policy"] = self._deserialize( - "bool", response.headers.get("x-ms-has-immutability-policy") - ) - response_headers["x-ms-has-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-has-legal-hold")) - response_headers["x-ms-default-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-default-encryption-scope") - ) - response_headers["x-ms-deny-encryption-scope-override"] = self._deserialize( - "bool", response.headers.get("x-ms-deny-encryption-scope-override") - ) - response_headers["x-ms-immutable-storage-with-versioning-enabled"] = self._deserialize( - "bool", response.headers.get("x-ms-immutable-storage-with-versioning-enabled") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def delete( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """operation marks the specified container for deletion. The container and any blobs contained - within it are later deleted during garbage collection. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_delete_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - restype=restype, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def set_metadata( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - metadata: Optional[dict[str, str]] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """operation sets one or more user-defined name-value pairs for the specified container. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["metadata"] = kwargs.pop("comp", _params.pop("comp", "metadata")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - - _request = build_set_metadata_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - metadata=metadata, - if_modified_since=_if_modified_since, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def get_access_policy( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - **kwargs: Any - ) -> list[_models.SignedIdentifier]: - """gets the permissions for the specified container. The permissions indicate whether container - data may be accessed publicly. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :return: list of SignedIdentifier or the result of cls(response) - :rtype: list[~azure.storage.blob.models.SignedIdentifier] - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["acl"] = kwargs.pop("comp", _params.pop("comp", "acl")) - cls: ClsType[list[_models.SignedIdentifier]] = kwargs.pop("cls", None) - - _lease_id = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - - _request = build_get_access_policy_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-blob-public-access"] = self._deserialize( - "str", response.headers.get("x-ms-blob-public-access") - ) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("[SignedIdentifier]", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def set_access_policy( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - access: Optional[Union[str, _models.PublicAccessType]] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - container_acl: Optional[list[_models.SignedIdentifier]] = None, - **kwargs: Any - ) -> None: - """sets the permissions for the specified container. The permissions indicate whether blobs in a - container may be accessed publicly. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param access: Specifies whether data in the container may be accessed publicly and the level - of access. Known values are: "container" and "blob". Default value is None. - :type access: str or ~azure.storage.blob.models.PublicAccessType - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param container_acl: the acls for the container. Default value is None. - :type container_acl: list[~azure.storage.blob.models.SignedIdentifier] - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["acl"] = kwargs.pop("comp", _params.pop("comp", "acl")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) - content_type = content_type if container_acl else None - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - serialization_ctxt = {"xml": {"name": "SignedIdentifiers", "wrapped": True, "itemsName": "SignedIdentifier"}} - if container_acl is not None: - _content = self._serialize.body( - container_acl, "[SignedIdentifier]", is_xml=True, serialization_ctxt=serialization_ctxt - ) - else: - _content = None - - _request = build_set_access_policy_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - access=access, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def restore( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - deleted_container_name: Optional[str] = None, - deleted_container_version: Optional[str] = None, - **kwargs: Any - ) -> None: - """Restores a previously-deleted container. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param deleted_container_name: Optional. Version 2019-12-12 and later. Specifies the name of - the deleted container to restore. Default value is None. - :type deleted_container_name: str - :param deleted_container_version: Optional. Version 2019-12-12 and later. Specifies the - version of the deleted container to restore. Default value is None. - :type deleted_container_version: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["undelete"] = kwargs.pop("comp", _params.pop("comp", "undelete")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_restore_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - deleted_container_name=deleted_container_name, - deleted_container_version=deleted_container_version, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def rename( # pylint: disable=inconsistent-return-statements - self, - source_container_name: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - source_lease_id: Optional[str] = None, - **kwargs: Any - ) -> None: - """Renames an existing container. - - :param source_container_name: Required. Specifies the name of the container to rename. - Required. - :type source_container_name: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param source_lease_id: A lease ID for the source path. If specified, the source path must have - an active lease and the lease ID must match. Default value is None. - :type source_lease_id: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["rename"] = kwargs.pop("comp", _params.pop("comp", "rename")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_rename_request( - url=self._config.url, - source_container_name=source_container_name, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - source_lease_id=source_lease_id, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def submit_batch( - self, - content_length: int, - body: IO[bytes], - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> Iterator[bytes]: - """The Batch operation allows multiple API calls to be embedded into a single HTTP request. - - :param content_length: The length of the request. Required. - :type content_length: int - :param body: Initial data. Required. - :type body: IO[bytes] - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: Iterator[bytes] or the result of cls(response) - :rtype: Iterator[bytes] - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["batch"] = kwargs.pop("comp", _params.pop("comp", "batch")) - multipart_content_type: str = kwargs.pop( - "multipart_content_type", _headers.pop("Content-Type", "application/xml") - ) - cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - - _content = body - - _request = build_submit_batch_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - multipart_content_type=multipart_content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _decompress = kwargs.pop("decompress", True) - _stream = True - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - - deserialized = response.stream_download(self._client._pipeline, decompress=_decompress) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def filter_blobs( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - where: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.FilterBlobsIncludeItem]]] = None, - **kwargs: Any - ) -> _models.FilterBlobSegment: - """The Filter Blobs operation enables callers to list blobs in a container whose tags match a - given search expression. Filter blobs searches within the given container. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param where: Filters the results to return only to return only blobs whose tags match the - specified expression. Default value is None. - :type where: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param include: Include this parameter to specify one or more datasets to include in the - response. Default value is None. - :type include: list[str or ~azure.storage.blob.models.FilterBlobsIncludeItem] - :return: FilterBlobSegment or the result of cls(response) - :rtype: ~azure.storage.blob.models.FilterBlobSegment - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["blobs"] = kwargs.pop("comp", _params.pop("comp", "blobs")) - cls: ClsType[_models.FilterBlobSegment] = kwargs.pop("cls", None) - - _request = build_filter_blobs_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - where=where, - marker=marker, - maxresults=maxresults, - include=include, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("FilterBlobSegment", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def acquire_lease( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - duration: Optional[int] = None, - proposed_lease_id: Optional[str] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] establishes and manages a lock on a container for delete operations. The lock duration - can be 15 to 60 seconds, or can be infinite. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param duration: Specifies the duration of the lease, in seconds, or negative one (-1) for a - lease that never expires. A non-infinite lease can be between 15 and 60 seconds. A lease - duration cannot be changed using renew or change. Default value is None. - :type duration: int - :param proposed_lease_id: Proposed lease ID, in a GUID string format. The Blob service returns - 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid - Constructor (String) for a list of valid GUID string formats. Default value is None. - :type proposed_lease_id: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["acquire"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "acquire")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_acquire_lease_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - duration=duration, - proposed_lease_id=proposed_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - comp=comp, - restype=restype, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def release_lease( # pylint: disable=inconsistent-return-statements - self, - lease_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] establishes and manages a lock on a container for delete operations. The lock duration - can be 15 to 60 seconds, or can be infinite. - - :param lease_id: Specifies the current lease ID on the resource. Required. - :type lease_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["release"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "release")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_release_lease_request( - url=self._config.url, - lease_id=lease_id, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - comp=comp, - restype=restype, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def renew_lease( # pylint: disable=inconsistent-return-statements - self, - lease_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] establishes and manages a lock on a container for delete operations. The lock duration - can be 15 to 60 seconds, or can be infinite. - - :param lease_id: Specifies the current lease ID on the resource. Required. - :type lease_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["renew"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "renew")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_renew_lease_request( - url=self._config.url, - lease_id=lease_id, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - comp=comp, - restype=restype, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def break_lease( # pylint: disable=inconsistent-return-statements - self, - timeout: Optional[int] = None, - break_period: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] establishes and manages a lock on a container for delete operations. The lock duration - can be 15 to 60 seconds, or can be infinite. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param break_period: For a break operation, proposed duration the lease should continue before - it is broken, in seconds, between 0 and 60. This break period is only used if it is shorter - than the time remaining on the lease. If longer, the time remaining on the lease is used. A new - lease will not be available before the break period has expired, but the lease may be held for - longer than the break period. If this header does not appear with a break operation, a - fixed-duration lease breaks after the remaining lease period elapses, and an infinite lease - breaks immediately. Default value is None. - :type break_period: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["break"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "break")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_break_lease_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - break_period=break_period, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - comp=comp, - restype=restype, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-time"] = self._deserialize("int", response.headers.get("x-ms-lease-time")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def change_lease( # pylint: disable=inconsistent-return-statements - self, - lease_id: str, - proposed_lease_id: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """[Update] establishes and manages a lock on a container for delete operations. The lock duration - can be 15 to 60 seconds, or can be infinite. - - :param lease_id: Specifies the current lease ID on the resource. Required. - :type lease_id: str - :param proposed_lease_id: Proposed lease ID, in a GUID string format. The Blob service returns - 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid - Constructor (String) for a list of valid GUID string formats. Required. - :type proposed_lease_id: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["lease"] = kwargs.pop("comp", _params.pop("comp", "lease")) - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - action: Literal["change"] = kwargs.pop("action", _headers.pop("x-ms-lease-action", "change")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - if modified_access_conditions is not None: - _if_modified_since = modified_access_conditions.if_modified_since - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_change_lease_request( - url=self._config.url, - lease_id=lease_id, - proposed_lease_id=proposed_lease_id, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - request_id_parameter=request_id_parameter, - comp=comp, - restype=restype, - action=action, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-lease-id"] = self._deserialize("str", response.headers.get("x-ms-lease-id")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def list_blob_flat_segment( - self, - prefix: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.ListBlobsIncludeItem]]] = None, - start_from: Optional[str] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> _models.ListBlobsFlatSegmentResponse: - """[Update] The List Blobs operation returns a list of the blobs under the specified container. - - :param prefix: Filters the results to return only containers whose name begins with the - specified prefix. Default value is None. - :type prefix: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param include: Include this parameter to specify one or more datasets to include in the - response. Default value is None. - :type include: list[str or ~azure.storage.blob.models.ListBlobsIncludeItem] - :param start_from: Specifies the relative path to list paths from. For non-recursive list, only - one entity level is supported; For recursive list, multiple entity levels are supported. - (Inclusive). Default value is None. - :type start_from: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: ListBlobsFlatSegmentResponse or the result of cls(response) - :rtype: ~azure.storage.blob.models.ListBlobsFlatSegmentResponse - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["list"] = kwargs.pop("comp", _params.pop("comp", "list")) - cls: ClsType[_models.ListBlobsFlatSegmentResponse] = kwargs.pop("cls", None) - - _request = build_list_blob_flat_segment_request( - url=self._config.url, - version=self._config.version, - prefix=prefix, - marker=marker, - maxresults=maxresults, - include=include, - start_from=start_from, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("ListBlobsFlatSegmentResponse", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def list_blob_hierarchy_segment( - self, - delimiter: str, - prefix: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.ListBlobsIncludeItem]]] = None, - start_from: Optional[str] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> _models.ListBlobsHierarchySegmentResponse: - """[Update] The List Blobs operation returns a list of the blobs under the specified container. - - :param delimiter: When the request includes this parameter, the operation returns a BlobPrefix - element in the response body that acts as a placeholder for all blobs whose names begin with - the same substring up to the appearance of the delimiter character. The delimiter may be a - single character or a string. Required. - :type delimiter: str - :param prefix: Filters the results to return only containers whose name begins with the - specified prefix. Default value is None. - :type prefix: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param include: Include this parameter to specify one or more datasets to include in the - response. Default value is None. - :type include: list[str or ~azure.storage.blob.models.ListBlobsIncludeItem] - :param start_from: Specifies the relative path to list paths from. For non-recursive list, only - one entity level is supported; For recursive list, multiple entity levels are supported. - (Inclusive). Default value is None. - :type start_from: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: ListBlobsHierarchySegmentResponse or the result of cls(response) - :rtype: ~azure.storage.blob.models.ListBlobsHierarchySegmentResponse - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["container"] = kwargs.pop("restype", _params.pop("restype", "container")) - comp: Literal["list"] = kwargs.pop("comp", _params.pop("comp", "list")) - cls: ClsType[_models.ListBlobsHierarchySegmentResponse] = kwargs.pop("cls", None) - - _request = build_list_blob_hierarchy_segment_request( - url=self._config.url, - delimiter=delimiter, - version=self._config.version, - prefix=prefix, - marker=marker, - maxresults=maxresults, - include=include, - start_from=start_from, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("ListBlobsHierarchySegmentResponse", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def get_account_info( # pylint: disable=inconsistent-return-statements - self, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any - ) -> None: - """Returns the sku name and account kind. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["account"] = kwargs.pop("restype", _params.pop("restype", "account")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_get_account_info_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-sku-name"] = self._deserialize("str", response.headers.get("x-ms-sku-name")) - response_headers["x-ms-account-kind"] = self._deserialize("str", response.headers.get("x-ms-account-kind")) - response_headers["x-ms-is-hns-enabled"] = self._deserialize("bool", response.headers.get("x-ms-is-hns-enabled")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_page_blob_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_page_blob_operations.py deleted file mode 100644 index 5b1d83541194..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_page_blob_operations.py +++ /dev/null @@ -1,2267 +0,0 @@ -# pylint: disable=line-too-long,useless-suppression,too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -from collections.abc import MutableMapping -import datetime -from typing import Any, Callable, IO, Literal, Optional, TypeVar, Union - -from azure.core import PipelineClient -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - map_error, -) -from azure.core.pipeline import PipelineResponse -from azure.core.rest import HttpRequest, HttpResponse -from azure.core.tracing.decorator import distributed_trace -from azure.core.utils import case_insensitive_dict - -from .. import models as _models -from .._configuration import AzureBlobStorageConfiguration -from .._utils.serialization import Deserializer, Serializer - -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, dict[str, Any]], Any]] - -_SERIALIZER = Serializer() -_SERIALIZER.client_side_validation = False - - -def build_create_request( # pylint: disable=too-many-locals - url: str, - *, - content_length: int, - blob_content_length: int, - version: str, - timeout: Optional[int] = None, - tier: Optional[Union[str, _models.PremiumPageBlobAccessTier]] = None, - blob_content_type: Optional[str] = None, - blob_content_encoding: Optional[str] = None, - blob_content_language: Optional[str] = None, - blob_content_md5: Optional[bytes] = None, - blob_cache_control: Optional[str] = None, - metadata: Optional[dict[str, str]] = None, - lease_id: Optional[str] = None, - blob_content_disposition: Optional[str] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - blob_sequence_number: int = 0, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - blob_type: Literal["PageBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "PageBlob")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-blob-type"] = _SERIALIZER.header("blob_type", blob_type, "str") - _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") - if tier is not None: - _headers["x-ms-access-tier"] = _SERIALIZER.header("tier", tier, "str") - if blob_content_type is not None: - _headers["x-ms-blob-content-type"] = _SERIALIZER.header("blob_content_type", blob_content_type, "str") - if blob_content_encoding is not None: - _headers["x-ms-blob-content-encoding"] = _SERIALIZER.header( - "blob_content_encoding", blob_content_encoding, "str" - ) - if blob_content_language is not None: - _headers["x-ms-blob-content-language"] = _SERIALIZER.header( - "blob_content_language", blob_content_language, "str" - ) - if blob_content_md5 is not None: - _headers["x-ms-blob-content-md5"] = _SERIALIZER.header("blob_content_md5", blob_content_md5, "bytearray") - if blob_cache_control is not None: - _headers["x-ms-blob-cache-control"] = _SERIALIZER.header("blob_cache_control", blob_cache_control, "str") - if metadata is not None: - _headers["x-ms-meta"] = _SERIALIZER.header("metadata", metadata, "{str}") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if blob_content_disposition is not None: - _headers["x-ms-blob-content-disposition"] = _SERIALIZER.header( - "blob_content_disposition", blob_content_disposition, "str" - ) - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-blob-content-length"] = _SERIALIZER.header("blob_content_length", blob_content_length, "int") - if blob_sequence_number is not None: - _headers["x-ms-blob-sequence-number"] = _SERIALIZER.header("blob_sequence_number", blob_sequence_number, "int") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if blob_tags_string is not None: - _headers["x-ms-tags"] = _SERIALIZER.header("blob_tags_string", blob_tags_string, "str") - if immutability_policy_expiry is not None: - _headers["x-ms-immutability-policy-until-date"] = _SERIALIZER.header( - "immutability_policy_expiry", immutability_policy_expiry, "rfc-1123" - ) - if immutability_policy_mode is not None: - _headers["x-ms-immutability-policy-mode"] = _SERIALIZER.header( - "immutability_policy_mode", immutability_policy_mode, "str" - ) - if legal_hold is not None: - _headers["x-ms-legal-hold"] = _SERIALIZER.header("legal_hold", legal_hold, "bool") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_upload_pages_request( # pylint: disable=too-many-locals - url: str, - *, - content_length: int, - content: IO[bytes], - version: str, - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - timeout: Optional[int] = None, - range: Optional[str] = None, - lease_id: Optional[str] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - if_sequence_number_less_than_or_equal_to: Optional[int] = None, - if_sequence_number_less_than: Optional[int] = None, - if_sequence_number_equal_to: Optional[int] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - structured_body_type: Optional[str] = None, - structured_content_length: Optional[int] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["page"] = kwargs.pop("comp", _params.pop("comp", "page")) - page_write: Literal["update"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "update")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-page-write"] = _SERIALIZER.header("page_write", page_write, "str") - _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") - if transactional_content_md5 is not None: - _headers["Content-MD5"] = _SERIALIZER.header( - "transactional_content_md5", transactional_content_md5, "bytearray" - ) - if transactional_content_crc64 is not None: - _headers["x-ms-content-crc64"] = _SERIALIZER.header( - "transactional_content_crc64", transactional_content_crc64, "bytearray" - ) - if range is not None: - _headers["x-ms-range"] = _SERIALIZER.header("range", range, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if if_sequence_number_less_than_or_equal_to is not None: - _headers["x-ms-if-sequence-number-le"] = _SERIALIZER.header( - "if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, "int" - ) - if if_sequence_number_less_than is not None: - _headers["x-ms-if-sequence-number-lt"] = _SERIALIZER.header( - "if_sequence_number_less_than", if_sequence_number_less_than, "int" - ) - if if_sequence_number_equal_to is not None: - _headers["x-ms-if-sequence-number-eq"] = _SERIALIZER.header( - "if_sequence_number_equal_to", if_sequence_number_equal_to, "int" - ) - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if structured_body_type is not None: - _headers["x-ms-structured-body"] = _SERIALIZER.header("structured_body_type", structured_body_type, "str") - if structured_content_length is not None: - _headers["x-ms-structured-content-length"] = _SERIALIZER.header( - "structured_content_length", structured_content_length, "int" - ) - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, content=content, **kwargs) - - -def build_clear_pages_request( # pylint: disable=too-many-locals - url: str, - *, - content_length: int, - version: str, - timeout: Optional[int] = None, - range: Optional[str] = None, - lease_id: Optional[str] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - if_sequence_number_less_than_or_equal_to: Optional[int] = None, - if_sequence_number_less_than: Optional[int] = None, - if_sequence_number_equal_to: Optional[int] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["page"] = kwargs.pop("comp", _params.pop("comp", "page")) - page_write: Literal["clear"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "clear")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-page-write"] = _SERIALIZER.header("page_write", page_write, "str") - _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") - if range is not None: - _headers["x-ms-range"] = _SERIALIZER.header("range", range, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if if_sequence_number_less_than_or_equal_to is not None: - _headers["x-ms-if-sequence-number-le"] = _SERIALIZER.header( - "if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, "int" - ) - if if_sequence_number_less_than is not None: - _headers["x-ms-if-sequence-number-lt"] = _SERIALIZER.header( - "if_sequence_number_less_than", if_sequence_number_less_than, "int" - ) - if if_sequence_number_equal_to is not None: - _headers["x-ms-if-sequence-number-eq"] = _SERIALIZER.header( - "if_sequence_number_equal_to", if_sequence_number_equal_to, "int" - ) - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_upload_pages_from_url_request( # pylint: disable=too-many-locals,too-many-statements,too-many-branches - url: str, - *, - source_url: str, - source_range: str, - content_length: int, - range: str, - version: str, - source_content_md5: Optional[bytes] = None, - source_contentcrc64: Optional[bytes] = None, - timeout: Optional[int] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - lease_id: Optional[str] = None, - if_sequence_number_less_than_or_equal_to: Optional[int] = None, - if_sequence_number_less_than: Optional[int] = None, - if_sequence_number_equal_to: Optional[int] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - source_if_modified_since: Optional[datetime.datetime] = None, - source_if_unmodified_since: Optional[datetime.datetime] = None, - source_if_match: Optional[str] = None, - source_if_none_match: Optional[str] = None, - request_id_parameter: Optional[str] = None, - copy_source_authorization: Optional[str] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - source_encryption_key: Optional[str] = None, - source_encryption_key_sha256: Optional[str] = None, - source_encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["page"] = kwargs.pop("comp", _params.pop("comp", "page")) - page_write: Literal["update"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "update")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-page-write"] = _SERIALIZER.header("page_write", page_write, "str") - _headers["x-ms-copy-source"] = _SERIALIZER.header("source_url", source_url, "str") - _headers["x-ms-source-range"] = _SERIALIZER.header("source_range", source_range, "str") - if source_content_md5 is not None: - _headers["x-ms-source-content-md5"] = _SERIALIZER.header("source_content_md5", source_content_md5, "bytearray") - if source_contentcrc64 is not None: - _headers["x-ms-source-content-crc64"] = _SERIALIZER.header( - "source_contentcrc64", source_contentcrc64, "bytearray" - ) - _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") - _headers["x-ms-range"] = _SERIALIZER.header("range", range, "str") - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_sequence_number_less_than_or_equal_to is not None: - _headers["x-ms-if-sequence-number-le"] = _SERIALIZER.header( - "if_sequence_number_less_than_or_equal_to", if_sequence_number_less_than_or_equal_to, "int" - ) - if if_sequence_number_less_than is not None: - _headers["x-ms-if-sequence-number-lt"] = _SERIALIZER.header( - "if_sequence_number_less_than", if_sequence_number_less_than, "int" - ) - if if_sequence_number_equal_to is not None: - _headers["x-ms-if-sequence-number-eq"] = _SERIALIZER.header( - "if_sequence_number_equal_to", if_sequence_number_equal_to, "int" - ) - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - if source_if_modified_since is not None: - _headers["x-ms-source-if-modified-since"] = _SERIALIZER.header( - "source_if_modified_since", source_if_modified_since, "rfc-1123" - ) - if source_if_unmodified_since is not None: - _headers["x-ms-source-if-unmodified-since"] = _SERIALIZER.header( - "source_if_unmodified_since", source_if_unmodified_since, "rfc-1123" - ) - if source_if_match is not None: - _headers["x-ms-source-if-match"] = _SERIALIZER.header("source_if_match", source_if_match, "str") - if source_if_none_match is not None: - _headers["x-ms-source-if-none-match"] = _SERIALIZER.header("source_if_none_match", source_if_none_match, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if copy_source_authorization is not None: - _headers["x-ms-copy-source-authorization"] = _SERIALIZER.header( - "copy_source_authorization", copy_source_authorization, "str" - ) - if file_request_intent is not None: - _headers["x-ms-file-request-intent"] = _SERIALIZER.header("file_request_intent", file_request_intent, "str") - if source_encryption_key is not None: - _headers["x-ms-source-encryption-key"] = _SERIALIZER.header( - "source_encryption_key", source_encryption_key, "str" - ) - if source_encryption_key_sha256 is not None: - _headers["x-ms-source-encryption-key-sha256"] = _SERIALIZER.header( - "source_encryption_key_sha256", source_encryption_key_sha256, "str" - ) - if source_encryption_algorithm is not None: - _headers["x-ms-source-encryption-algorithm"] = _SERIALIZER.header( - "source_encryption_algorithm", source_encryption_algorithm, "str" - ) - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_get_page_ranges_request( - url: str, - *, - version: str, - snapshot: Optional[str] = None, - timeout: Optional[int] = None, - range: Optional[str] = None, - lease_id: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["pagelist"] = kwargs.pop("comp", _params.pop("comp", "pagelist")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if snapshot is not None: - _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - if marker is not None: - _params["marker"] = _SERIALIZER.query("marker", marker, "str") - if maxresults is not None: - _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int", minimum=1) - - # Construct headers - if range is not None: - _headers["x-ms-range"] = _SERIALIZER.header("range", range, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_get_page_ranges_diff_request( - url: str, - *, - version: str, - snapshot: Optional[str] = None, - timeout: Optional[int] = None, - prevsnapshot: Optional[str] = None, - prev_snapshot_url: Optional[str] = None, - range: Optional[str] = None, - lease_id: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["pagelist"] = kwargs.pop("comp", _params.pop("comp", "pagelist")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if snapshot is not None: - _params["snapshot"] = _SERIALIZER.query("snapshot", snapshot, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - if prevsnapshot is not None: - _params["prevsnapshot"] = _SERIALIZER.query("prevsnapshot", prevsnapshot, "str") - if marker is not None: - _params["marker"] = _SERIALIZER.query("marker", marker, "str") - if maxresults is not None: - _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int", minimum=1) - - # Construct headers - if prev_snapshot_url is not None: - _headers["x-ms-previous-snapshot-url"] = _SERIALIZER.header("prev_snapshot_url", prev_snapshot_url, "str") - if range is not None: - _headers["x-ms-range"] = _SERIALIZER.header("range", range, "str") - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_resize_request( - url: str, - *, - blob_content_length: int, - version: str, - timeout: Optional[int] = None, - lease_id: Optional[str] = None, - encryption_key: Optional[str] = None, - encryption_key_sha256: Optional[str] = None, - encryption_algorithm: Optional[Union[str, _models.EncryptionAlgorithmType]] = None, - encryption_scope: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if encryption_key is not None: - _headers["x-ms-encryption-key"] = _SERIALIZER.header("encryption_key", encryption_key, "str") - if encryption_key_sha256 is not None: - _headers["x-ms-encryption-key-sha256"] = _SERIALIZER.header( - "encryption_key_sha256", encryption_key_sha256, "str" - ) - if encryption_algorithm is not None: - _headers["x-ms-encryption-algorithm"] = _SERIALIZER.header("encryption_algorithm", encryption_algorithm, "str") - if encryption_scope is not None: - _headers["x-ms-encryption-scope"] = _SERIALIZER.header("encryption_scope", encryption_scope, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-blob-content-length"] = _SERIALIZER.header("blob_content_length", blob_content_length, "int") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_update_sequence_number_request( - url: str, - *, - sequence_number_action: Union[str, _models.SequenceNumberActionType], - version: str, - timeout: Optional[int] = None, - lease_id: Optional[str] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - blob_sequence_number: int = 0, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if lease_id is not None: - _headers["x-ms-lease-id"] = _SERIALIZER.header("lease_id", lease_id, "str") - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-sequence-number-action"] = _SERIALIZER.header( - "sequence_number_action", sequence_number_action, "str" - ) - if blob_sequence_number is not None: - _headers["x-ms-blob-sequence-number"] = _SERIALIZER.header("blob_sequence_number", blob_sequence_number, "int") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_copy_incremental_request( - url: str, - *, - copy_source: str, - version: str, - timeout: Optional[int] = None, - if_modified_since: Optional[datetime.datetime] = None, - if_unmodified_since: Optional[datetime.datetime] = None, - if_match: Optional[str] = None, - if_none_match: Optional[str] = None, - if_tags: Optional[str] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["incrementalcopy"] = kwargs.pop("comp", _params.pop("comp", "incrementalcopy")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - if if_modified_since is not None: - _headers["If-Modified-Since"] = _SERIALIZER.header("if_modified_since", if_modified_since, "rfc-1123") - if if_unmodified_since is not None: - _headers["If-Unmodified-Since"] = _SERIALIZER.header("if_unmodified_since", if_unmodified_since, "rfc-1123") - if if_match is not None: - _headers["If-Match"] = _SERIALIZER.header("if_match", if_match, "str") - if if_none_match is not None: - _headers["If-None-Match"] = _SERIALIZER.header("if_none_match", if_none_match, "str") - if if_tags is not None: - _headers["x-ms-if-tags"] = _SERIALIZER.header("if_tags", if_tags, "str") - _headers["x-ms-copy-source"] = _SERIALIZER.header("copy_source", copy_source, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - - -class PageBlobOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.storage.blob.AzureBlobStorage`'s - :attr:`page_blob` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: AzureBlobStorageConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace - def create( # pylint: disable=inconsistent-return-statements,too-many-locals - self, - content_length: int, - blob_content_length: int, - timeout: Optional[int] = None, - tier: Optional[Union[str, _models.PremiumPageBlobAccessTier]] = None, - metadata: Optional[dict[str, str]] = None, - blob_sequence_number: int = 0, - request_id_parameter: Optional[str] = None, - blob_tags_string: Optional[str] = None, - immutability_policy_expiry: Optional[datetime.datetime] = None, - immutability_policy_mode: Optional[Union[str, _models.BlobImmutabilityPolicyMode]] = None, - legal_hold: Optional[bool] = None, - blob_http_headers: Optional[_models.BlobHTTPHeaders] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Create operation creates a new page blob. - - :param content_length: The length of the request. Required. - :type content_length: int - :param blob_content_length: This header specifies the maximum size for the page blob, up to 1 - TB. The page blob size must be aligned to a 512-byte boundary. Required. - :type blob_content_length: int - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param tier: Optional. Indicates the tier to be set on the page blob. Known values are: "P4", - "P6", "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", and "P80". Default value is None. - :type tier: str or ~azure.storage.blob.models.PremiumPageBlobAccessTier - :param metadata: Optional. Specifies a user-defined name-value pair associated with the blob. - If no name-value pairs are specified, the operation will copy the metadata from the source blob - or file to the destination blob. If one or more name-value pairs are specified, the destination - blob is created with the specified metadata, and metadata is not copied from the source blob or - file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming - rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more - information. Default value is None. - :type metadata: dict[str, str] - :param blob_sequence_number: Set for page blobs only. The sequence number is a user-controlled - value that you can use to track requests. The value of the sequence number must be between 0 - and 2^63 - 1. Default value is 0. - :type blob_sequence_number: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param blob_tags_string: Optional. Used to set blob tags in various blob operations. Default - value is None. - :type blob_tags_string: str - :param immutability_policy_expiry: Specifies the date time when the blobs immutability policy - is set to expire. Default value is None. - :type immutability_policy_expiry: ~datetime.datetime - :param immutability_policy_mode: Specifies the immutability policy mode to set on the blob. - Known values are: "Mutable", "Unlocked", and "Locked". Default value is None. - :type immutability_policy_mode: str or ~azure.storage.blob.models.BlobImmutabilityPolicyMode - :param legal_hold: Specified if a legal hold should be set on the blob. Default value is None. - :type legal_hold: bool - :param blob_http_headers: Parameter group. Default value is None. - :type blob_http_headers: ~azure.storage.blob.models.BlobHTTPHeaders - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - blob_type: Literal["PageBlob"] = kwargs.pop("blob_type", _headers.pop("x-ms-blob-type", "PageBlob")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _blob_content_type = None - _blob_content_encoding = None - _blob_content_language = None - _blob_content_md5 = None - _blob_cache_control = None - _lease_id = None - _blob_content_disposition = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if blob_http_headers is not None: - _blob_cache_control = blob_http_headers.blob_cache_control - _blob_content_disposition = blob_http_headers.blob_content_disposition - _blob_content_encoding = blob_http_headers.blob_content_encoding - _blob_content_language = blob_http_headers.blob_content_language - _blob_content_md5 = blob_http_headers.blob_content_md5 - _blob_content_type = blob_http_headers.blob_content_type - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_create_request( - url=self._config.url, - content_length=content_length, - blob_content_length=blob_content_length, - version=self._config.version, - timeout=timeout, - tier=tier, - blob_content_type=_blob_content_type, - blob_content_encoding=_blob_content_encoding, - blob_content_language=_blob_content_language, - blob_content_md5=_blob_content_md5, - blob_cache_control=_blob_cache_control, - metadata=metadata, - lease_id=_lease_id, - blob_content_disposition=_blob_content_disposition, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - blob_sequence_number=blob_sequence_number, - request_id_parameter=request_id_parameter, - blob_tags_string=blob_tags_string, - immutability_policy_expiry=immutability_policy_expiry, - immutability_policy_mode=immutability_policy_mode, - legal_hold=legal_hold, - blob_type=blob_type, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["x-ms-version-id"] = self._deserialize("str", response.headers.get("x-ms-version-id")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def upload_pages( # pylint: disable=inconsistent-return-statements,too-many-locals - self, - content_length: int, - body: IO[bytes], - transactional_content_md5: Optional[bytes] = None, - transactional_content_crc64: Optional[bytes] = None, - timeout: Optional[int] = None, - range: Optional[str] = None, - request_id_parameter: Optional[str] = None, - structured_body_type: Optional[str] = None, - structured_content_length: Optional[int] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - sequence_number_access_conditions: Optional[_models.SequenceNumberAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Upload Pages operation writes a range of pages to a page blob. - - :param content_length: The length of the request. Required. - :type content_length: int - :param body: Initial data. Required. - :type body: IO[bytes] - :param transactional_content_md5: Specify the transactional md5 for the body, to be validated - by the service. Default value is None. - :type transactional_content_md5: bytes - :param transactional_content_crc64: Specify the transactional crc64 for the body, to be - validated by the service. Default value is None. - :type transactional_content_crc64: bytes - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param range: Return only the bytes of the blob in the specified range. Default value is None. - :type range: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param structured_body_type: Required if the request body is a structured message. Specifies - the message schema version and properties. Default value is None. - :type structured_body_type: str - :param structured_content_length: Required if the request body is a structured message. - Specifies the length of the blob/file content inside the message body. Will always be smaller - than Content-Length. Default value is None. - :type structured_content_length: int - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param sequence_number_access_conditions: Parameter group. Default value is None. - :type sequence_number_access_conditions: - ~azure.storage.blob.models.SequenceNumberAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["page"] = kwargs.pop("comp", _params.pop("comp", "page")) - page_write: Literal["update"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "update")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_sequence_number_less_than_or_equal_to = None - _if_sequence_number_less_than = None - _if_sequence_number_equal_to = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if sequence_number_access_conditions is not None: - _if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to - _if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than - _if_sequence_number_less_than_or_equal_to = ( - sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to - ) - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - _content = body - - _request = build_upload_pages_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - transactional_content_md5=transactional_content_md5, - transactional_content_crc64=transactional_content_crc64, - timeout=timeout, - range=range, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_sequence_number_less_than_or_equal_to=_if_sequence_number_less_than_or_equal_to, - if_sequence_number_less_than=_if_sequence_number_less_than, - if_sequence_number_equal_to=_if_sequence_number_equal_to, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - structured_body_type=structured_body_type, - structured_content_length=structured_content_length, - comp=comp, - page_write=page_write, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - response_headers["x-ms-structured-body"] = self._deserialize( - "str", response.headers.get("x-ms-structured-body") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def clear_pages( # pylint: disable=inconsistent-return-statements - self, - content_length: int, - timeout: Optional[int] = None, - range: Optional[str] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - sequence_number_access_conditions: Optional[_models.SequenceNumberAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Clear Pages operation clears a set of pages from a page blob. - - :param content_length: The length of the request. Required. - :type content_length: int - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param range: Return only the bytes of the blob in the specified range. Default value is None. - :type range: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param sequence_number_access_conditions: Parameter group. Default value is None. - :type sequence_number_access_conditions: - ~azure.storage.blob.models.SequenceNumberAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["page"] = kwargs.pop("comp", _params.pop("comp", "page")) - page_write: Literal["clear"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "clear")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_sequence_number_less_than_or_equal_to = None - _if_sequence_number_less_than = None - _if_sequence_number_equal_to = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if sequence_number_access_conditions is not None: - _if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to - _if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than - _if_sequence_number_less_than_or_equal_to = ( - sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to - ) - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_clear_pages_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - timeout=timeout, - range=range, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_sequence_number_less_than_or_equal_to=_if_sequence_number_less_than_or_equal_to, - if_sequence_number_less_than=_if_sequence_number_less_than, - if_sequence_number_equal_to=_if_sequence_number_equal_to, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - page_write=page_write, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def upload_pages_from_url( # pylint: disable=inconsistent-return-statements,too-many-locals - self, - source_url: str, - source_range: str, - content_length: int, - range: str, - source_content_md5: Optional[bytes] = None, - source_contentcrc64: Optional[bytes] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - copy_source_authorization: Optional[str] = None, - file_request_intent: Optional[Union[str, _models.FileShareTokenIntent]] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - sequence_number_access_conditions: Optional[_models.SequenceNumberAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - source_modified_access_conditions: Optional[_models.SourceModifiedAccessConditions] = None, - source_cpk_info: Optional[_models.SourceCpkInfo] = None, - **kwargs: Any - ) -> None: - """The Upload Pages operation writes a range of pages to a page blob where the contents are read - from a URL. - - :param source_url: Specify a URL to the copy source. Required. - :type source_url: str - :param source_range: Bytes of source data in the specified range. The length of this range - should match the ContentLength header and x-ms-range/Range destination range header. Required. - :type source_range: str - :param content_length: The length of the request. Required. - :type content_length: int - :param range: The range of bytes to which the source range would be written. The range should - be 512 aligned and range-end is required. Required. - :type range: str - :param source_content_md5: Specify the md5 calculated for the range of bytes that must be read - from the copy source. Default value is None. - :type source_content_md5: bytes - :param source_contentcrc64: Specify the crc64 calculated for the range of bytes that must be - read from the copy source. Default value is None. - :type source_contentcrc64: bytes - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param copy_source_authorization: Only Bearer type is supported. Credentials should be a valid - OAuth access token to copy source. Default value is None. - :type copy_source_authorization: str - :param file_request_intent: Valid value is backup. "backup" Default value is None. - :type file_request_intent: str or ~azure.storage.blob.models.FileShareTokenIntent - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param sequence_number_access_conditions: Parameter group. Default value is None. - :type sequence_number_access_conditions: - ~azure.storage.blob.models.SequenceNumberAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :param source_modified_access_conditions: Parameter group. Default value is None. - :type source_modified_access_conditions: - ~azure.storage.blob.models.SourceModifiedAccessConditions - :param source_cpk_info: Parameter group. Default value is None. - :type source_cpk_info: ~azure.storage.blob.models.SourceCpkInfo - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["page"] = kwargs.pop("comp", _params.pop("comp", "page")) - page_write: Literal["update"] = kwargs.pop("page_write", _headers.pop("x-ms-page-write", "update")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _lease_id = None - _if_sequence_number_less_than_or_equal_to = None - _if_sequence_number_less_than = None - _if_sequence_number_equal_to = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - _source_if_modified_since = None - _source_if_unmodified_since = None - _source_if_match = None - _source_if_none_match = None - _source_encryption_key = None - _source_encryption_key_sha256 = None - _source_encryption_algorithm = None - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if sequence_number_access_conditions is not None: - _if_sequence_number_equal_to = sequence_number_access_conditions.if_sequence_number_equal_to - _if_sequence_number_less_than = sequence_number_access_conditions.if_sequence_number_less_than - _if_sequence_number_less_than_or_equal_to = ( - sequence_number_access_conditions.if_sequence_number_less_than_or_equal_to - ) - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - if source_modified_access_conditions is not None: - _source_if_match = source_modified_access_conditions.source_if_match - _source_if_modified_since = source_modified_access_conditions.source_if_modified_since - _source_if_none_match = source_modified_access_conditions.source_if_none_match - _source_if_unmodified_since = source_modified_access_conditions.source_if_unmodified_since - if source_cpk_info is not None: - _source_encryption_algorithm = source_cpk_info.source_encryption_algorithm - _source_encryption_key = source_cpk_info.source_encryption_key - _source_encryption_key_sha256 = source_cpk_info.source_encryption_key_sha256 - - _request = build_upload_pages_from_url_request( - url=self._config.url, - source_url=source_url, - source_range=source_range, - content_length=content_length, - range=range, - version=self._config.version, - source_content_md5=source_content_md5, - source_contentcrc64=source_contentcrc64, - timeout=timeout, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - lease_id=_lease_id, - if_sequence_number_less_than_or_equal_to=_if_sequence_number_less_than_or_equal_to, - if_sequence_number_less_than=_if_sequence_number_less_than, - if_sequence_number_equal_to=_if_sequence_number_equal_to, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - source_if_modified_since=_source_if_modified_since, - source_if_unmodified_since=_source_if_unmodified_since, - source_if_match=_source_if_match, - source_if_none_match=_source_if_none_match, - request_id_parameter=request_id_parameter, - copy_source_authorization=copy_source_authorization, - file_request_intent=file_request_intent, - source_encryption_key=_source_encryption_key, - source_encryption_key_sha256=_source_encryption_key_sha256, - source_encryption_algorithm=_source_encryption_algorithm, - comp=comp, - page_write=page_write, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["Content-MD5"] = self._deserialize("bytearray", response.headers.get("Content-MD5")) - response_headers["x-ms-content-crc64"] = self._deserialize( - "bytearray", response.headers.get("x-ms-content-crc64") - ) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-request-server-encrypted"] = self._deserialize( - "bool", response.headers.get("x-ms-request-server-encrypted") - ) - response_headers["x-ms-encryption-key-sha256"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-key-sha256") - ) - response_headers["x-ms-encryption-scope"] = self._deserialize( - "str", response.headers.get("x-ms-encryption-scope") - ) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def get_page_ranges( - self, - snapshot: Optional[str] = None, - timeout: Optional[int] = None, - range: Optional[str] = None, - request_id_parameter: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> _models.PageList: - """The Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot - of a page blob. - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param range: Return only the bytes of the blob in the specified range. Default value is None. - :type range: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: PageList or the result of cls(response) - :rtype: ~azure.storage.blob.models.PageList - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["pagelist"] = kwargs.pop("comp", _params.pop("comp", "pagelist")) - cls: ClsType[_models.PageList] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_get_page_ranges_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - timeout=timeout, - range=range, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - marker=marker, - maxresults=maxresults, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["x-ms-blob-content-length"] = self._deserialize( - "int", response.headers.get("x-ms-blob-content-length") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("PageList", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def get_page_ranges_diff( - self, - snapshot: Optional[str] = None, - timeout: Optional[int] = None, - prevsnapshot: Optional[str] = None, - prev_snapshot_url: Optional[str] = None, - range: Optional[str] = None, - request_id_parameter: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> _models.PageList: - """The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob that - were changed between target blob and previous snapshot. - - :param snapshot: The snapshot parameter is an opaque DateTime value that, when present, - specifies the blob snapshot to retrieve. For more information on working with blob snapshots, - see :code:`Creating - a Snapshot of a Blob.`. Default value is None. - :type snapshot: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param prevsnapshot: Optional in version 2015-07-08 and newer. The prevsnapshot parameter is a - DateTime value that specifies that the response will contain only pages that were changed - between target blob and previous snapshot. Changed pages include both updated and cleared - pages. The target blob may be a snapshot, as long as the snapshot specified by prevsnapshot is - the older of the two. Note that incremental snapshots are currently supported only for blobs - created on or after January 1, 2016. Default value is None. - :type prevsnapshot: str - :param prev_snapshot_url: Optional. This header is only supported in service versions - 2019-04-19 and after and specifies the URL of a previous snapshot of the target blob. The - response will only contain pages that were changed between the target blob and its previous - snapshot. Default value is None. - :type prev_snapshot_url: str - :param range: Return only the bytes of the blob in the specified range. Default value is None. - :type range: str - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: PageList or the result of cls(response) - :rtype: ~azure.storage.blob.models.PageList - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["pagelist"] = kwargs.pop("comp", _params.pop("comp", "pagelist")) - cls: ClsType[_models.PageList] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_get_page_ranges_diff_request( - url=self._config.url, - version=self._config.version, - snapshot=snapshot, - timeout=timeout, - prevsnapshot=prevsnapshot, - prev_snapshot_url=prev_snapshot_url, - range=range, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - marker=marker, - maxresults=maxresults, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["x-ms-blob-content-length"] = self._deserialize( - "int", response.headers.get("x-ms-blob-content-length") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("PageList", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def resize( # pylint: disable=inconsistent-return-statements - self, - blob_content_length: int, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - cpk_info: Optional[_models.CpkInfo] = None, - cpk_scope_info: Optional[_models.CpkScopeInfo] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """Resize the Blob. - - :param blob_content_length: This header specifies the maximum size for the page blob, up to 1 - TB. The page blob size must be aligned to a 512-byte boundary. Required. - :type blob_content_length: int - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param cpk_info: Parameter group. Default value is None. - :type cpk_info: ~azure.storage.blob.models.CpkInfo - :param cpk_scope_info: Parameter group. Default value is None. - :type cpk_scope_info: ~azure.storage.blob.models.CpkScopeInfo - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _encryption_key = None - _encryption_key_sha256 = None - _encryption_algorithm = None - _encryption_scope = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if cpk_info is not None: - _encryption_algorithm = cpk_info.encryption_algorithm - _encryption_key = cpk_info.encryption_key - _encryption_key_sha256 = cpk_info.encryption_key_sha256 - if cpk_scope_info is not None: - _encryption_scope = cpk_scope_info.encryption_scope - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_resize_request( - url=self._config.url, - blob_content_length=blob_content_length, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - encryption_key=_encryption_key, - encryption_key_sha256=_encryption_key_sha256, - encryption_algorithm=_encryption_algorithm, - encryption_scope=_encryption_scope, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def update_sequence_number( # pylint: disable=inconsistent-return-statements - self, - sequence_number_action: Union[str, _models.SequenceNumberActionType], - timeout: Optional[int] = None, - blob_sequence_number: int = 0, - request_id_parameter: Optional[str] = None, - lease_access_conditions: Optional[_models.LeaseAccessConditions] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """Update the sequence number of the blob. - - :param sequence_number_action: Required if the x-ms-blob-sequence-number header is set for the - request. This property applies to page blobs only. This property indicates how the service - should modify the blob's sequence number. Known values are: "max", "update", and "increment". - Required. - :type sequence_number_action: str or ~azure.storage.blob.models.SequenceNumberActionType - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param blob_sequence_number: Set for page blobs only. The sequence number is a user-controlled - value that you can use to track requests. The value of the sequence number must be between 0 - and 2^63 - 1. Default value is 0. - :type blob_sequence_number: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param lease_access_conditions: Parameter group. Default value is None. - :type lease_access_conditions: ~azure.storage.blob.models.LeaseAccessConditions - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _lease_id = None - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if lease_access_conditions is not None: - _lease_id = lease_access_conditions.lease_id - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_update_sequence_number_request( - url=self._config.url, - sequence_number_action=sequence_number_action, - version=self._config.version, - timeout=timeout, - lease_id=_lease_id, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - blob_sequence_number=blob_sequence_number, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-blob-sequence-number"] = self._deserialize( - "int", response.headers.get("x-ms-blob-sequence-number") - ) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def copy_incremental( # pylint: disable=inconsistent-return-statements - self, - copy_source: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - modified_access_conditions: Optional[_models.ModifiedAccessConditions] = None, - **kwargs: Any - ) -> None: - """The Copy Incremental operation copies a snapshot of the source page blob to a destination page - blob. The snapshot is copied such that only the differential changes between the previously - copied snapshot are transferred to the destination. The copied snapshots are complete copies of - the original snapshot and can be read or copied from as usual. This API is supported since REST - version 2016-05-31. - - :param copy_source: Specifies the name of the source page blob snapshot. This value is a URL of - up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it - would appear in a request URI. The source blob must either be public or must be authenticated - via a shared access signature. Required. - :type copy_source: str - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param modified_access_conditions: Parameter group. Default value is None. - :type modified_access_conditions: ~azure.storage.blob.models.ModifiedAccessConditions - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["incrementalcopy"] = kwargs.pop("comp", _params.pop("comp", "incrementalcopy")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _if_modified_since = None - _if_unmodified_since = None - _if_match = None - _if_none_match = None - _if_tags = None - if modified_access_conditions is not None: - _if_match = modified_access_conditions.if_match - _if_modified_since = modified_access_conditions.if_modified_since - _if_none_match = modified_access_conditions.if_none_match - _if_tags = modified_access_conditions.if_tags - _if_unmodified_since = modified_access_conditions.if_unmodified_since - - _request = build_copy_incremental_request( - url=self._config.url, - copy_source=copy_source, - version=self._config.version, - timeout=timeout, - if_modified_since=_if_modified_since, - if_unmodified_since=_if_unmodified_since, - if_match=_if_match, - if_none_match=_if_none_match, - if_tags=_if_tags, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["ETag"] = self._deserialize("str", response.headers.get("ETag")) - response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified")) - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-copy-id"] = self._deserialize("str", response.headers.get("x-ms-copy-id")) - response_headers["x-ms-copy-status"] = self._deserialize("str", response.headers.get("x-ms-copy-status")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_patch.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_patch.py deleted file mode 100644 index f7dd32510333..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_patch.py +++ /dev/null @@ -1,20 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -"""Customize generated code here. - -Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize -""" -from typing import List - -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level - - -def patch_sdk(): - """Do not remove from this file. - - `patch_sdk` is a last resort escape hatch that allows you to do customizations - you can't accomplish using the techniques described in - https://aka.ms/azsdk/python/dpcodegen/python/customize - """ diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_service_operations.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_service_operations.py deleted file mode 100644 index 5edf48262218..000000000000 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/operations/_service_operations.py +++ /dev/null @@ -1,1082 +0,0 @@ -# pylint: disable=line-too-long,useless-suppression,too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -from collections.abc import MutableMapping -from typing import Any, Callable, IO, Iterator, Literal, Optional, TypeVar, Union - -from azure.core import PipelineClient -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - StreamClosedError, - StreamConsumedError, - map_error, -) -from azure.core.pipeline import PipelineResponse -from azure.core.rest import HttpRequest, HttpResponse -from azure.core.tracing.decorator import distributed_trace -from azure.core.utils import case_insensitive_dict - -from .. import models as _models -from .._configuration import AzureBlobStorageConfiguration -from .._utils.serialization import Deserializer, Serializer - -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, dict[str, Any]], Any]] - -_SERIALIZER = Serializer() -_SERIALIZER.client_side_validation = False - - -def build_set_properties_request( - url: str, - *, - content: Any, - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["service"] = kwargs.pop("restype", _params.pop("restype", "service")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, content=content, **kwargs) - - -def build_get_properties_request( - url: str, *, version: str, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["service"] = kwargs.pop("restype", _params.pop("restype", "service")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_get_statistics_request( - url: str, *, version: str, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["service"] = kwargs.pop("restype", _params.pop("restype", "service")) - comp: Literal["stats"] = kwargs.pop("comp", _params.pop("comp", "stats")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_list_containers_segment_request( - url: str, - *, - version: str, - prefix: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.ListContainersIncludeType]]] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["list"] = kwargs.pop("comp", _params.pop("comp", "list")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if prefix is not None: - _params["prefix"] = _SERIALIZER.query("prefix", prefix, "str") - if marker is not None: - _params["marker"] = _SERIALIZER.query("marker", marker, "str") - if maxresults is not None: - _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int", minimum=1) - if include is not None: - _params["include"] = _SERIALIZER.query("include", include, "[str]", div=",") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_get_user_delegation_key_request( - url: str, - *, - content: Any, - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["service"] = kwargs.pop("restype", _params.pop("restype", "service")) - comp: Literal["userdelegationkey"] = kwargs.pop("comp", _params.pop("comp", "userdelegationkey")) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, content=content, **kwargs) - - -def build_get_account_info_request( - url: str, *, version: str, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["account"] = kwargs.pop("restype", _params.pop("restype", "account")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["restype"] = _SERIALIZER.query("restype", restype, "str") - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_submit_batch_request( - url: str, - *, - content_length: int, - content: IO[bytes], - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["batch"] = kwargs.pop("comp", _params.pop("comp", "batch")) - multipart_content_type: Optional[str] = kwargs.pop("multipart_content_type", _headers.pop("Content-Type", None)) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - - # Construct headers - _headers["Content-Length"] = _SERIALIZER.header("content_length", content_length, "int") - if multipart_content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("multipart_content_type", multipart_content_type, "str") - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, content=content, **kwargs) - - -def build_filter_blobs_request( - url: str, - *, - version: str, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - where: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.FilterBlobsIncludeItem]]] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["blobs"] = kwargs.pop("comp", _params.pop("comp", "blobs")) - accept = _headers.pop("Accept", "application/xml") - - # Construct URL - _url = kwargs.pop("template_url", "{url}") - path_format_arguments = { - "url": _SERIALIZER.url("url", url, "str", skip_quote=True), - } - - _url: str = _url.format(**path_format_arguments) # type: ignore - - # Construct parameters - _params["comp"] = _SERIALIZER.query("comp", comp, "str") - if timeout is not None: - _params["timeout"] = _SERIALIZER.query("timeout", timeout, "int", minimum=0) - if where is not None: - _params["where"] = _SERIALIZER.query("where", where, "str") - if marker is not None: - _params["marker"] = _SERIALIZER.query("marker", marker, "str") - if maxresults is not None: - _params["maxresults"] = _SERIALIZER.query("maxresults", maxresults, "int", minimum=1) - if include is not None: - _params["include"] = _SERIALIZER.query("include", include, "[str]", div=",") - - # Construct headers - _headers["x-ms-version"] = _SERIALIZER.header("version", version, "str") - if request_id_parameter is not None: - _headers["x-ms-client-request-id"] = _SERIALIZER.header("request_id_parameter", request_id_parameter, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -class ServiceOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.storage.blob.AzureBlobStorage`'s - :attr:`service` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: AzureBlobStorageConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @distributed_trace - def set_properties( # pylint: disable=inconsistent-return-statements - self, - storage_service_properties: _models.StorageServiceProperties, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> None: - """Sets properties for a storage account's Blob service endpoint, including properties for Storage - Analytics and CORS (Cross-Origin Resource Sharing) rules. - - :param storage_service_properties: The StorageService properties. Required. - :type storage_service_properties: ~azure.storage.blob.models.StorageServiceProperties - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["service"] = kwargs.pop("restype", _params.pop("restype", "service")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _content = self._serialize.body(storage_service_properties, "StorageServiceProperties", is_xml=True) - - _request = build_set_properties_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [202]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def get_properties( - self, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any - ) -> _models.StorageServiceProperties: - """gets the properties of a storage account's Blob service, including properties for Storage - Analytics and CORS (Cross-Origin Resource Sharing) rules. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: StorageServiceProperties or the result of cls(response) - :rtype: ~azure.storage.blob.models.StorageServiceProperties - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["service"] = kwargs.pop("restype", _params.pop("restype", "service")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[_models.StorageServiceProperties] = kwargs.pop("cls", None) - - _request = build_get_properties_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - - deserialized = self._deserialize("StorageServiceProperties", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def get_statistics( - self, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any - ) -> _models.StorageServiceStats: - """Retrieves statistics related to replication for the Blob service. It is only available on the - secondary location endpoint when read-access geo-redundant replication is enabled for the - storage account. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: StorageServiceStats or the result of cls(response) - :rtype: ~azure.storage.blob.models.StorageServiceStats - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["service"] = kwargs.pop("restype", _params.pop("restype", "service")) - comp: Literal["stats"] = kwargs.pop("comp", _params.pop("comp", "stats")) - cls: ClsType[_models.StorageServiceStats] = kwargs.pop("cls", None) - - _request = build_get_statistics_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("StorageServiceStats", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def list_containers_segment( - self, - prefix: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.ListContainersIncludeType]]] = None, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> _models.ListContainersSegmentResponse: - """The List Containers Segment operation returns a list of the containers under the specified - account. - - :param prefix: Filters the results to return only containers whose name begins with the - specified prefix. Default value is None. - :type prefix: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param include: Include this parameter to specify that the container's metadata be returned as - part of the response body. Default value is None. - :type include: list[str or ~azure.storage.blob.models.ListContainersIncludeType] - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: ListContainersSegmentResponse or the result of cls(response) - :rtype: ~azure.storage.blob.models.ListContainersSegmentResponse - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["list"] = kwargs.pop("comp", _params.pop("comp", "list")) - cls: ClsType[_models.ListContainersSegmentResponse] = kwargs.pop("cls", None) - - _request = build_list_containers_segment_request( - url=self._config.url, - version=self._config.version, - prefix=prefix, - marker=marker, - maxresults=maxresults, - include=include, - timeout=timeout, - request_id_parameter=request_id_parameter, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - - deserialized = self._deserialize("ListContainersSegmentResponse", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def get_user_delegation_key( - self, - key_info: _models.KeyInfo, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> _models.UserDelegationKey: - """Retrieves a user delegation key for the Blob service. This is only a valid operation when using - bearer token authentication. - - :param key_info: Key information. Required. - :type key_info: ~azure.storage.blob.models.KeyInfo - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: UserDelegationKey or the result of cls(response) - :rtype: ~azure.storage.blob.models.UserDelegationKey - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["service"] = kwargs.pop("restype", _params.pop("restype", "service")) - comp: Literal["userdelegationkey"] = kwargs.pop("comp", _params.pop("comp", "userdelegationkey")) - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/xml")) - cls: ClsType[_models.UserDelegationKey] = kwargs.pop("cls", None) - - _content = self._serialize.body(key_info, "KeyInfo", is_xml=True) - - _request = build_get_user_delegation_key_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - content_type=content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("UserDelegationKey", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def get_account_info( # pylint: disable=inconsistent-return-statements - self, timeout: Optional[int] = None, request_id_parameter: Optional[str] = None, **kwargs: Any - ) -> None: - """Returns the sku name and account kind. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: None or the result of cls(response) - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - restype: Literal["account"] = kwargs.pop("restype", _params.pop("restype", "account")) - comp: Literal["properties"] = kwargs.pop("comp", _params.pop("comp", "properties")) - cls: ClsType[None] = kwargs.pop("cls", None) - - _request = build_get_account_info_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - restype=restype, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - response_headers["x-ms-sku-name"] = self._deserialize("str", response.headers.get("x-ms-sku-name")) - response_headers["x-ms-account-kind"] = self._deserialize("str", response.headers.get("x-ms-account-kind")) - response_headers["x-ms-is-hns-enabled"] = self._deserialize("bool", response.headers.get("x-ms-is-hns-enabled")) - - if cls: - return cls(pipeline_response, None, response_headers) # type: ignore - - @distributed_trace - def submit_batch( - self, - content_length: int, - body: IO[bytes], - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - **kwargs: Any - ) -> Iterator[bytes]: - """The Batch operation allows multiple API calls to be embedded into a single HTTP request. - - :param content_length: The length of the request. Required. - :type content_length: int - :param body: Initial data. Required. - :type body: IO[bytes] - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :return: Iterator[bytes] or the result of cls(response) - :rtype: Iterator[bytes] - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["batch"] = kwargs.pop("comp", _params.pop("comp", "batch")) - multipart_content_type: str = kwargs.pop( - "multipart_content_type", _headers.pop("Content-Type", "application/xml") - ) - cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - - _content = body - - _request = build_submit_batch_request( - url=self._config.url, - content_length=content_length, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - comp=comp, - multipart_content_type=multipart_content_type, - content=_content, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _decompress = kwargs.pop("decompress", True) - _stream = True - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["Content-Type"] = self._deserialize("str", response.headers.get("Content-Type")) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - - deserialized = response.stream_download(self._client._pipeline, decompress=_decompress) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @distributed_trace - def filter_blobs( - self, - timeout: Optional[int] = None, - request_id_parameter: Optional[str] = None, - where: Optional[str] = None, - marker: Optional[str] = None, - maxresults: Optional[int] = None, - include: Optional[list[Union[str, _models.FilterBlobsIncludeItem]]] = None, - **kwargs: Any - ) -> _models.FilterBlobSegment: - """The Filter Blobs operation enables callers to list blobs across all containers whose tags match - a given search expression. Filter blobs searches across all containers within a storage - account but can be scoped within the expression to a single container. - - :param timeout: The timeout parameter is expressed in seconds. For more information, see - :code:`Setting - Timeouts for Blob Service Operations.`. Default value is None. - :type timeout: int - :param request_id_parameter: Provides a client-generated, opaque value with a 1 KB character - limit that is recorded in the analytics logs when storage analytics logging is enabled. Default - value is None. - :type request_id_parameter: str - :param where: Filters the results to return only to return only blobs whose tags match the - specified expression. Default value is None. - :type where: str - :param marker: A string value that identifies the portion of the list of containers to be - returned with the next listing operation. The operation returns the NextMarker value within the - response body if the listing operation did not return all containers remaining to be listed - with the current page. The NextMarker value can be used as the value for the marker parameter - in a subsequent call to request the next page of list items. The marker value is opaque to the - client. Default value is None. - :type marker: str - :param maxresults: Specifies the maximum number of containers to return. If the request does - not specify maxresults, or specifies a value greater than 5000, the server will return up to - 5000 items. Note that if the listing operation crosses a partition boundary, then the service - will return a continuation token for retrieving the remainder of the results. For this reason, - it is possible that the service will return fewer results than specified by maxresults, or than - the default of 5000. Default value is None. - :type maxresults: int - :param include: Include this parameter to specify one or more datasets to include in the - response. Default value is None. - :type include: list[str or ~azure.storage.blob.models.FilterBlobsIncludeItem] - :return: FilterBlobSegment or the result of cls(response) - :rtype: ~azure.storage.blob.models.FilterBlobSegment - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - comp: Literal["blobs"] = kwargs.pop("comp", _params.pop("comp", "blobs")) - cls: ClsType[_models.FilterBlobSegment] = kwargs.pop("cls", None) - - _request = build_filter_blobs_request( - url=self._config.url, - version=self._config.version, - timeout=timeout, - request_id_parameter=request_id_parameter, - where=where, - marker=marker, - maxresults=maxresults, - include=include, - comp=comp, - headers=_headers, - params=_params, - ) - _request.url = self._client.format_url(_request.url) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = self._deserialize.failsafe_deserialize( - _models.StorageError, - pipeline_response, - ) - raise HttpResponseError(response=response, model=error) - - response_headers = {} - response_headers["x-ms-client-request-id"] = self._deserialize( - "str", response.headers.get("x-ms-client-request-id") - ) - response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id")) - response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version")) - response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date")) - - deserialized = self._deserialize("FilterBlobSegment", pipeline_response.http_response) - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/pyproject.toml b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/pyproject.toml new file mode 100644 index 000000000000..aea3ce74fa6e --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/pyproject.toml @@ -0,0 +1,61 @@ +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +[build-system] +requires = ["setuptools>=77.0.3", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "azure-storage-blob" +authors = [ + { name = "Microsoft Corporation", email = "azpysdkhelp@microsoft.com" }, +] +description = "Microsoft Corporation Azure Storage Blob Client Library for Python" +license = "MIT" +classifiers = [ + "Development Status :: 4 - Beta", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", +] +requires-python = ">=3.9" +keywords = ["azure", "azure sdk"] + +dependencies = [ + "isodate>=0.6.1", + "azure-core>=1.37.0", + "typing-extensions>=4.6.0", +] +dynamic = [ +"version", "readme" +] + +[project.urls] +repository = "https://github.com/Azure/azure-sdk-for-python" + +[tool.setuptools.dynamic] +version = {attr = "azure.storage.blobs._version.VERSION"} +readme = {file = ["README.md", "CHANGELOG.md"], content-type = "text/markdown"} + +[tool.setuptools.packages.find] +exclude = [ + "tests*", + "generated_tests*", + "samples*", + "generated_samples*", + "doc*", + "azure", + "azure.storage", +] + +[tool.setuptools.package-data] +pytyped = ["py.typed"] diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/tsp-location.yaml b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/tsp-location.yaml new file mode 100644 index 000000000000..54578d58cc88 --- /dev/null +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_generated/tsp-location.yaml @@ -0,0 +1,4 @@ +directory: specification/storage/Microsoft.BlobStorage +commit: +repo: +additionalDirectories: diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_list_blobs_helper.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_list_blobs_helper.py index 4d55a6c647eb..1e0100f58df0 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_list_blobs_helper.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_list_blobs_helper.py @@ -17,8 +17,8 @@ load_xml_string, parse_tags ) -from ._generated.models import BlobItemInternal, BlobPrefix as GenBlobPrefix, FilterBlobItem -from ._generated._utils.serialization import Deserializer +from ._generated.azure.storage.blobs.models import BlobItemInternal, BlobPrefix as GenBlobPrefix, FilterBlobItem +from ._generated.azure.storage.blobs._utils.serialization import Deserializer from ._models import BlobProperties, FilteredBlob from ._shared.models import DictMixin from ._shared.response_handlers import ( diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_models.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_models.py index b849e8948808..5fa733af20f3 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_models.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_models.py @@ -16,17 +16,17 @@ from ._shared import decode_base64_to_bytes from ._shared.response_handlers import return_context_and_deserialized, process_storage_error from ._shared.models import DictMixin, get_enum_value -from ._generated.models import AccessPolicy as GenAccessPolicy -from ._generated.models import ArrowField -from ._generated.models import CorsRule as GeneratedCorsRule -from ._generated.models import Logging as GeneratedLogging -from ._generated.models import Metrics as GeneratedMetrics -from ._generated.models import RetentionPolicy as GeneratedRetentionPolicy -from ._generated.models import StaticWebsite as GeneratedStaticWebsite +from ._generated.azure.storage.blobs.models import AccessPolicy as GenAccessPolicy +from ._generated.azure.storage.blobs.models import ArrowField +from ._generated.azure.storage.blobs.models import CorsRule as GeneratedCorsRule +from ._generated.azure.storage.blobs.models import Logging as GeneratedLogging +from ._generated.azure.storage.blobs.models import Metrics as GeneratedMetrics +from ._generated.azure.storage.blobs.models import RetentionPolicy as GeneratedRetentionPolicy +from ._generated.azure.storage.blobs.models import StaticWebsite as GeneratedStaticWebsite if TYPE_CHECKING: from datetime import datetime - from ._generated.models import PageList + from ._generated.azure.storage.blobs.models import PageList # Parse a generated PageList into a single list of PageRange sorted by start. def parse_page_list(page_list: "PageList") -> List["PageRange"]: diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_serialize.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_serialize.py index c0512fb18748..9a47265e0caa 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_serialize.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_serialize.py @@ -12,20 +12,17 @@ from azure.core import MatchConditions -from ._generated.models import ( +from ._generated.azure.storage.blobs.models import ( ArrowConfiguration, BlobModifiedAccessConditions, BlobTag, BlobTags, - ContainerCpkScopeInfo, - CpkScopeInfo, DelimitedTextConfiguration, JsonTextConfiguration, - LeaseAccessConditions, - ModifiedAccessConditions, + ParquetConfiguration, QueryFormat, - QueryFormatType, QuerySerialization, + QueryType, SourceModifiedAccessConditions ) from ._models import ContainerEncryptionScope, DelimitedJsonDialect @@ -95,23 +92,35 @@ def _get_match_headers( return if_match, if_none_match -def get_access_conditions(lease: Optional[Union["BlobLeaseClient", str]]) -> Optional[LeaseAccessConditions]: +def get_access_conditions(lease: Optional[Union["BlobLeaseClient", str]]) -> Optional[str]: try: lease_id = lease.id # type: ignore except AttributeError: lease_id = lease # type: ignore - return LeaseAccessConditions(lease_id=lease_id) if lease_id else None + return lease_id if lease_id else None -def get_modify_conditions(kwargs: Dict[str, Any]) -> ModifiedAccessConditions: - if_match, if_none_match = _get_match_headers(kwargs, 'match_condition', 'etag') - return ModifiedAccessConditions( - if_modified_since=kwargs.pop('if_modified_since', None), - if_unmodified_since=kwargs.pop('if_unmodified_since', None), - if_match=if_match or kwargs.pop('if_match', None), - if_none_match=if_none_match or kwargs.pop('if_none_match', None), - if_tags=kwargs.pop('if_tags_match_condition', None) - ) +def get_modify_conditions(kwargs: Dict[str, Any]) -> Dict[str, Any]: + # Return only non-None values to avoid leaking extra kwargs to the HTTP transport. + # The generated code accepts etag/match_condition and handles conversion internally. + result: Dict[str, Any] = {} + if_modified_since = kwargs.pop('if_modified_since', None) + if_unmodified_since = kwargs.pop('if_unmodified_since', None) + etag = kwargs.pop('etag', None) + match_condition = kwargs.pop('match_condition', None) + if_tags = kwargs.pop('if_tags_match_condition', None) + + if if_modified_since is not None: + result['if_modified_since'] = if_modified_since + if if_unmodified_since is not None: + result['if_unmodified_since'] = if_unmodified_since + if etag is not None: + result['etag'] = etag + if match_condition is not None: + result['match_condition'] = match_condition + if if_tags is not None: + result['if_tags'] = if_tags + return result def get_blob_modify_conditions(kwargs: Dict[str, Any]) -> BlobModifiedAccessConditions: @@ -124,38 +133,114 @@ def get_blob_modify_conditions(kwargs: Dict[str, Any]) -> BlobModifiedAccessCond ) -def get_source_conditions(kwargs: Dict[str, Any]) -> SourceModifiedAccessConditions: +def get_source_conditions(kwargs: Dict[str, Any]) -> Dict[str, Any]: + """Returns source conditions as a dict for the generated code. + + The generated code expects individual parameters instead of SourceModifiedAccessConditions. + """ if_match, if_none_match = _get_match_headers(kwargs, 'source_match_condition', 'source_etag') - return SourceModifiedAccessConditions( - source_if_modified_since=kwargs.pop('source_if_modified_since', None), - source_if_unmodified_since=kwargs.pop('source_if_unmodified_since', None), - source_if_match=if_match or kwargs.pop('source_if_match', None), - source_if_none_match=if_none_match or kwargs.pop('source_if_none_match', None), - source_if_tags=kwargs.pop('source_if_tags_match_condition', None) - ) + result: Dict[str, Any] = {} + + source_if_modified_since = kwargs.pop('source_if_modified_since', None) + source_if_unmodified_since = kwargs.pop('source_if_unmodified_since', None) + source_if_match = if_match or kwargs.pop('source_if_match', None) + source_if_none_match = if_none_match or kwargs.pop('source_if_none_match', None) + source_if_tags = kwargs.pop('source_if_tags_match_condition', None) + + if source_if_modified_since is not None: + result['source_if_modified_since'] = source_if_modified_since + if source_if_unmodified_since is not None: + result['source_if_unmodified_since'] = source_if_unmodified_since + if source_if_match is not None: + result['source_if_match'] = source_if_match + if source_if_none_match is not None: + result['source_if_none_match'] = source_if_none_match + if source_if_tags is not None: + result['source_if_tags'] = source_if_tags + return result + + +def get_cpk_scope_info(kwargs: Dict[str, Any]) -> Dict[str, Any]: + """Returns encryption_scope as a dict for the generated code.""" + return {'encryption_scope': kwargs.pop('encryption_scope', None)} + + +def get_append_conditions(kwargs: Dict[str, Any]) -> Dict[str, Any]: + """Returns append position conditions as a dict for the generated code. + + The generated code expects individual parameters: max_size and append_position + instead of an AppendPositionAccessConditions object. + """ + result: Dict[str, Any] = {} + maxsize_condition = kwargs.pop('maxsize_condition', None) + appendpos_condition = kwargs.pop('appendpos_condition', None) + if maxsize_condition is not None: + result['max_size'] = maxsize_condition + if appendpos_condition is not None: + result['append_position'] = appendpos_condition + return result + + +def get_sequence_conditions(kwargs: Dict[str, Any]) -> Dict[str, Any]: + """Returns sequence number conditions as a dict for the generated code. + + The generated code expects individual parameters instead of SequenceNumberAccessConditions. + """ + result: Dict[str, Any] = {} + if_sequence_number_lte = kwargs.pop('if_sequence_number_lte', None) + if_sequence_number_lt = kwargs.pop('if_sequence_number_lt', None) + if_sequence_number_eq = kwargs.pop('if_sequence_number_eq', None) + if if_sequence_number_lte is not None: + result['if_sequence_number_less_than_or_equal_to'] = if_sequence_number_lte + if if_sequence_number_lt is not None: + result['if_sequence_number_less_than'] = if_sequence_number_lt + if if_sequence_number_eq is not None: + result['if_sequence_number_equal_to'] = if_sequence_number_eq + return result + + +def get_cpk_info(cpk: Any) -> Dict[str, Any]: + """Returns CPK parameters as a dict for the generated code. + + The generated code expects individual parameters: encryption_key, + encryption_key_sha256, and encryption_algorithm instead of a CpkInfo object. + """ + if cpk: + return { + 'encryption_key': cpk.key_value, + 'encryption_key_sha256': cpk.key_hash, + 'encryption_algorithm': cpk.algorithm + } + return {} -def get_cpk_scope_info(kwargs: Dict[str, Any]) -> Optional[CpkScopeInfo]: - if 'encryption_scope' in kwargs: - return CpkScopeInfo(encryption_scope=kwargs.pop('encryption_scope')) - return None +def get_source_cpk_info(source_cpk: Any) -> Dict[str, Any]: + """Returns source CPK parameters as a dict for the generated code.""" + if source_cpk: + return { + 'source_encryption_key': source_cpk.key_value, + 'source_encryption_key_sha256': source_cpk.key_hash, + 'source_encryption_algorithm': source_cpk.algorithm + } + return {} -def get_container_cpk_scope_info(kwargs: Dict[str, Any]) -> Optional[ContainerCpkScopeInfo]: +def get_container_cpk_scope_info(kwargs: Dict[str, Any]) -> Dict[str, Any]: + """Returns container CPK scope info as a dict for the generated code.""" encryption_scope = kwargs.pop('container_encryption_scope', None) if encryption_scope: if isinstance(encryption_scope, ContainerEncryptionScope): - return ContainerCpkScopeInfo( - default_encryption_scope=encryption_scope.default_encryption_scope, - prevent_encryption_scope_override=encryption_scope.prevent_encryption_scope_override - ) + return { + 'default_encryption_scope': encryption_scope.default_encryption_scope, + 'prevent_encryption_scope_override': encryption_scope.prevent_encryption_scope_override + } if isinstance(encryption_scope, dict): - return ContainerCpkScopeInfo( - default_encryption_scope=encryption_scope['default_encryption_scope'], - prevent_encryption_scope_override=encryption_scope.get('prevent_encryption_scope_override') - ) + return { + 'default_encryption_scope': encryption_scope['default_encryption_scope'], + 'prevent_encryption_scope_override': encryption_scope.get('prevent_encryption_scope_override') + } raise TypeError("Container encryption scope must be dict or type ContainerEncryptionScope.") - return None + return {} def get_api_version(kwargs: Dict[str, Any]) -> str: @@ -197,10 +282,10 @@ def serialize_blob_tags(tags: Optional[Dict[str, str]] = None) -> BlobTags: def serialize_query_format(formater: Union[str, DelimitedJsonDialect]) -> Optional[QuerySerialization]: if formater == "ParquetDialect": - qq_format = QueryFormat(type=QueryFormatType.PARQUET, parquet_text_configuration=' ') #type: ignore [arg-type] + qq_format = QueryFormat(type=QueryType.PARQUET, parquet_text_configuration=ParquetConfiguration()) elif isinstance(formater, DelimitedJsonDialect): json_serialization_settings = JsonTextConfiguration(record_separator=formater.delimiter) - qq_format = QueryFormat(type=QueryFormatType.JSON, json_text_configuration=json_serialization_settings) + qq_format = QueryFormat(type=QueryType.JSON, json_text_configuration=json_serialization_settings) elif hasattr(formater, 'quotechar'): # This supports a csv.Dialect as well try: headers = formater.has_header # type: ignore @@ -216,12 +301,12 @@ def serialize_query_format(formater: Union[str, DelimitedJsonDialect]) -> Option headers_present=headers ) qq_format = QueryFormat( - type=QueryFormatType.DELIMITED, + type=QueryType.DELIMITED, delimited_text_configuration=csv_serialization_settings ) elif isinstance(formater, list): arrow_serialization_settings = ArrowConfiguration(schema=formater) - qq_format = QueryFormat(type=QueryFormatType.arrow, arrow_configuration=arrow_serialization_settings) + qq_format = QueryFormat(type=QueryType.ARROW, arrow_configuration=arrow_serialization_settings) elif not formater: return None else: diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_upload_helpers.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_upload_helpers.py index 2ce55f7ab237..88540814760c 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_upload_helpers.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_upload_helpers.py @@ -18,10 +18,9 @@ get_adjusted_upload_size, get_blob_encryptor_and_padder ) -from ._generated.models import ( +from ._generated.azure.storage.blobs.models import ( AppendPositionAccessConditions, - BlockLookupList, - ModifiedAccessConditions + BlockLookupList ) from ._shared.models import StorageErrorCode from ._shared.response_handlers import process_storage_error, return_response_headers @@ -34,7 +33,7 @@ ) if TYPE_CHECKING: - from ._generated.operations import AppendBlobOperations, BlockBlobOperations, PageBlobOperations + from ._generated.azure.storage.blobs.operations import AppendBlobOperations, BlockBlobOperations, PageBlobOperations from ._shared.models import StorageConfiguration BlobLeaseClient = TypeVar("BlobLeaseClient") @@ -42,6 +41,23 @@ _ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM = '{0} should be a seekable file-like/io.IOBase type stream object.' +def _get_blob_http_headers_dict(blob_headers): + """Expand BlobHTTPHeaders object into a dict of keyword arguments. + + The new generated code expects individual parameters instead of a BlobHTTPHeaders object. + """ + if blob_headers is None: + return {} + return { + 'blob_cache_control': blob_headers.blob_cache_control, + 'blob_content_type': blob_headers.blob_content_type, + 'blob_content_md5': blob_headers.blob_content_md5, + 'blob_content_encoding': blob_headers.blob_content_encoding, + 'blob_content_language': blob_headers.blob_content_language, + 'blob_content_disposition': blob_headers.blob_content_disposition, + } + + def _convert_mod_error(error): message = error.message.replace( "The condition specified using HTTP conditional header(s) is not met.", @@ -55,12 +71,12 @@ def _convert_mod_error(error): raise overwrite_error -def _any_conditions(modified_access_conditions=None, **kwargs): # pylint: disable=unused-argument +def _any_conditions(if_modified_since=None, if_unmodified_since=None, if_none_match=None, if_match=None, **kwargs): # pylint: disable=unused-argument return any([ - modified_access_conditions.if_modified_since, - modified_access_conditions.if_unmodified_since, - modified_access_conditions.if_none_match, - modified_access_conditions.if_match + if_modified_since, + if_unmodified_since, + if_none_match, + if_match ]) @@ -78,7 +94,7 @@ def upload_block_blob( # pylint: disable=too-many-locals, too-many-statements ) -> Dict[str, Any]: try: if not overwrite and not _any_conditions(**kwargs): - kwargs['modified_access_conditions'].if_none_match = '*' + kwargs['if_none_match'] = '*' adjusted_count = length if (encryption_options.get('key') is not None) and (adjusted_count is not None): adjusted_count = get_adjusted_upload_size(adjusted_count, encryption_options['version']) @@ -105,7 +121,7 @@ def upload_block_blob( # pylint: disable=too-many-locals, too-many-statements response = client.upload( body=data, # type: ignore [arg-type] content_length=adjusted_count, - blob_http_headers=blob_headers, + **_get_blob_http_headers_dict(blob_headers), headers=headers, cls=return_response_headers, validate_content=validate_content, @@ -182,7 +198,7 @@ def upload_block_blob( # pylint: disable=too-many-locals, too-many-statements block_lookup.latest = block_ids return cast(Dict[str, Any], client.commit_block_list( block_lookup, - blob_http_headers=blob_headers, + **_get_blob_http_headers_dict(blob_headers), cls=return_response_headers, validate_content=validate_content, headers=headers, @@ -215,7 +231,7 @@ def upload_page_blob( ) -> Dict[str, Any]: try: if not overwrite and not _any_conditions(**kwargs): - kwargs['modified_access_conditions'].if_none_match = '*' + kwargs['if_none_match'] = '*' if length is None or length < 0: raise ValueError("A content length must be specified for a Page Blob.") if length % 512 != 0: @@ -242,7 +258,7 @@ def upload_page_blob( content_length=0, blob_content_length=length, blob_sequence_number=None, # type: ignore [arg-type] - blob_http_headers=kwargs.pop('blob_headers', None), + **_get_blob_http_headers_dict(kwargs.pop('blob_headers', None)), blob_tags_string=blob_tags_string, tier=tier, cls=return_response_headers, @@ -257,7 +273,7 @@ def upload_page_blob( kwargs['encryptor'] = encryptor kwargs['padder'] = padder - kwargs['modified_access_conditions'] = ModifiedAccessConditions(if_match=response['etag']) + kwargs['if_match'] = response['etag'] return cast(Dict[str, Any], upload_data_chunks( service=client, uploader_class=PageBlobChunkUploader, @@ -305,7 +321,7 @@ def upload_append_blob( # pylint: disable=unused-argument if overwrite: client.create( content_length=0, - blob_http_headers=blob_headers, + **_get_blob_http_headers_dict(blob_headers), headers=headers, blob_tags_string=blob_tags_string, **kwargs) @@ -334,7 +350,7 @@ def upload_append_blob( # pylint: disable=unused-argument raise error from exc client.create( content_length=0, - blob_http_headers=blob_headers, + **_get_blob_http_headers_dict(blob_headers), headers=headers, blob_tags_string=blob_tags_string, **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 f1143006ec69..a526b15979aa 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 @@ -69,10 +69,10 @@ parse_tags ) from .._encryption import StorageEncryptionMixin, _ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION -from .._generated.aio import AzureBlobStorage -from .._generated.models import CpkInfo +from .._generated.azure.storage.blobs.aio import CombinedBlobClient as AzureBlobStorage +from .._generated.azure.storage.blobs.models import CpkInfo from .._models import BlobType, BlobBlock, BlobProperties, BlobQueryError, PageRange -from .._serialize import get_access_conditions, get_api_version, get_modify_conditions, get_version_id +from .._serialize import get_access_conditions, get_api_version, get_cpk_info, get_modify_conditions, get_version_id from .._shared.base_client import StorageAccountHostsMixin from .._shared.base_client_async import AsyncStorageAccountHostsMixin, AsyncTransportWrapper, parse_connection_str from .._shared.policies_async import ExponentialRetry @@ -910,7 +910,7 @@ async def query_blob( **kwargs ) try: - headers, raw_response_body = await self._client.blob.query(**options) + headers, raw_response_body = await self._client.block_blob.query(**options) except HttpResponseError as error: process_storage_error(error) blob_query_reader = BlobQueryReader( @@ -1157,12 +1157,9 @@ async def get_blob_properties(self, **kwargs: Any) -> BlobProperties: mod_conditions = get_modify_conditions(kwargs) version_id = get_version_id(self.version_id, kwargs) cpk = kwargs.pop('cpk', None) - cpk_info = None - if cpk: - if self.scheme.lower() != 'https': - raise ValueError("Customer provided encryption key must be used over HTTPS.") - cpk_info = CpkInfo(encryption_key=cpk.key_value, encryption_key_sha256=cpk.key_hash, - encryption_algorithm=cpk.algorithm) + cpk_info = get_cpk_info(cpk) + if cpk and self.scheme.lower() != 'https': + raise ValueError("Customer provided encryption key must be used over HTTPS.") try: cls_method = kwargs.pop('cls', None) if cls_method: @@ -1171,10 +1168,10 @@ async def get_blob_properties(self, **kwargs: Any) -> BlobProperties: timeout=kwargs.pop('timeout', None), version_id=version_id, snapshot=self.snapshot, - lease_access_conditions=access_conditions, - modified_access_conditions=mod_conditions, + lease_id=access_conditions, + **mod_conditions, cls=kwargs.pop('cls', None) or deserialize_blob_properties, - cpk_info=cpk_info, + **cpk_info, **kwargs) except HttpResponseError as error: process_storage_error(error) @@ -1303,7 +1300,9 @@ async def set_blob_metadata( raise ValueError("Customer provided encryption key must be used over HTTPS.") options = _set_blob_metadata_options(metadata=metadata, **kwargs) try: - return cast(Dict[str, Union[str, datetime]], await self._client.blob.set_metadata(**options)) + return cast( + Dict[str, Union[str, datetime]], + await self._client.blob.set_metadata(metadata=metadata, **options)) except HttpResponseError as error: process_storage_error(error) @@ -1337,10 +1336,12 @@ async def set_immutability_policy( """ version_id = get_version_id(self.version_id, kwargs) - kwargs['immutability_policy_expiry'] = immutability_policy.expiry_time - kwargs['immutability_policy_mode'] = immutability_policy.policy_mode return cast(Dict[str, str], await self._client.blob.set_immutability_policy( - cls=return_response_headers,version_id=version_id, **kwargs)) + expiry=immutability_policy.expiry_time, + immutability_policy_mode=immutability_policy.policy_mode, + version_id=version_id, + cls=return_response_headers, + **kwargs)) @distributed_trace_async async def delete_immutability_policy(self, **kwargs: Any) -> None: @@ -1389,7 +1390,7 @@ async def set_legal_hold(self, legal_hold: bool, **kwargs: Any) -> Dict[str, Uni version_id = get_version_id(self.version_id, kwargs) return cast(Dict[str, Union[str, datetime, bool]], await self._client.blob.set_legal_hold( - legal_hold, version_id=version_id, cls=return_response_headers, **kwargs)) + legal_hold=legal_hold, version_id=version_id, cls=return_response_headers, **kwargs)) @distributed_trace_async async def create_page_blob( @@ -1494,7 +1495,7 @@ async def create_page_blob( premium_page_blob_tier=premium_page_blob_tier, **kwargs) try: - return cast(Dict[str, Any], await self._client.page_blob.create(**options)) + return cast(Dict[str, Any], await self._client.page_blob.create(size=size, **options)) except HttpResponseError as error: process_storage_error(error) @@ -2029,8 +2030,8 @@ async def set_standard_blob_tier(self, standard_blob_tier: Union[str, "StandardB await self._client.blob.set_tier( tier=standard_blob_tier, timeout=kwargs.pop('timeout', None), - modified_access_conditions=mod_conditions, - lease_access_conditions=access_conditions, + **mod_conditions, + lease_id=access_conditions, version_id=version_id, **kwargs) except HttpResponseError as error: @@ -2223,8 +2224,8 @@ async def get_block_list( list_type=block_list_type, snapshot=self.snapshot, timeout=kwargs.pop('timeout', None), - lease_access_conditions=access_conditions, - modified_access_conditions=mod_conditions, + lease_id=access_conditions, + **mod_conditions, **kwargs) except HttpResponseError as error: process_storage_error(error) @@ -2379,8 +2380,8 @@ async def set_premium_page_blob_tier(self, premium_page_blob_tier: "PremiumPageB await self._client.blob.set_tier( tier=premium_page_blob_tier, timeout=kwargs.pop('timeout', None), - lease_access_conditions=access_conditions, - modified_access_conditions=mod_conditions, + lease_id=access_conditions, + **mod_conditions, **kwargs) except HttpResponseError as error: process_storage_error(error) @@ -2867,7 +2868,7 @@ async def resize_blob(self, size: int, **kwargs: Any) -> Dict[str, Union[str, da raise ValueError("Customer provided encryption key must be used over HTTPS.") options = _resize_blob_options(size=size, **kwargs) try: - return cast(Dict[str, Any], await self._client.page_blob.resize(**options)) + return cast(Dict[str, Any], await self._client.page_blob.resize(size=size, **options)) except HttpResponseError as error: process_storage_error(error) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_blob_client_async.pyi b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_blob_client_async.pyi index dd7dc9ede496..9112c7f68942 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_blob_client_async.pyi +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_blob_client_async.pyi @@ -35,7 +35,7 @@ from ._container_client_async import ContainerClient from ._download_async import StorageStreamDownloader from ._lease_async import BlobLeaseClient from .._encryption import StorageEncryptionMixin -from .._generated.models import RehydratePriority +from .._generated.azure.storage.blobs.models import RehydratePriority from .._models import ( BlobType, BlobBlock, 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 8a4eb6bb03dd..90d666362f1b 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 @@ -25,8 +25,8 @@ from .._blob_service_client_helpers import _parse_url from .._deserialize import service_properties_deserialize, service_stats_deserialize from .._encryption import StorageEncryptionMixin -from .._generated.aio import AzureBlobStorage -from .._generated.models import StorageServiceProperties, KeyInfo +from .._generated.azure.storage.blobs.aio import CombinedBlobClient as AzureBlobStorage +from .._generated.azure.storage.blobs.models import BlobServiceProperties as StorageServiceProperties, KeyInfo from .._models import BlobProperties, ContainerProperties, CorsRule from .._serialize import get_api_version from .._shared.base_client import parse_query, StorageAccountHostsMixin @@ -701,7 +701,7 @@ async def _rename_container(self, name: str, new_name: str, **kwargs: Any) -> Co except AttributeError: kwargs['source_lease_id'] = lease try: - await renamed_container._client.container.rename(name, **kwargs) # pylint: disable = protected-access + await renamed_container._client.container.rename(source_container_name=name, **kwargs) # pylint: disable = protected-access return renamed_container except HttpResponseError as error: process_storage_error(error) 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 e08abc8d3ca6..a6f8c98c0cd5 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 @@ -35,8 +35,8 @@ ) from .._deserialize import deserialize_container_properties from .._encryption import StorageEncryptionMixin -from .._generated.aio import AzureBlobStorage -from .._generated.models import SignedIdentifier +from .._generated.azure.storage.blobs.aio import CombinedBlobClient as AzureBlobStorage +from .._generated.azure.storage.blobs.models import SignedIdentifier from .._list_blobs_helper import IgnoreListBlobsDeserializer from .._models import ContainerProperties, BlobType, BlobProperties, FilteredBlob from .._serialize import get_modify_conditions, get_container_cpk_scope_info, get_api_version, get_access_conditions @@ -324,9 +324,9 @@ async def create_container( return await self._client.container.create( # type: ignore timeout=timeout, access=public_access, - container_cpk_scope_info=container_cpk_scope_info, cls=return_response_headers, headers=headers, + **container_cpk_scope_info, **kwargs) except HttpResponseError as error: process_storage_error(error) @@ -364,7 +364,7 @@ async def _rename_container(self, new_name: str, **kwargs: Any) -> "ContainerCli _pipeline=self._pipeline, _location_mode=self._location_mode, _hosts=self._hosts, require_encryption=self.require_encryption, encryption_version=self.encryption_version, key_encryption_key=self.key_encryption_key, key_resolver_function=self.key_resolver_function) - await renamed_container._client.container.rename(self.container_name, **kwargs) # pylint: disable = protected-access + await renamed_container._client.container.rename(source_container_name=self.container_name, **kwargs) # pylint: disable = protected-access return renamed_container except HttpResponseError as error: process_storage_error(error) @@ -422,8 +422,8 @@ async def delete_container(self, **kwargs: Any) -> None: try: await self._client.container.delete( timeout=timeout, - lease_access_conditions=access_conditions, - modified_access_conditions=mod_conditions, + lease_id=access_conditions, + **mod_conditions, **kwargs) except HttpResponseError as error: process_storage_error(error) @@ -536,7 +536,7 @@ async def get_container_properties(self, **kwargs: Any) -> ContainerProperties: try: response = await self._client.container.get_properties( timeout=timeout, - lease_access_conditions=access_conditions, + lease_id=access_conditions, cls=deserialize_container_properties, **kwargs) except HttpResponseError as error: @@ -617,9 +617,10 @@ async def set_container_metadata( timeout = kwargs.pop('timeout', None) try: return await self._client.container.set_metadata( # type: ignore + metadata=metadata, timeout=timeout, - lease_access_conditions=access_conditions, - modified_access_conditions=mod_conditions, + lease_id=access_conditions, + **mod_conditions, cls=return_response_headers, headers=headers, **kwargs) @@ -693,7 +694,7 @@ async def get_container_access_policy(self, **kwargs: Any) -> Dict[str, Any]: try: response, identifiers = await self._client.container.get_access_policy( timeout=timeout, - lease_access_conditions=access_conditions, + lease_id=access_conditions, cls=return_headers_and_deserialized, **kwargs) except HttpResponseError as error: @@ -775,8 +776,8 @@ async def set_container_access_policy( container_acl=signed_identifiers or None, timeout=timeout, access=public_access, - lease_access_conditions=access_conditions, - modified_access_conditions=mod_conditions, + lease_id=access_conditions, + **mod_conditions, cls=return_response_headers, **kwargs)) except HttpResponseError as error: diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_container_client_async.pyi b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_container_client_async.pyi index f4be54eaea38..b67cf71ea254 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_container_client_async.pyi +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_container_client_async.pyi @@ -38,7 +38,7 @@ from ._download_async import StorageStreamDownloader from ._lease_async import BlobLeaseClient from ._list_blobs_helper import BlobPrefix from .._encryption import StorageEncryptionMixin -from .._generated.models import RehydratePriority +from .._generated.azure.storage.blobs.models import RehydratePriority from .._models import ( AccessPolicy, BlobType, diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_download_async.py b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_download_async.py index b4355e8ee841..f521cfe1a71f 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_download_async.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_download_async.py @@ -35,7 +35,7 @@ if TYPE_CHECKING: from codecs import IncrementalDecoder from .._encryption import _EncryptionData - from .._generated.aio import AzureBlobStorage + from .._generated.azure.storage.blobs.aio import CombinedBlobClient as AzureBlobStorage from .._models import BlobProperties from .._shared.models import StorageConfiguration diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_list_blobs_helper.py b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_list_blobs_helper.py index 1731a3186c40..abe6b8e72d04 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_list_blobs_helper.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_list_blobs_helper.py @@ -16,7 +16,7 @@ load_xml_int, load_xml_string ) -from .._generated.models import BlobItemInternal, BlobPrefix as GenBlobPrefix +from .._generated.azure.storage.blobs.models import BlobItemInternal, BlobPrefix as GenBlobPrefix from .._models import BlobProperties from .._shared.models import DictMixin from .._shared.response_handlers import ( diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_models.py b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_models.py index 27d1d8fa3c0b..85f81e185b9b 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_models.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_models.py @@ -11,7 +11,7 @@ from azure.core.exceptions import HttpResponseError from .._deserialize import parse_tags -from .._generated.models import FilterBlobItem +from .._generated.azure.storage.blobs.models import FilterBlobItem from .._models import ContainerProperties, FilteredBlob, parse_page_list from .._shared.response_handlers import process_storage_error, return_context_and_deserialized diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_upload_helpers.py b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_upload_helpers.py index 794beee36e3b..c9b1121d9ebd 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_upload_helpers.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_upload_helpers.py @@ -19,10 +19,9 @@ _ENCRYPTION_PROTOCOL_V1, _ENCRYPTION_PROTOCOL_V2 ) -from .._generated.models import ( +from .._generated.azure.storage.blobs.models import ( AppendPositionAccessConditions, BlockLookupList, - ModifiedAccessConditions ) from .._shared.response_handlers import process_storage_error, return_response_headers from .._shared.uploads_async import ( @@ -32,10 +31,14 @@ upload_data_chunks, upload_substream_blocks ) -from .._upload_helpers import _any_conditions, _convert_mod_error +from .._upload_helpers import _any_conditions, _convert_mod_error, _get_blob_http_headers_dict if TYPE_CHECKING: - from .._generated.aio.operations import AppendBlobOperations, BlockBlobOperations, PageBlobOperations + from .._generated.azure.storage.blobs.aio.operations import ( + AppendBlobOperations, + BlockBlobOperations, + PageBlobOperations, + ) from .._shared.models import StorageConfiguration BlobLeaseClient = TypeVar("BlobLeaseClient") @@ -85,7 +88,7 @@ async def upload_block_blob( # pylint: disable=too-many-locals, too-many-statem response = cast(Dict[str, Any], await client.upload( body=data, # type: ignore [arg-type] content_length=adjusted_count, - blob_http_headers=blob_headers, + **_get_blob_http_headers_dict(blob_headers), headers=headers, cls=return_response_headers, validate_content=validate_content, @@ -162,7 +165,7 @@ async def upload_block_blob( # pylint: disable=too-many-locals, too-many-statem block_lookup.latest = block_ids return cast(Dict[str, Any], await client.commit_block_list( block_lookup, - blob_http_headers=blob_headers, + **_get_blob_http_headers_dict(blob_headers), cls=return_response_headers, validate_content=validate_content, headers=headers, @@ -222,7 +225,7 @@ async def upload_page_blob( content_length=0, blob_content_length=length, blob_sequence_number=None, # type: ignore [arg-type] - blob_http_headers=kwargs.pop('blob_headers', None), + **_get_blob_http_headers_dict(kwargs.pop('blob_headers', None)), blob_tags_string=blob_tags_string, tier=tier, cls=return_response_headers, @@ -237,7 +240,7 @@ async def upload_page_blob( kwargs['encryptor'] = encryptor kwargs['padder'] = padder - kwargs['modified_access_conditions'] = ModifiedAccessConditions(if_match=response['etag']) + kwargs['modified_access_conditions'] = {'if_match': response['etag']} return cast(Dict[str, Any], await upload_data_chunks( service=client, uploader_class=PageBlobChunkUploader, @@ -285,7 +288,7 @@ async def upload_append_blob( # pylint: disable=unused-argument if overwrite: await client.create( content_length=0, - blob_http_headers=blob_headers, + **_get_blob_http_headers_dict(blob_headers), headers=headers, blob_tags_string=blob_tags_string, **kwargs) @@ -314,7 +317,7 @@ async def upload_append_blob( # pylint: disable=unused-argument raise error from exc await client.create( content_length=0, - blob_http_headers=blob_headers, + **_get_blob_http_headers_dict(blob_headers), headers=headers, blob_tags_string=blob_tags_string, **kwargs) diff --git a/sdk/storage/azure-storage-blob/dev_requirements.txt b/sdk/storage/azure-storage-blob/dev_requirements.txt index 59b2a0246bce..4397072afe45 100644 --- a/sdk/storage/azure-storage-blob/dev_requirements.txt +++ b/sdk/storage/azure-storage-blob/dev_requirements.txt @@ -1,5 +1,5 @@ --e ../../../eng/tools/azure-sdk-tools --e ../../core/azure-core --e ../../identity/azure-identity +../../../eng/tools/azure-sdk-tools +../../core/azure-core +../../identity/azure-identity azure-mgmt-storage==20.1.0 aiohttp>=3.0 \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/tests/test_blob_storage_account.py b/sdk/storage/azure-storage-blob/tests/test_blob_storage_account.py index 1f93d40bcdf9..b062ed2e9b12 100644 --- a/sdk/storage/azure-storage-blob/tests/test_blob_storage_account.py +++ b/sdk/storage/azure-storage-blob/tests/test_blob_storage_account.py @@ -4,7 +4,7 @@ # license information. # -------------------------------------------------------------------------- from azure.storage.blob import BlobServiceClient, StandardBlobTier -from azure.storage.blob._generated.models import RehydratePriority +from azure.storage.blob._generated.azure.storage.blobs.models import RehydratePriority from devtools_testutils import recorded_by_proxy from devtools_testutils.storage import StorageRecordedTestCase diff --git a/sdk/storage/azure-storage-blob/tests/test_blob_storage_account_async.py b/sdk/storage/azure-storage-blob/tests/test_blob_storage_account_async.py index bb5638227afd..43cf942b7c66 100644 --- a/sdk/storage/azure-storage-blob/tests/test_blob_storage_account_async.py +++ b/sdk/storage/azure-storage-blob/tests/test_blob_storage_account_async.py @@ -6,7 +6,7 @@ from azure.core.pipeline.transport import AioHttpTransport from azure.storage.blob import StandardBlobTier from azure.storage.blob.aio import BlobServiceClient -from azure.storage.blob._generated.models import RehydratePriority +from azure.storage.blob._generated.azure.storage.blobs.models import RehydratePriority from devtools_testutils.aio import recorded_by_proxy_async from devtools_testutils.storage.aio import AsyncStorageRecordedTestCase diff --git a/sdk/storage/azure-storage-blob/tests/test_common_blob.py b/sdk/storage/azure-storage-blob/tests/test_common_blob.py index 074505aec045..7b3cfedd2b2c 100644 --- a/sdk/storage/azure-storage-blob/tests/test_common_blob.py +++ b/sdk/storage/azure-storage-blob/tests/test_common_blob.py @@ -49,9 +49,8 @@ generate_account_sas, generate_blob_sas, generate_container_sas, - upload_blob_to_url -) -from azure.storage.blob._generated.models import RehydratePriority + upload_blob_to_url) +from azure.storage.blob._generated.azure.storage.blobs.models import RehydratePriority from devtools_testutils import FakeTokenCredential, recorded_by_proxy from devtools_testutils.storage import StorageRecordedTestCase