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 2012/09/15 00:36:29 UTC

svn commit: r1384955 - in /libcloud/trunk: CHANGES libcloud/storage/drivers/s3.py libcloud/test/storage/test_s3.py

Author: tomaz
Date: Fri Sep 14 22:36:29 2012
New Revision: 1384955

URL: http://svn.apache.org/viewvc?rev=1384955&view=rev
Log:
Include 'last_modified' and 'content_type' attribute in the Object
'extra' dictionary when retrieving object using get_object in the S3
driver. Also modify 'meta_data' dictionary to include all the
headers prefixed with 'x-amz-meta-'.

Modified:
    libcloud/trunk/CHANGES
    libcloud/trunk/libcloud/storage/drivers/s3.py
    libcloud/trunk/libcloud/test/storage/test_s3.py

Modified: libcloud/trunk/CHANGES
URL: http://svn.apache.org/viewvc/libcloud/trunk/CHANGES?rev=1384955&r1=1384954&r2=1384955&view=diff
==============================================================================
--- libcloud/trunk/CHANGES (original)
+++ libcloud/trunk/CHANGES Fri Sep 14 22:36:29 2012
@@ -1,5 +1,15 @@
                                    -*- coding: utf-8 -*-
 
+Changes with Apache Libcloud in development:
+
+  *) Storage
+
+    - Include 'last_modified' and 'content_type' attribute in the Object
+      'extra' dictionary when retrieving object using get_object in the S3
+      driver. Also modify 'meta_data' dictionary to include all the headers
+      prefixed with 'x-amz-meta-'.
+      [Tomaz Muraus]
+
 Changes with Apache Libcloud 0.11.2:
 
   *) General

Modified: libcloud/trunk/libcloud/storage/drivers/s3.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/libcloud/storage/drivers/s3.py?rev=1384955&r1=1384954&r2=1384955&view=diff
==============================================================================
--- libcloud/trunk/libcloud/storage/drivers/s3.py (original)
+++ libcloud/trunk/libcloud/storage/drivers/s3.py Fri Sep 14 22:36:29 2012
@@ -460,11 +460,22 @@ class S3StorageDriver(StorageDriver):
         return container
 
     def _headers_to_object(self, object_name, container, headers):
-        meta_data = {'content_type': headers['content-type']}
         hash = headers['etag'].replace('"', '')
+        extra = {'content_type': headers['content-type'], 'etag': headers['etag']}
+        meta_data = {}
+
+        if 'last-modified' in headers:
+            extra['last_modified'] = headers['last-modified']
+
+        for key, value in headers.items():
+            if not key.lower().startswith('x-amz-meta-'):
+                continue
+
+            key = key.replace('x-amz-meta-', '')
+            meta_data[key] = value
 
         obj = Object(name=object_name, size=headers['content-length'],
-                     hash=hash, extra=None,
+                     hash=hash, extra=extra,
                      meta_data=meta_data,
                      container=container,
                      driver=self)

Modified: libcloud/trunk/libcloud/test/storage/test_s3.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/libcloud/test/storage/test_s3.py?rev=1384955&r1=1384954&r2=1384955&view=diff
==============================================================================
--- libcloud/trunk/libcloud/test/storage/test_s3.py (original)
+++ libcloud/trunk/libcloud/test/storage/test_s3.py Fri Sep 14 22:36:29 2012
@@ -101,7 +101,9 @@ class S3MockHttp(StorageMockHttp):
         body = self.fixtures.load('list_containers.xml')
         headers = {'content-type': 'application/zip',
                     'etag': '"e31208wqsdoj329jd"',
+                    'x-amz-meta-rabbits': 'monkeys',
                     'content-length': 12345,
+                    'last-modified': 'Thu, 13 Sep 2012 07:13:22 GMT'
                     }
 
         return (httplib.OK,
@@ -375,6 +377,9 @@ class S3Tests(unittest.TestCase):
         self.assertEqual(obj.container.name, 'test2')
         self.assertEqual(obj.size, 12345)
         self.assertEqual(obj.hash, 'e31208wqsdoj329jd')
+        self.assertEqual(obj.extra['last_modified'], 'Thu, 13 Sep 2012 07:13:22 GMT')
+        self.assertEqual(obj.extra['content_type'], 'application/zip')
+        self.assertEqual(obj.meta_data['rabbits'], 'monkeys')
 
     def test_create_container_invalid_name(self):
         # invalid container name