diff --git a/sdk/storage/azure-storage-file-datalake/CHANGELOG.md b/sdk/storage/azure-storage-file-datalake/CHANGELOG.md index fe69bc487ee89..896b572ef4a84 100644 --- a/sdk/storage/azure-storage-file-datalake/CHANGELOG.md +++ b/sdk/storage/azure-storage-file-datalake/CHANGELOG.md @@ -6,6 +6,7 @@ ### Bugs Fixed - Updated `create_file_system()` docstring to have the correct return-type of `None` +- Fixed parsing of extra `/` symbols not being stripped properly in `async` clients ## 12.6.0 (2022-03-08) diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_file_system_client_async.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_file_system_client_async.py index aa702badf3251..b983b5ecfecfd 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_file_system_client_async.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_file_system_client_async.py @@ -91,15 +91,15 @@ def __init__( **kwargs) # to override the class field _container_client sync version kwargs.pop('_hosts', None) - self._container_client = ContainerClient(self._blob_account_url, file_system_name, + self._container_client = ContainerClient(self._blob_account_url, self.file_system_name, credential=credential, _hosts=self._container_client._hosts,# pylint: disable=protected-access **kwargs) # type: ignore # pylint: disable=protected-access self._client = AzureDataLakeStorageRESTAPI(self.url, base_url=self.url, - file_system=file_system_name, pipeline=self._pipeline) + file_system=self.file_system_name, pipeline=self._pipeline) self._datalake_client_for_blob_operation = AzureDataLakeStorageRESTAPI(self._container_client.url, base_url=self._container_client.url, - file_system=file_system_name, + file_system=self.file_system_name, pipeline=self._pipeline) api_version = get_api_version(kwargs) self._client._config.version = api_version # pylint: disable=protected-access diff --git a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_path_client_async.py b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_path_client_async.py index 3502aeba6c7c5..5ecfdb182c8cc 100644 --- a/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_path_client_async.py +++ b/sdk/storage/azure-storage-file-datalake/azure/storage/filedatalake/aio/_path_client_async.py @@ -42,18 +42,18 @@ def __init__( kwargs.pop('_hosts', None) - self._blob_client = BlobClient(account_url=self._blob_account_url, container_name=file_system_name, - blob_name=path_name, + self._blob_client = BlobClient(account_url=self._blob_account_url, container_name=self.file_system_name, + blob_name=self.path_name, credential=credential, _hosts=self._blob_client._hosts, # pylint: disable=protected-access **kwargs) - self._client = AzureDataLakeStorageRESTAPI(self.url, base_url=self.url, file_system=file_system_name, - path=path_name, pipeline=self._pipeline) + self._client = AzureDataLakeStorageRESTAPI(self.url, base_url=self.url, file_system=self.file_system_name, + path=self.path_name, pipeline=self._pipeline) self._datalake_client_for_blob_operation = AzureDataLakeStorageRESTAPI(self._blob_client.url, base_url=self._blob_client.url, - file_system=file_system_name, - path=path_name, + file_system=self.file_system_name, + path=self.path_name, pipeline=self._pipeline) api_version = get_api_version(kwargs) self._client._config.version = api_version # pylint: disable=protected-access diff --git a/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file.test_create_file_extra_backslashes.yaml b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file.test_create_file_extra_backslashes.yaml new file mode 100644 index 0000000000000..6ff8feb761fb9 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file.test_create_file_extra_backslashes.yaml @@ -0,0 +1,154 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-dfs/12.7.0b1 Python/3.10.2 (Windows-10-10.0.19044-SP0) + x-ms-date: + - Wed, 06 Apr 2022 22:36:26 GMT + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.blob.core.windows.net/filesystem916811e6?restype=container&timeout=5 + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Wed, 06 Apr 2022 22:36:25 GMT + etag: + - '"0x8DA181DE2E5EAE8"' + last-modified: + - Wed, 06 Apr 2022 22:36:26 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-dfs/12.7.0b1 Python/3.10.2 (Windows-10-10.0.19044-SP0) + x-ms-date: + - Wed, 06 Apr 2022 22:36:26 GMT + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.dfs.core.windows.net/filesystem916811e6/file916811e6?resource=file + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Wed, 06 Apr 2022 22:36:26 GMT + etag: + - '"0x8DA181DE33191DD"' + last-modified: + - Wed, 06 Apr 2022 22:36:27 GMT + server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-dfs/12.7.0b1 Python/3.10.2 (Windows-10-10.0.19044-SP0) + x-ms-date: + - Wed, 06 Apr 2022 22:36:27 GMT + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.dfs.core.windows.net/filesystem916811e6/file916811e6?resource=file + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Wed, 06 Apr 2022 22:36:26 GMT + etag: + - '"0x8DA181DE33D9E10"' + last-modified: + - Wed, 06 Apr 2022 22:36:27 GMT + server: + - Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-dfs/12.7.0b1 Python/3.10.2 (Windows-10-10.0.19044-SP0) + x-ms-date: + - Wed, 06 Apr 2022 22:36:27 GMT + x-ms-version: + - '2020-10-02' + method: DELETE + uri: https://storagename.blob.core.windows.net/filesystem916811e6?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Wed, 06 Apr 2022 22:36:26 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2020-10-02' + status: + code: 202 + message: Accepted +version: 1 diff --git a/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file_async.test_create_file_extra_backslashes_async.yaml b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file_async.test_create_file_extra_backslashes_async.yaml new file mode 100644 index 0000000000000..f8e835c078064 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file_async.test_create_file_extra_backslashes_async.yaml @@ -0,0 +1,110 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-dfs/12.7.0b1 Python/3.10.2 (Windows-10-10.0.19044-SP0) + x-ms-date: + - Wed, 06 Apr 2022 22:36:34 GMT + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.blob.core.windows.net/filesystem8a8a16e0?restype=container&timeout=5 + response: + body: + string: '' + headers: + content-length: '0' + date: Wed, 06 Apr 2022 22:36:34 GMT + etag: '"0x8DA181DE7C7C166"' + last-modified: Wed, 06 Apr 2022 22:36:34 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://vincenttrancanary.blob.core.windows.net/filesystem8a8a16e0?restype=container&timeout=5 +- request: + body: null + headers: + Accept: + - application/json + User-Agent: + - azsdk-python-storage-dfs/12.7.0b1 Python/3.10.2 (Windows-10-10.0.19044-SP0) + x-ms-date: + - Wed, 06 Apr 2022 22:36:35 GMT + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.dfs.core.windows.net/filesystem8a8a16e0/file8a8a16e0?resource=file + response: + body: + string: '' + headers: + content-length: '0' + date: Wed, 06 Apr 2022 22:36:34 GMT + etag: '"0x8DA181DE7F67F66"' + last-modified: Wed, 06 Apr 2022 22:36:35 GMT + server: Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://vincenttrancanary.dfs.core.windows.net/filesystem8a8a16e0/file8a8a16e0?resource=file +- request: + body: null + headers: + Accept: + - application/json + User-Agent: + - azsdk-python-storage-dfs/12.7.0b1 Python/3.10.2 (Windows-10-10.0.19044-SP0) + x-ms-date: + - Wed, 06 Apr 2022 22:36:35 GMT + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.dfs.core.windows.net/filesystem8a8a16e0/file8a8a16e0?resource=file + response: + body: + string: '' + headers: + content-length: '0' + date: Wed, 06 Apr 2022 22:36:34 GMT + etag: '"0x8DA181DE80068FD"' + last-modified: Wed, 06 Apr 2022 22:36:35 GMT + server: Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://vincenttrancanary.dfs.core.windows.net/filesystem8a8a16e0/file8a8a16e0?resource=file +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-dfs/12.7.0b1 Python/3.10.2 (Windows-10-10.0.19044-SP0) + x-ms-date: + - Wed, 06 Apr 2022 22:36:35 GMT + x-ms-version: + - '2020-10-02' + method: DELETE + uri: https://storagename.blob.core.windows.net/filesystem8a8a16e0?restype=container + response: + body: + string: '' + headers: + content-length: '0' + date: Wed, 06 Apr 2022 22:36:34 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: '2020-10-02' + status: + code: 202 + message: Accepted + url: https://vincenttrancanary.blob.core.windows.net/filesystem8a8a16e0?restype=container +version: 1 diff --git a/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file_system.test_create_file_system_extra_backslash.yaml b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file_system.test_create_file_system_extra_backslash.yaml new file mode 100644 index 0000000000000..264dacb31ae4d --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file_system.test_create_file_system_extra_backslash.yaml @@ -0,0 +1,74 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-dfs/12.7.0b1 Python/3.10.2 (Windows-10-10.0.19044-SP0) + x-ms-date: + - Wed, 06 Apr 2022 21:20:58 GMT + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.blob.core.windows.net/filesystem92cc1716/?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Wed, 06 Apr 2022 21:20:58 GMT + etag: + - '"0x8DA181357FF4FD1"' + last-modified: + - Wed, 06 Apr 2022 21:20:58 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-dfs/12.7.0b1 Python/3.10.2 (Windows-10-10.0.19044-SP0) + x-ms-date: + - Wed, 06 Apr 2022 21:20:58 GMT + x-ms-version: + - '2020-10-02' + method: DELETE + uri: https://storagename.blob.core.windows.net/filesystem92cc1716?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Wed, 06 Apr 2022 21:20:58 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2020-10-02' + status: + code: 202 + message: Accepted +version: 1 diff --git a/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file_system_async.test_create_file_system_async_extra_backslash.yaml b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file_system_async.test_create_file_system_async_extra_backslash.yaml new file mode 100644 index 0000000000000..9ef61346f0bad --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/tests/recordings/test_file_system_async.test_create_file_system_async_extra_backslash.yaml @@ -0,0 +1,54 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-dfs/12.7.0b1 Python/3.10.2 (Windows-10-10.0.19044-SP0) + x-ms-date: + - Wed, 06 Apr 2022 21:20:45 GMT + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.blob.core.windows.net/filesystemca131c10/?restype=container + response: + body: + string: '' + headers: + content-length: '0' + date: Wed, 06 Apr 2022 21:20:45 GMT + etag: '"0x8DA181350090632"' + last-modified: Wed, 06 Apr 2022 21:20:45 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://vincenttrancanary.blob.core.windows.net/filesystemca131c10/?restype=container +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-dfs/12.7.0b1 Python/3.10.2 (Windows-10-10.0.19044-SP0) + x-ms-date: + - Wed, 06 Apr 2022 21:20:45 GMT + x-ms-version: + - '2020-10-02' + method: DELETE + uri: https://storagename.blob.core.windows.net/filesystemca131c10?restype=container + response: + body: + string: '' + headers: + content-length: '0' + date: Wed, 06 Apr 2022 21:20:45 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: '2020-10-02' + status: + code: 202 + message: Accepted + url: https://vincenttrancanary.blob.core.windows.net/filesystemca131c10?restype=container +version: 1 diff --git a/sdk/storage/azure-storage-file-datalake/tests/test_file.py b/sdk/storage/azure-storage-file-datalake/tests/test_file.py index b5ad8f64e5d10..23efa9b3d88fc 100644 --- a/sdk/storage/azure-storage-file-datalake/tests/test_file.py +++ b/sdk/storage/azure-storage-file-datalake/tests/test_file.py @@ -98,6 +98,21 @@ def test_create_file(self, datalake_storage_account_name, datalake_storage_accou # Assert self.assertIsNotNone(response) + @DataLakePreparer() + def test_create_file_extra_backslashes(self, datalake_storage_account_name, datalake_storage_account_key): + self._setUp(datalake_storage_account_name, datalake_storage_account_key) + # Arrange + file_client = self._create_file_and_return_client() + + new_file_client = DataLakeFileClient(self.account_url(datalake_storage_account_name, 'dfs'), + file_client.file_system_name + '/', + '/' + file_client.path_name, + credential=datalake_storage_account_key, logging_enable=True) + response = file_client.create_file() + + # Assert + self.assertIsNotNone(response) + @DataLakePreparer() def test_file_exists(self, datalake_storage_account_name, datalake_storage_account_key): self._setUp(datalake_storage_account_name, datalake_storage_account_key) diff --git a/sdk/storage/azure-storage-file-datalake/tests/test_file_async.py b/sdk/storage/azure-storage-file-datalake/tests/test_file_async.py index 6f0572ba96c5b..ac0a615c05146 100644 --- a/sdk/storage/azure-storage-file-datalake/tests/test_file_async.py +++ b/sdk/storage/azure-storage-file-datalake/tests/test_file_async.py @@ -105,6 +105,21 @@ async def test_create_file_async(self, datalake_storage_account_name, datalake_s # Assert self.assertIsNotNone(response) + @DataLakePreparer() + async def test_create_file_extra_backslashes_async(self, datalake_storage_account_name, datalake_storage_account_key): + await self._setUp(datalake_storage_account_name, datalake_storage_account_key) + # Arrange + file_client = await self._create_file_and_return_client() + + new_file_client = DataLakeFileClient(self.account_url(datalake_storage_account_name, 'dfs'), + file_client.file_system_name + '/', + '/' + file_client.path_name, + credential=datalake_storage_account_key, logging_enable=True) + response = await file_client.create_file() + + # Assert + self.assertIsNotNone(response) + @DataLakePreparer() async def test_file_exists(self, datalake_storage_account_name, datalake_storage_account_key): await self._setUp(datalake_storage_account_name, datalake_storage_account_key) diff --git a/sdk/storage/azure-storage-file-datalake/tests/test_file_system.py b/sdk/storage/azure-storage-file-datalake/tests/test_file_system.py index 01599efbcf941..7e4911bd6c680 100644 --- a/sdk/storage/azure-storage-file-datalake/tests/test_file_system.py +++ b/sdk/storage/azure-storage-file-datalake/tests/test_file_system.py @@ -72,6 +72,19 @@ def test_create_file_system(self, datalake_storage_account_name, datalake_storag # Assert self.assertTrue(created) + @DataLakePreparer() + def test_create_file_system_extra_backslash(self, datalake_storage_account_name, datalake_storage_account_key): + self._setUp(datalake_storage_account_name, datalake_storage_account_key) + # Arrange + file_system_name = self._get_file_system_reference() + + # Act + file_system_client = self.dsc.get_file_system_client(file_system_name + '/') + created = file_system_client.create_file_system() + + # Assert + self.assertTrue(created) + @DataLakePreparer() def test_file_system_exists(self, datalake_storage_account_name, datalake_storage_account_key): self._setUp(datalake_storage_account_name, datalake_storage_account_key) diff --git a/sdk/storage/azure-storage-file-datalake/tests/test_file_system_async.py b/sdk/storage/azure-storage-file-datalake/tests/test_file_system_async.py index 8bca44e755613..fa4add09fc35f 100644 --- a/sdk/storage/azure-storage-file-datalake/tests/test_file_system_async.py +++ b/sdk/storage/azure-storage-file-datalake/tests/test_file_system_async.py @@ -96,6 +96,19 @@ async def test_create_file_system_async(self, datalake_storage_account_name, dat # Assert self.assertTrue(created) + @DataLakePreparer() + async def test_create_file_system_async_extra_backslash(self, datalake_storage_account_name, datalake_storage_account_key): + self._setUp(datalake_storage_account_name, datalake_storage_account_key) + # Arrange + file_system_name = self._get_file_system_reference() + + # Act + file_system_client = self.dsc.get_file_system_client(file_system_name + '/') + created = await file_system_client.create_file_system() + + # Assert + self.assertTrue(created) + @DataLakePreparer() async def test_file_system_exists(self, datalake_storage_account_name, datalake_storage_account_key): self._setUp(datalake_storage_account_name, datalake_storage_account_key)