Added un/publish object
authorStavros Sachtouris <saxtouri@admin.grnet.gr>
Fri, 6 Jul 2012 10:09:33 +0000 (13:09 +0300)
committerStavros Sachtouris <saxtouri@admin.grnet.gr>
Tue, 10 Jul 2012 14:09:27 +0000 (17:09 +0300)
kamaki/cli.py
kamaki/clients/__init__.py
kamaki/clients/pithos.py
kamaki/clients/storage.py

index 5659a0d..66bf368 100755 (executable)
@@ -875,6 +875,24 @@ class store_purge(_store_account_command):
         super(store_purge, self).main()
         self.client.purge_container(container)
 
+@command(api='storage')
+class store_publish(_store_container_command):
+    """Publish an object"""
+
+    def main(self, container, object):
+        super(store_publish, self).main()
+        self.client.container = container
+        self.client.publish_object(object)
+
+@command(api='storage')
+class store_unpublish(_store_container_command):
+    """Unpublish an object"""
+
+    def main(self, container, object):
+        super(store_unpublish, self).main()
+        self.client.container = container
+        self.client.unpublish_object(object)
+
 @command(api='astakos')
 class astakos_authenticate(object):
     """Authenticate a user"""
index 11731f4..2a7dc29 100644 (file)
@@ -76,6 +76,7 @@ class Client(object):
         data = kwargs.pop('data', None)
         headers = kwargs.pop('headers', {})
         headers.setdefault('X-Auth-Token', self.token)
+        publish = kwargs.pop('publish', None)
 
         if directory:
             headers.setdefault('Content-Type', 'application/directory')
@@ -90,6 +91,9 @@ class Client(object):
         if meta:
             for key in meta.keys():
                 headers[key] = meta[key]
+
+        if publish is not None:
+            headers.setdefault('X-object-public', unicode(publish))
             
         url = self.base_url + path
         kwargs.setdefault('verify', False)  # Disable certificate verification
index 010d516..ffdb7b2 100644 (file)
@@ -181,3 +181,16 @@ class PithosClient(StorageClient):
         path=path4url(self.account, self.container, object)+params4url({'update':None})
         meta = prefix_keys(metapairs, 'X-Object-Meta-')
         self.post(path, meta=meta, success=202)
+
+    def publish_object(self, object):
+        self.assert_container()
+        path = path4url(self.account, self.container, object)+params4url({'update':None})
+        self.post(path, publish=True, success=202)
+
+    def unpublish_object(self, object):
+        self.assert_container()
+        path = path4url(self.account, self.container, object)+params4url({'update':None})
+        self.post(path, publish=False, success=202)
+        
+        
+        
index 90b06a0..8bb5201 100644 (file)
@@ -90,10 +90,6 @@ class StorageClient(Client):
         return reply
 
     def delete_container(self, container):
-        #Response codes
-        #   Success             204
-        #   NotFound            404
-        #   Conflict(not empty) 409
         self.assert_account()
         path = path4url(self.account, container)
         r = self.delete(path, success=(204, 404, 409))