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)