summaryrefslogtreecommitdiff
path: root/boto/s3/key.py
diff options
context:
space:
mode:
Diffstat (limited to 'boto/s3/key.py')
-rw-r--r--boto/s3/key.py36
1 files changed, 19 insertions, 17 deletions
diff --git a/boto/s3/key.py b/boto/s3/key.py
index 9674d356..ffceeb9c 100644
--- a/boto/s3/key.py
+++ b/boto/s3/key.py
@@ -89,10 +89,16 @@ class Key(object):
# x-amz-meta).
base_user_settable_fields = set(["cache-control", "content-disposition",
"content-encoding", "content-language",
- "content-md5", "content-type"])
+ "content-md5", "content-type",
+ "x-robots-tag", "expires"])
_underscore_base_user_settable_fields = set()
for f in base_user_settable_fields:
_underscore_base_user_settable_fields.add(f.replace('-', '_'))
+ # Metadata fields, whether user-settable or not, other than custom
+ # metadata fields (i.e., those beginning with a provider specific prefix
+ # like x-amz-meta).
+ base_fields = (base_user_settable_fields |
+ set(["last-modified", "content-length", "date", "etag"]))
@@ -130,9 +136,15 @@ class Key(object):
def __repr__(self):
if self.bucket:
- return '<Key: %s,%s>' % (self.bucket.name, self.name)
+ name = u'<Key: %s,%s>' % (self.bucket.name, self.name)
else:
- return '<Key: None,%s>' % self.name
+ name = u'<Key: None,%s>' % self.name
+
+ # Encode to bytes for Python 2 to prevent display decoding issues
+ if not isinstance(name, str):
+ name = name.encode('utf-8')
+
+ return name
def __iter__(self):
return self
@@ -302,20 +314,8 @@ class Key(object):
elif name.lower() == 'content-range':
end_range = re.sub('.*/(.*)', '\\1', value)
self.size = int(end_range)
- elif name.lower() == 'etag':
- self.etag = value
- elif name.lower() == 'content-type':
- self.content_type = value
- elif name.lower() == 'content-encoding':
- self.content_encoding = value
- elif name.lower() == 'content-language':
- self.content_language = value
- elif name.lower() == 'last-modified':
- self.last_modified = value
- elif name.lower() == 'cache-control':
- self.cache_control = value
- elif name.lower() == 'content-disposition':
- self.content_disposition = value
+ elif name.lower() in Key.base_fields:
+ self.__dict__[name.lower().replace('-', '_')] = value
self.handle_version_headers(self.resp)
self.handle_encryption_headers(self.resp)
self.handle_restore_headers(self.resp)
@@ -555,6 +555,8 @@ class Key(object):
self.metadata['Content-MD5'] = value
else:
self.metadata[name] = value
+ if name.lower() in Key.base_user_settable_fields:
+ self.__dict__[name.lower().replace('-', '_')] = value
def update_metadata(self, d):
self.metadata.update(d)