You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2011/04/04 02:27:54 UTC

svn commit: r1088455 - in /incubator/libcloud/trunk/libcloud/storage: base.py drivers/dummy.py

Author: tomaz
Date: Mon Apr  4 00:27:54 2011
New Revision: 1088455

URL: http://svn.apache.org/viewvc?rev=1088455&view=rev
Log:
Add two new methods to the storage API:
- get_container_cdn_url
- get_object_cdn_url

Modified:
    incubator/libcloud/trunk/libcloud/storage/base.py
    incubator/libcloud/trunk/libcloud/storage/drivers/dummy.py

Modified: incubator/libcloud/trunk/libcloud/storage/base.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/storage/base.py?rev=1088455&r1=1088454&r2=1088455&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/storage/base.py (original)
+++ incubator/libcloud/trunk/libcloud/storage/base.py Mon Apr  4 00:27:54 2011
@@ -65,6 +65,9 @@ class Object(object):
         self.meta_data = meta_data or {}
         self.driver = driver
 
+    def get_cdn_url(self):
+        return self.driver.get_object_cdn_url(obj=self)
+
     def download(self, destination_path, overwrite_existing=False,
                  delete_on_failure=True):
         return self.driver.download_object(self, destination_path,
@@ -103,7 +106,10 @@ class Container(object):
         self.driver = driver
 
     def list_objects(self):
-        return self.driver.list_container_objects(self)
+        return self.driver.list_container_objects(container=self)
+
+    def get_cdn_url(self):
+        return self.driver.get_container_cdn_url(container=self)
 
     def get_object(self, object_name):
         return self.driver.get_object(container_name=self.name,
@@ -203,6 +209,18 @@ class StorageDriver(object):
         raise NotImplementedError(
             'get_object not implemented for this driver')
 
+    def get_container_cdn_url(self, container):
+        """
+        Return a container CDN URL.
+
+        @type container: C{Container}
+        @param container: Container instance
+
+        @return A CDN URL for this container.
+        """
+        raise NotImplementedError(
+            'get_container_cdn_url not implemented for this driver')
+
     def get_object(self, container_name, object_name):
         """
         Return an object instance.
@@ -218,6 +236,18 @@ class StorageDriver(object):
         raise NotImplementedError(
             'get_object not implemented for this driver')
 
+    def get_object_cdn_url(self, obj):
+        """
+        Return a container CDN URL.
+
+        @type obj: C{Object}
+        @param obj: Object instance
+
+        @return A CDN URL for this object.
+        """
+        raise NotImplementedError(
+            'get_object_cdn_url not implemented for this driver')
+
     def download_object(self, obj, destination_path, delete_on_failure=True):
         """
         Download an object to the specified destination path.

Modified: incubator/libcloud/trunk/libcloud/storage/drivers/dummy.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/storage/drivers/dummy.py?rev=1088455&r1=1088454&r2=1088455&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/storage/drivers/dummy.py (original)
+++ incubator/libcloud/trunk/libcloud/storage/drivers/dummy.py Mon Apr  4 00:27:54 2011
@@ -59,7 +59,6 @@ class DummyIterator(object):
         self._current_item += 1
         return value
 
-# @@FIX: the doctests below are not run by the main test suite
 class DummyStorageDriver(StorageDriver):
     """
     Dummy Storage driver.
@@ -158,8 +157,29 @@ class DummyStorageDriver(StorageDriver):
 
         return self._containers[container_name]['container']
 
-    def get_object(self, container_name, object_name):
+    def get_container_cdn_url(self, container):
+        """
+        >>> driver = DummyStorageDriver('key', 'secret')
+        >>> driver.get_container('unknown') #doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ContainerDoesNotExistError:
+        >>> container = driver.create_container(container_name='test container 1')
+        >>> container
+        <Container: name=test container 1, provider=Dummy Storage Provider>
+        >>> container.name
+        'test container 1'
+        >>> container.get_cdn_url()
+        'http://www.test.com/container/test_container_1'
         """
+
+        if container.name not in self._containers:
+            raise ContainerDoesNotExistError(driver=self, value=None,
+                                             container_name=container.name)
+
+        return self._containers[container.name]['cdn_url']
+
+    def get_object(self, container_name, object_name):
+       """
        >>> driver = DummyStorageDriver('key', 'secret')
        >>> driver.get_object('unknown', 'unknown') #doctest: +IGNORE_EXCEPTION_DETAIL
        Traceback (most recent call last):
@@ -175,16 +195,38 @@ class DummyStorageDriver(StorageDriver):
        ...      iterator=DummyFileObject(5, 10), extra={})
        >>> obj
        <Object: name=test object, size=50, hash=None, provider=Dummy Storage Provider ...>
-        """
-
-        self.get_container(container_name)
+       """
 
-        container_objects = self._containers[container_name]['objects']
-        if object_name not in container_objects:
+       self.get_container(container_name)
+       container_objects = self._containers[container_name]['objects']
+       if object_name not in container_objects:
             raise ObjectDoesNotExistError(object_name=object_name, value=None,
                                           driver=self)
 
-        return container_objects[object_name]
+       return container_objects[object_name]
+
+    def get_object_cdn_url(self, obj):
+       """
+       >>> driver = DummyStorageDriver('key', 'secret')
+       >>> container = driver.create_container(container_name='test container 1')
+       >>> container
+       <Container: name=test container 1, provider=Dummy Storage Provider>
+       >>> obj = container.upload_object_via_stream(object_name='test object 5',
+       ...      iterator=DummyFileObject(5, 10), extra={})
+       >>> obj
+       <Object: name=test object 5, size=50, hash=None, provider=Dummy Storage Provider ...>
+       >>> obj.get_cdn_url()
+       'http://www.test.com/object/test_object_5'
+       """
+
+       container_name = obj.container.name
+       container_objects = self._containers[container_name]['objects']
+       if obj.name not in container_objects:
+           raise ObjectDoesNotExistError(object_name=obj.name, value=None,
+                                         driver=self)
+
+       return container_objects[obj.name].meta_data['cdn_url']
+
 
     def create_container(self, container_name):
         """
@@ -206,7 +248,10 @@ class DummyStorageDriver(StorageDriver):
         container = Container(name=container_name, extra=extra, driver=self)
 
         self._containers[container_name] = { 'container': container,
-                                             'objects': {}
+                                             'objects': {},
+                                             'cdn_url':
+                                             'http://www.test.com/container/%s' %
+                                             (container_name.replace(' ', '_'))
                                            }
         return container
 
@@ -346,6 +391,8 @@ class DummyStorageDriver(StorageDriver):
 
         extra = extra or {}
         meta_data = extra.get('meta_data', {})
+        meta_data.update({'cdn_url': 'http://www.test.com/object/%s' %
+                          (object_name.replace(' ', '_'))})
         obj = Object(name=object_name, size=size, extra=extra, hash=None,
                      meta_data=meta_data, container=container, driver=self)