bug fixing update/delete metadata
authorSofia Papagiannaki <papagian@gmail.com>
Tue, 21 Jun 2011 13:54:52 +0000 (16:54 +0300)
committerSofia Papagiannaki <papagian@gmail.com>
Tue, 21 Jun 2011 13:54:52 +0000 (16:54 +0300)
(sends back to the server only the user defined meta)
also bug fixing in client account unset (check for no path provided)
Fixes #576

pithos/lib/client.py
tools/store

index 0762a0b..811fd4c 100644 (file)
@@ -217,27 +217,29 @@ class Client(object):
         """
          adds new and updates the values of previously set metadata
         """
-        for key, val in meta.items():
-            meta.pop(key)
-            meta['X-%s-Meta-%s' %(entity.capitalize(), key.capitalize())] = val
-        prev_meta = self._get_metadata(path)
+        prefix = 'x-%s-meta-' % entity
+        prev_meta = self._get_metadata(path, prefix)
         prev_meta.update(meta)
         headers = {}
         for key, val in prev_meta.items():
-            headers[key.capitalize()] = val
+            key = '%s%s' % (prefix, key)
+            key = '-'.join(elem.capitalize() for elem in key.split('-'))
+            headers[key] = val
         self.post(path, headers=headers)
     
     def _delete_metadata(self, path, entity, meta=[]):
         """
         delete previously set metadata
         """
-        prev_meta = self._get_metadata(path)
+        prefix = 'x-%s-meta-' % entity
+        prev_meta = self._get_metadata(path, prefix)
         headers = {}
         for key, val in prev_meta.items():
-            if key.split('-')[-1] in meta:
+            if key in meta:
                 continue
-            http_key = key.capitalize()
-            headers[http_key] = val
+            key = '%s%s' % (prefix, key)
+            key = '-'.join(elem.capitalize() for elem in key.split('-'))
+            headers[key] = val
         self.post(path, headers=headers)
     
     # Storage Account Services
@@ -402,7 +404,7 @@ class Client(object):
     def restore_object(self, container, object):
         """
         restores a trashed object
-        actualy just resets all object metadata except trash
+        actualy removes trash object metadata info
         """
         self.delete_object_metadata(container, object, ['trash'])
 
index 2fa6873..582a4ac 100755 (executable)
@@ -314,9 +314,12 @@ class PutObject(Command):
         parser.add_option('--content-disposition', action='store', type='str',
                           dest='content-disposition', default=None,
                           help='provide the presentation style of the object')
-        parser.add_option('--manifest', action='store', type='str',
-                          dest='manifest', default=None,
+        parser.add_option('-S', action='store',
+                          dest='segment-size', default=False,
                           help='use for large file support')
+        parser.add_option('--manifest', action='store_true',
+                          dest='manifest', default=None,
+                          help='upload a manifestation file')
         parser.add_option('--type', action='store',
                           dest='content-type', default=False,
                           help='create object with specific content type')
@@ -494,7 +497,7 @@ class TrashObject(Command):
     
     def execute(self, path, *args):
         #in case of account fix the args
-        if path.find('=') != -1:
+        if len(args) == 0:
             args = list(args)
             args.append(path)
             args = tuple(args)