Skip to content

Commit fba2484

Browse files
Clean up "?" if there is no query in request URL (#13530)
* cleaned up the ? in source urls * [devtool]turn primary_endpoint and key from unicode into str Co-authored-by: xiafu <[email protected]>
1 parent 78cfb60 commit fba2484

File tree

4 files changed

+56
-45
lines changed

4 files changed

+56
-45
lines changed

sdk/storage/azure-storage-blob/azure/storage/blob/_blob_client.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -183,12 +183,10 @@ def _encode_source_url(self, source_url):
183183
source_hostname = parsed_source_url.netloc.rstrip('/')
184184
source_path = unquote(parsed_source_url.path)
185185
source_query = parsed_source_url.query
186-
return "{}://{}{}?{}".format(
187-
source_scheme,
188-
source_hostname,
189-
quote(source_path, safe='~/'),
190-
source_query
191-
)
186+
result = ["{}://{}{}".format(source_scheme, source_hostname, quote(source_path, safe='~/'))]
187+
if source_query:
188+
result.append(source_query)
189+
return '?'.join(result)
192190

193191
@classmethod
194192
def from_blob_url(cls, blob_url, credential=None, snapshot=None, **kwargs):

sdk/storage/azure-storage-blob/tests/recordings/test_container.test_list_blobs_with_include_copy.yaml

Lines changed: 42 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ interactions:
1111
Content-Length:
1212
- '0'
1313
User-Agent:
14-
- azsdk-python-storage-blob/12.0.0b5 Python/3.6.3 (Windows-10-10.0.18362-SP0)
14+
- azsdk-python-storage-blob/12.4.0 Python/3.8.5 (Windows-10-10.0.18362-SP0)
1515
x-ms-date:
16-
- Fri, 25 Oct 2019 17:59:37 GMT
16+
- Wed, 02 Sep 2020 21:55:35 GMT
1717
x-ms-version:
18-
- '2019-02-02'
18+
- '2019-12-12'
1919
method: PUT
2020
uri: https://storagename.blob.core.windows.net/containere54813d5?restype=container
2121
response:
@@ -25,15 +25,15 @@ interactions:
2525
content-length:
2626
- '0'
2727
date:
28-
- Fri, 25 Oct 2019 17:59:36 GMT
28+
- Wed, 02 Sep 2020 21:55:35 GMT
2929
etag:
30-
- '"0x8D75975197B6CE2"'
30+
- '"0x8D84F8AEC32E712"'
3131
last-modified:
32-
- Fri, 25 Oct 2019 17:59:36 GMT
32+
- Wed, 02 Sep 2020 21:55:35 GMT
3333
server:
3434
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
3535
x-ms-version:
36-
- '2019-02-02'
36+
- '2019-12-12'
3737
status:
3838
code: 201
3939
message: Created
@@ -53,15 +53,15 @@ interactions:
5353
If-None-Match:
5454
- '*'
5555
User-Agent:
56-
- azsdk-python-storage-blob/12.0.0b5 Python/3.6.3 (Windows-10-10.0.18362-SP0)
56+
- azsdk-python-storage-blob/12.4.0 Python/3.8.5 (Windows-10-10.0.18362-SP0)
5757
x-ms-blob-type:
5858
- BlockBlob
5959
x-ms-date:
60-
- Fri, 25 Oct 2019 17:59:37 GMT
60+
- Wed, 02 Sep 2020 21:55:36 GMT
6161
x-ms-meta-status:
6262
- original
6363
x-ms-version:
64-
- '2019-02-02'
64+
- '2019-12-12'
6565
method: PUT
6666
uri: https://storagename.blob.core.windows.net/containere54813d5/blob1
6767
response:
@@ -73,19 +73,21 @@ interactions:
7373
content-md5:
7474
- XrY7u+Ae7tCTyyK7j1rNww==
7575
date:
76-
- Fri, 25 Oct 2019 17:59:36 GMT
76+
- Wed, 02 Sep 2020 21:55:35 GMT
7777
etag:
78-
- '"0x8D759751984C5A7"'
78+
- '"0x8D84F8AEC5020DC"'
7979
last-modified:
80-
- Fri, 25 Oct 2019 17:59:37 GMT
80+
- Wed, 02 Sep 2020 21:55:36 GMT
8181
server:
8282
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
8383
x-ms-content-crc64:
8484
- vo7q9sPVKY0=
8585
x-ms-request-server-encrypted:
8686
- 'true'
8787
x-ms-version:
88-
- '2019-02-02'
88+
- '2019-12-12'
89+
x-ms-version-id:
90+
- '2020-09-02T21:55:36.1680604Z'
8991
status:
9092
code: 201
9193
message: Created
@@ -101,15 +103,15 @@ interactions:
101103
Content-Length:
102104
- '0'
103105
User-Agent:
104-
- azsdk-python-storage-blob/12.0.0b5 Python/3.6.3 (Windows-10-10.0.18362-SP0)
106+
- azsdk-python-storage-blob/12.4.0 Python/3.8.5 (Windows-10-10.0.18362-SP0)
105107
x-ms-copy-source:
106-
- https://pyacrstoragegaji2d3zddo3.blob.core.windows.net/containere54813d5/blob1
108+
- https://tamerdevtest.blob.core.windows.net/containere54813d5/blob1
107109
x-ms-date:
108-
- Fri, 25 Oct 2019 17:59:37 GMT
110+
- Wed, 02 Sep 2020 21:55:36 GMT
109111
x-ms-meta-status:
110112
- copy
111113
x-ms-version:
112-
- '2019-02-02'
114+
- '2019-12-12'
113115
method: PUT
114116
uri: https://storagename.blob.core.windows.net/containere54813d5/blob1copy
115117
response:
@@ -119,19 +121,21 @@ interactions:
119121
content-length:
120122
- '0'
121123
date:
122-
- Fri, 25 Oct 2019 17:59:36 GMT
124+
- Wed, 02 Sep 2020 21:55:36 GMT
123125
etag:
124-
- '"0x8D75975199480F2"'
126+
- '"0x8D84F8AEC722DFD"'
125127
last-modified:
126-
- Fri, 25 Oct 2019 17:59:37 GMT
128+
- Wed, 02 Sep 2020 21:55:36 GMT
127129
server:
128130
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
129131
x-ms-copy-id:
130-
- 530e75bb-3f05-457e-9ea7-67ab48b5dabc
132+
- 2cf9e669-0ae6-477c-bf7b-e8d0d5e49fc8
131133
x-ms-copy-status:
132134
- success
133135
x-ms-version:
134-
- '2019-02-02'
136+
- '2019-12-12'
137+
x-ms-version-id:
138+
- '2020-09-02T21:55:36.3912189Z'
135139
status:
136140
code: 202
137141
message: Accepted
@@ -145,38 +149,39 @@ interactions:
145149
Connection:
146150
- keep-alive
147151
User-Agent:
148-
- azsdk-python-storage-blob/12.0.0b5 Python/3.6.3 (Windows-10-10.0.18362-SP0)
152+
- azsdk-python-storage-blob/12.4.0 Python/3.8.5 (Windows-10-10.0.18362-SP0)
149153
x-ms-date:
150-
- Fri, 25 Oct 2019 17:59:37 GMT
154+
- Wed, 02 Sep 2020 21:55:36 GMT
151155
x-ms-version:
152-
- '2019-02-02'
156+
- '2019-12-12'
153157
method: GET
154158
uri: https://storagename.blob.core.windows.net/containere54813d5?include=copy&restype=container&comp=list
155159
response:
156160
body:
157161
string: "\uFEFF<?xml version=\"1.0\" encoding=\"utf-8\"?><EnumerationResults
158-
ServiceEndpoint=\"https://storagename.blob.core.windows.net/\" ContainerName=\"containere54813d5\"><Blobs><Blob><Name>blob1</Name><Properties><Creation-Time>Fri,
159-
25 Oct 2019 17:59:37 GMT</Creation-Time><Last-Modified>Fri, 25 Oct 2019 17:59:37
160-
GMT</Last-Modified><Etag>0x8D759751984C5A7</Etag><Content-Length>11</Content-Length><Content-Type>application/octet-stream</Content-Type><Content-Encoding
162+
ServiceEndpoint=\"https://storagename.blob.core.windows.net/\" ContainerName=\"containere54813d5\"><Blobs><Blob><Name>blob1</Name><VersionId>2020-09-02T21:55:36.1680604Z</VersionId><IsCurrentVersion>true</IsCurrentVersion><Properties><Creation-Time>Wed,
163+
02 Sep 2020 21:55:36 GMT</Creation-Time><Last-Modified>Wed, 02 Sep 2020 21:55:36
164+
GMT</Last-Modified><Etag>0x8D84F8AEC5020DC</Etag><Content-Length>11</Content-Length><Content-Type>application/octet-stream</Content-Type><Content-Encoding
161165
/><Content-Language /><Content-CRC64 /><Content-MD5>XrY7u+Ae7tCTyyK7j1rNww==</Content-MD5><Cache-Control
162-
/><Content-Disposition /><BlobType>BlockBlob</BlobType><AccessTier>Hot</AccessTier><AccessTierInferred>true</AccessTierInferred><LeaseStatus>unlocked</LeaseStatus><LeaseState>available</LeaseState><ServerEncrypted>true</ServerEncrypted></Properties></Blob><Blob><Name>blob1copy</Name><Properties><Creation-Time>Fri,
163-
25 Oct 2019 17:59:37 GMT</Creation-Time><Last-Modified>Fri, 25 Oct 2019 17:59:37
164-
GMT</Last-Modified><Etag>0x8D75975199480F2</Etag><Content-Length>11</Content-Length><Content-Type>application/octet-stream</Content-Type><Content-Encoding
166+
/><Content-Disposition /><BlobType>BlockBlob</BlobType><AccessTier>Hot</AccessTier><AccessTierInferred>true</AccessTierInferred><LeaseStatus>unlocked</LeaseStatus><LeaseState>available</LeaseState><ServerEncrypted>true</ServerEncrypted></Properties><OrMetadata
167+
/></Blob><Blob><Name>blob1copy</Name><VersionId>2020-09-02T21:55:36.3912189Z</VersionId><IsCurrentVersion>true</IsCurrentVersion><Properties><Creation-Time>Wed,
168+
02 Sep 2020 21:55:36 GMT</Creation-Time><Last-Modified>Wed, 02 Sep 2020 21:55:36
169+
GMT</Last-Modified><Etag>0x8D84F8AEC722DFD</Etag><Content-Length>11</Content-Length><Content-Type>application/octet-stream</Content-Type><Content-Encoding
165170
/><Content-Language /><Content-CRC64 /><Content-MD5>XrY7u+Ae7tCTyyK7j1rNww==</Content-MD5><Cache-Control
166-
/><Content-Disposition /><BlobType>BlockBlob</BlobType><AccessTier>Hot</AccessTier><AccessTierInferred>true</AccessTierInferred><LeaseStatus>unlocked</LeaseStatus><LeaseState>available</LeaseState><CopyId>530e75bb-3f05-457e-9ea7-67ab48b5dabc</CopyId><CopySource>https://storagename.blob.core.windows.net/containere54813d5/blob1</CopySource><CopyStatus>success</CopyStatus><CopyProgress>11/11</CopyProgress><CopyCompletionTime>Fri,
167-
25 Oct 2019 17:59:37 GMT</CopyCompletionTime><ServerEncrypted>true</ServerEncrypted></Properties></Blob></Blobs><NextMarker
168-
/></EnumerationResults>"
171+
/><Content-Disposition /><BlobType>BlockBlob</BlobType><AccessTier>Hot</AccessTier><AccessTierInferred>true</AccessTierInferred><LeaseStatus>unlocked</LeaseStatus><LeaseState>available</LeaseState><CopyId>2cf9e669-0ae6-477c-bf7b-e8d0d5e49fc8</CopyId><CopySource>https://storagename.blob.core.windows.net/containere54813d5/blob1</CopySource><CopyStatus>success</CopyStatus><CopyProgress>11/11</CopyProgress><CopyCompletionTime>Wed,
172+
02 Sep 2020 21:55:36 GMT</CopyCompletionTime><ServerEncrypted>true</ServerEncrypted></Properties><OrMetadata
173+
/></Blob></Blobs><NextMarker /></EnumerationResults>"
169174
headers:
170175
content-type:
171176
- application/xml
172177
date:
173-
- Fri, 25 Oct 2019 17:59:36 GMT
178+
- Wed, 02 Sep 2020 21:55:36 GMT
174179
server:
175180
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
176181
transfer-encoding:
177182
- chunked
178183
x-ms-version:
179-
- '2019-02-02'
184+
- '2019-12-12'
180185
status:
181186
code: 200
182187
message: OK

sdk/storage/azure-storage-blob/tests/test_block_blob_sync_copy.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,12 @@
3131
class StorageBlockBlobTest(StorageTestCase):
3232

3333
def _setup(self, storage_account, key):
34+
account_url = self.account_url(storage_account, "blob")
35+
if not isinstance(account_url, str):
36+
account_url = account_url.encode('utf-8')
37+
key = key.encode('utf-8')
3438
self.bsc = BlobServiceClient(
35-
self.account_url(storage_account, "blob"),
39+
account_url,
3640
credential=key,
3741
connection_data_block_size=4 * 1024,
3842
max_single_put_size=32 * 1024,

sdk/storage/azure-storage-blob/tests/test_page_blob.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,11 @@ def test_update_page_unicode(self, resource_group, location, storage_account, st
410410
@GlobalStorageAccountPreparer()
411411
def test_upload_pages_from_url(self, resource_group, location, storage_account, storage_account_key):
412412
# Arrange
413-
bsc = BlobServiceClient(self.account_url(storage_account, "blob"), credential=storage_account_key, connection_data_block_size=4 * 1024, max_page_size=4 * 1024)
413+
account_url = self.account_url(storage_account, "blob")
414+
if not isinstance(account_url, str):
415+
account_url = account_url.encode('utf-8')
416+
storage_account_key = storage_account_key.encode('utf-8')
417+
bsc = BlobServiceClient(account_url, credential=storage_account_key, connection_data_block_size=4 * 1024, max_page_size=4 * 1024)
414418
self._setup(bsc)
415419
source_blob_data = self.get_random_bytes(SOURCE_BLOB_SIZE)
416420
source_blob_client = self._create_source_blob(bsc, source_blob_data, 0, SOURCE_BLOB_SIZE)

0 commit comments

Comments
 (0)