Added mkdir functionality to storage
authorStavros Sachtouris <saxtouri@admin.grnet.gr>
Fri, 29 Jun 2012 08:53:48 +0000 (11:53 +0300)
committerStavros Sachtouris <saxtouri@admin.grnet.gr>
Tue, 10 Jul 2012 14:09:27 +0000 (17:09 +0300)
.gitignore
kamaki/cli.py
kamaki/clients/__init__.py
kamaki/clients/storage.py

index 1d86ff8..98d375c 100644 (file)
@@ -1,3 +1,4 @@
 *.pyc
 *.egg-info
+*.*.swp
 _build
index 10e33c9..52bef8d 100755 (executable)
@@ -701,6 +701,13 @@ class _store_container_command(_store_account_command):
         if self.args.container is not None:
             self.client.container = self.args.container
 
+@command(api='storage')
+class store_mkdir(_store_container_command):
+    """Create a directory"""
+
+    def main(self, path):
+        super(store_mkdir, self).main()
+        self.client.create_directory(path)
 
 @command(api='storage')
 class store_create(_store_account_command):
index 91d6979..34751d3 100644 (file)
@@ -70,17 +70,21 @@ class Client(object):
     def request(self, method, path, **kwargs):
         raw = kwargs.pop('raw', False)
         success = kwargs.pop('success', 200)
+        directory = kwargs.pop('directory', False)
 
         data = kwargs.pop('data', None)
         headers = kwargs.pop('headers', {})
         headers.setdefault('X-Auth-Token', self.token)
 
-        if 'json' in kwargs:
-            data = json.dumps(kwargs.pop('json'))
-            headers.setdefault('Content-Type', 'application/json')
-
-        if data:
-            headers.setdefault('Content-Length', str(len(data)))
+        if directory:
+            headers.setdefault('Content-Type', 'application/directory')
+            headers.setdefault('Content-length', '0')
+        else:
+            if 'json' in kwargs:
+                data = json.dumps(kwargs.pop('json'))
+                headers.setdefault('Content-Type', 'application/json')
+            if data:
+                headers.setdefault('Content-Length', str(len(data)))
 
         url = self.base_url + path
         kwargs.setdefault('verify', False)  # Disable certificate verification
index 3c984a8..91e5309 100644 (file)
@@ -82,6 +82,11 @@ class StorageClient(Client):
         data = f.read(size) if size is not None else f.read()
         self.put(path, data=data, success=201)
 
+    def create_directory(self, object):
+        self.assert_container()
+        path = '/%s/%s/%s' % (self.account, self.container, object)
+        self.put(path, data='', directory=True, success=201)
+
     def get_object(self, object):
         self.assert_container()
         path = '/%s/%s/%s' % (self.account, self.container, object)