Extend client library & pithos-sh to support mass delete/copy/remove
[pithos] / snf-pithos-tools / pithos / tools / lib / client.py
index 5dec80b..cbe88ac 100644 (file)
@@ -460,7 +460,7 @@ class OOS_Client(Client):
     
     def _change_obj_location(self, src_container, src_object, dst_container,
                              dst_object, remove=False, meta={}, account=None,
-                             content_type=None, **headers):
+                             content_type=None, delimiter=None, **headers):
         account = account or self.account
         path = '/%s/%s/%s' % (account, dst_container, dst_object)
         headers = {} if not headers else headers
@@ -476,16 +476,18 @@ class OOS_Client(Client):
             headers['content_type'] = content_type
         else:
             params['ignore_content_type'] = ''
+        if delimiter:
+               params['delimiter'] = delimiter
         return self.put(path, headers=headers, params=params)
     
     def copy_object(self, src_container, src_object, dst_container, dst_object,
-                   meta={}, account=None, content_type=None, **headers):
+                   meta={}, account=None, content_type=None, delimiter=None, **headers):
         """copies an object"""
         account = account or self.account
         return self._change_obj_location(src_container, src_object,
                                    dst_container, dst_object, account=account,
                                    remove=False, meta=meta,
-                                   content_type=content_type, **headers)
+                                   content_type=content_type, delimiter=delimiter, **headers)
     
     def move_object(self, src_container, src_object, dst_container,
                              dst_object, meta={}, account=None,
@@ -870,10 +872,12 @@ class Pithos_Client(OOS_Client):
         args['x_source_object'] = source
         return self.update_object(container, object, f=None, **args)
     
-    def delete_object(self, container, object, until=None, account=None):
+    def delete_object(self, container, object, until=None, account=None, delimiter=None):
         """deletes an object or the object history until the date provided"""
         account = account or self.account
         params = {'until':until} if until else {}
+        if delimiter:
+               params['delimiter'] = delimiter
         return OOS_Client.delete_object(self, container, object, params, account)
     
     def trash_object(self, container, object):
@@ -908,7 +912,7 @@ class Pithos_Client(OOS_Client):
     
     def copy_object(self, src_container, src_object, dst_container, dst_object,
                     meta={}, public=False, version=None, account=None,
-                    content_type=None):
+                    content_type=None, delimiter=None):
         """copies an object"""
         account = account or self.account
         headers = {}
@@ -918,17 +922,19 @@ class Pithos_Client(OOS_Client):
         return OOS_Client.copy_object(self, src_container, src_object,
                                       dst_container, dst_object, meta=meta,
                                       account=account, content_type=content_type,
+                                      delimiter=delimiter,
                                       **headers)
     
     def move_object(self, src_container, src_object, dst_container,
                              dst_object, meta={}, public=False,
-                             account=None, content_type=None):
+                             account=None, content_type=None, delimiter=None):
         """moves an object"""
         headers = {}
         headers['x_object_public'] = public
         return OOS_Client.move_object(self, src_container, src_object,
                                       dst_container, dst_object, meta=meta,
                                       account=account, content_type=content_type,
+                                      delimiter=delimiter,
                                       **headers)
     
     def list_shared_by_others(self, limit=None, marker=None, format='text'):