Skip to content

Commit b46c43d

Browse files
[Fix] obs multipart upload fix for swiss region
1 parent 20db3a2 commit b46c43d

2 files changed

Lines changed: 21 additions & 7 deletions

File tree

examples/obs/multipart_upload.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"""
1717

1818
openstack.enable_logging(True)
19-
conn = openstack.connect(cloud='otc')
19+
conn = openstack.connect(cloud='swiss')
2020
sdk.register_otc_extensions(conn)
2121
sdk.get_ak_sk(conn)
2222

@@ -27,8 +27,8 @@
2727
)
2828

2929
obj = conn.obs.upload_object(
30-
name='pdfs/book.pdf',
31-
filename='my-book.pdf',
30+
name='rancheros-openstack',
31+
filename='rancheros-openstack.img',
3232
container=container,
33-
segment_size=1400000
33+
segment_size=14000000
3434
)

otcextensions/sdk/obs/v1/obj.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ def initiate_multipart_upload(proxy, endpoint, name, **params):
334334
root = ET.fromstring(response.content)
335335
for element in root:
336336
dict_raw_resource = _base.BaseResource.etree_to_dict(element)
337+
dict_raw_resource = Object.clear_element(dict_raw_resource, proxy)
337338
dict_resource.update(dict_raw_resource)
338339
return dict_resource['UploadId']
339340

@@ -344,19 +345,32 @@ def get_parts(proxy, endpoint, requests_auth):
344345
root = ET.fromstring(response.content)
345346
for element in root:
346347
dict_raw_resource = _base.BaseResource.etree_to_dict(element)
347-
if element.tag == 'Part':
348-
dict_resource.setdefault('Parts', []).\
349-
append(dict_raw_resource['Part'])
348+
dict_raw_resource = Object.clear_element(dict_raw_resource, proxy)
349+
if element.tag.endswith('Part'):
350+
dict_resource.setdefault('Parts', []).append(dict_raw_resource['Part'])
350351
continue
351352
dict_resource.update(dict_raw_resource)
352353
return dict_resource
353354

355+
@staticmethod
356+
def clear_element(dict_raw_resource, proxy):
357+
if proxy.region_name == 'eu-ch2':
358+
cleaned_dict = {}
359+
for full_key, value in dict_raw_resource.items():
360+
# Strip namespace if present
361+
cleaned_key = full_key.split('}', 1)[1] \
362+
if full_key.startswith('{') else full_key
363+
cleaned_dict[cleaned_key] = value
364+
dict_raw_resource = cleaned_dict
365+
return dict_raw_resource
366+
354367
@staticmethod
355368
def complete_multipart_upload(
356369
proxy, endpoint, upload_id, data, headers, requests_auth):
357370
url = f'{endpoint}?uploadId={upload_id}'
358371
root = ET.Element("CompleteMultipartUpload")
359372
for item in data:
373+
item = Object.clear_element(item, proxy)
360374
part = ET.SubElement(root, "Part")
361375
ET.SubElement(part, 'PartNumber').text = item['PartNumber']
362376
ET.SubElement(part, 'ETag').text = item['ETag']

0 commit comments

Comments
 (0)