1616import io
1717import os
1818import six
19+ from six .moves import urllib
1920
2021try :
2122 from urllib .parse import urlparse # noqa
@@ -42,8 +43,7 @@ def container_create(
4243 :returns:
4344 dict of returned headers
4445 """
45-
46- response = self .create (container , method = 'PUT' )
46+ response = self .create (urllib .parse .quote (container ), method = 'PUT' )
4747 data = {
4848 'account' : self ._find_account_id (),
4949 'container' : container ,
@@ -63,7 +63,7 @@ def container_delete(
6363 """
6464
6565 if container :
66- self .delete (container )
66+ self .delete (urllib . parse . quote ( container ) )
6767
6868 def container_list (
6969 self ,
@@ -154,7 +154,7 @@ def container_set(
154154
155155 headers = self ._set_properties (properties , 'X-Container-Meta-%s' )
156156 if headers :
157- self .create (container , headers = headers )
157+ self .create (urllib . parse . quote ( container ) , headers = headers )
158158
159159 def container_show (
160160 self ,
@@ -168,7 +168,7 @@ def container_show(
168168 dict of returned headers
169169 """
170170
171- response = self ._request ('HEAD' , container )
171+ response = self ._request ('HEAD' , urllib . parse . quote ( container ) )
172172 data = {
173173 'account' : self ._find_account_id (),
174174 'container' : container ,
@@ -201,7 +201,7 @@ def container_unset(
201201 headers = self ._unset_properties (properties ,
202202 'X-Remove-Container-Meta-%s' )
203203 if headers :
204- self .create (container , headers = headers )
204+ self .create (urllib . parse . quote ( container ) , headers = headers )
205205
206206 def object_create (
207207 self ,
@@ -222,7 +222,8 @@ def object_create(
222222 # TODO(dtroyer): What exception to raise here?
223223 return {}
224224
225- full_url = "%s/%s" % (container , object )
225+ full_url = "%s/%s" % (urllib .parse .quote (container ),
226+ urllib .parse .quote (object ))
226227 with io .open (object , 'rb' ) as f :
227228 response = self .create (
228229 full_url ,
@@ -255,7 +256,8 @@ def object_delete(
255256 if container is None or object is None :
256257 return
257258
258- self .delete ("%s/%s" % (container , object ))
259+ self .delete ("%s/%s" % (urllib .parse .quote (container ),
260+ urllib .parse .quote (object )))
259261
260262 def object_list (
261263 self ,
@@ -332,7 +334,7 @@ def object_list(
332334 if delimiter :
333335 params ['delimiter' ] = delimiter
334336
335- return self .list (container , ** params )
337+ return self .list (urllib . parse . quote ( container ) , ** params )
336338
337339 def object_save (
338340 self ,
@@ -355,7 +357,8 @@ def object_save(
355357
356358 response = self ._request (
357359 'GET' ,
358- "%s/%s" % (container , object ),
360+ "%s/%s" % (urllib .parse .quote (container ),
361+ urllib .parse .quote (object )),
359362 stream = True ,
360363 )
361364 if response .status_code == 200 :
@@ -384,7 +387,9 @@ def object_set(
384387
385388 headers = self ._set_properties (properties , 'X-Object-Meta-%s' )
386389 if headers :
387- self .create ("%s/%s" % (container , object ), headers = headers )
390+ self .create ("%s/%s" % (urllib .parse .quote (container ),
391+ urllib .parse .quote (object )),
392+ headers = headers )
388393
389394 def object_unset (
390395 self ,
@@ -404,7 +409,9 @@ def object_unset(
404409
405410 headers = self ._unset_properties (properties , 'X-Remove-Object-Meta-%s' )
406411 if headers :
407- self .create ("%s/%s" % (container , object ), headers = headers )
412+ self .create ("%s/%s" % (urllib .parse .quote (container ),
413+ urllib .parse .quote (object )),
414+ headers = headers )
408415
409416 def object_show (
410417 self ,
@@ -424,7 +431,9 @@ def object_show(
424431 if container is None or object is None :
425432 return {}
426433
427- response = self ._request ('HEAD' , "%s/%s" % (container , object ))
434+ response = self ._request ('HEAD' , "%s/%s" %
435+ (urllib .parse .quote (container ),
436+ urllib .parse .quote (object )))
428437 data = {
429438 'account' : self ._find_account_id (),
430439 'container' : container ,
0 commit comments