1515
1616import io
1717import os
18+
1819import six
1920from six .moves import urllib
2021
@@ -176,13 +177,24 @@ def container_show(
176177 'x-container-object-count' ,
177178 None ,
178179 ),
179- 'meta-owner' : response .headers .get ('x-container-meta-owner' , None ),
180- 'bytes_used' : response .headers .get ('x-container-bytes-used' , None ),
181- 'read_acl' : response .headers .get ('x-container-read' , None ),
182- 'write_acl' : response .headers .get ('x-container-write' , None ),
183- 'sync_to' : response .headers .get ('x-container-sync-to' , None ),
184- 'sync_key' : response .headers .get ('x-container-sync-key' , None ),
180+ 'bytes_used' : response .headers .get ('x-container-bytes-used' , None )
185181 }
182+
183+ if 'x-container-read' in response .headers :
184+ data ['read_acl' ] = response .headers .get ('x-container-read' , None )
185+ if 'x-container-write' in response .headers :
186+ data ['write_acl' ] = response .headers .get ('x-container-write' , None )
187+ if 'x-container-sync-to' in response .headers :
188+ data ['sync_to' ] = response .headers .get ('x-container-sync-to' , None )
189+ if 'x-container-sync-key' in response .headers :
190+ data ['sync_key' ] = response .headers .get ('x-container-sync-key' ,
191+ None )
192+
193+ properties = self ._get_properties (response .headers ,
194+ 'x-container-meta-' )
195+ if properties :
196+ data ['properties' ] = properties
197+
186198 return data
187199
188200 def container_unset (
@@ -434,12 +446,12 @@ def object_show(
434446 response = self ._request ('HEAD' , "%s/%s" %
435447 (urllib .parse .quote (container ),
436448 urllib .parse .quote (object )))
449+
437450 data = {
438451 'account' : self ._find_account_id (),
439452 'container' : container ,
440453 'object' : object ,
441454 'content-type' : response .headers .get ('content-type' , None ),
442- 'meta-owner' : response .headers .get ('x-container-meta-owner' , None ),
443455 }
444456 if 'content-length' in response .headers :
445457 data ['content-length' ] = response .headers .get (
@@ -455,19 +467,10 @@ def object_show(
455467 'x-object-manifest' ,
456468 None ,
457469 )
458- for key , value in six .iteritems (response .headers ):
459- if key .startswith ('x-object-meta-' ):
460- data [key [len ('x-object-meta-' ):].lower ()] = value
461- elif key not in (
462- 'content-type' ,
463- 'content-length' ,
464- 'last-modified' ,
465- 'etag' ,
466- 'date' ,
467- 'x-object-manifest' ,
468- 'x-container-meta-owner' ,
469- ):
470- data [key .lower ()] = value
470+
471+ properties = self ._get_properties (response .headers , 'x-object-meta-' )
472+ if properties :
473+ data ['properties' ] = properties
471474
472475 return data
473476
@@ -495,12 +498,16 @@ def account_show(self):
495498 # catalog should be enough.
496499 response = self ._request ("HEAD" , "" )
497500 data = {}
498- for k , v in response .headers .iteritems ():
499- data [k ] = v
501+
502+ properties = self ._get_properties (response .headers , 'x-account-meta-' )
503+ if properties :
504+ data ['properties' ] = properties
505+
500506 # Map containers, bytes and objects a bit nicer
501- data ['Containers' ] = data .pop ('x-account-container-count' , None )
502- data ['Objects' ] = data .pop ('x-account-object-count' , None )
503- data ['Bytes' ] = data .pop ('x-account-bytes-used' , None )
507+ data ['Containers' ] = response .headers .get ('x-account-container-count' ,
508+ None )
509+ data ['Objects' ] = response .headers .get ('x-account-object-count' , None )
510+ data ['Bytes' ] = response .headers .get ('x-account-bytes-used' , None )
504511 # Add in Account info too
505512 data ['Account' ] = self ._find_account_id ()
506513 return data
@@ -549,3 +556,12 @@ def _set_properties(self, properties, header_tag):
549556 header_name = header_tag % k
550557 headers [header_name ] = v
551558 return headers
559+
560+ def _get_properties (self , headers , header_tag ):
561+ # Add in properties as a top level key, this is consistent with other
562+ # OSC commands
563+ properties = {}
564+ for k , v in six .iteritems (headers ):
565+ if k .startswith (header_tag ):
566+ properties [k [len (header_tag ):]] = v
567+ return properties
0 commit comments