s3server.py (ec2-api-14.0.1) | : | s3server.py (ec2-api-15.0.0) | ||
---|---|---|---|---|
skipping to change at line 43 | skipping to change at line 43 | |||
""" | """ | |||
import bisect | import bisect | |||
import datetime | import datetime | |||
import os.path | import os.path | |||
from oslo_config import cfg | from oslo_config import cfg | |||
from oslo_log import log as logging | from oslo_log import log as logging | |||
from oslo_utils import fileutils | from oslo_utils import fileutils | |||
import routes | import routes | |||
import six | from urllib import parse | |||
from six.moves.urllib import parse | ||||
import webob | import webob | |||
from ec2api import paths | from ec2api import paths | |||
from ec2api import utils | from ec2api import utils | |||
from ec2api import wsgi | from ec2api import wsgi | |||
s3_opts = [ | s3_opts = [ | |||
cfg.StrOpt('buckets_path', | cfg.StrOpt('buckets_path', | |||
default=paths.state_path_def('buckets'), | default=paths.state_path_def('buckets'), | |||
help='Path to S3 buckets'), | help='Path to S3 buckets'), | |||
skipping to change at line 175 | skipping to change at line 174 | |||
self.response.status = status_code | self.response.status = status_code | |||
def set_404(self): | def set_404(self): | |||
self.render_xml({"Error": { | self.render_xml({"Error": { | |||
"Code": "NoSuchKey", | "Code": "NoSuchKey", | |||
"Message": "The resource you requested does not exist" | "Message": "The resource you requested does not exist" | |||
}}) | }}) | |||
self.set_status(404) | self.set_status(404) | |||
def finish(self, body=''): | def finish(self, body=''): | |||
if isinstance(body, six.binary_type): | if isinstance(body, bytes): | |||
self.response.body = body | self.response.body = body | |||
else: | else: | |||
self.response.body = body.encode("utf-8") | self.response.body = body.encode("utf-8") | |||
def invalid(self, **kwargs): | def invalid(self, **kwargs): | |||
pass | pass | |||
def render_xml(self, value): | def render_xml(self, value): | |||
assert isinstance(value, dict) and len(value) == 1 | assert isinstance(value, dict) and len(value) == 1 | |||
self.set_header("Content-Type", "application/xml; charset=UTF-8") | self.set_header("Content-Type", "application/xml; charset=UTF-8") | |||
name = next(six.iterkeys(value)) | name = next(iter(value.keys())) | |||
parts = [] | parts = [] | |||
parts.append('<' + name + | parts.append('<' + name + | |||
' xmlns="http://s3.amazonaws.com/doc/2006-03-01/">') | ' xmlns="http://s3.amazonaws.com/doc/2006-03-01/">') | |||
self._render_parts(next(six.itervalues(value)), parts) | self._render_parts(next(iter(value.values())), parts) | |||
parts.append('</' + name + '>') | parts.append('</' + name + '>') | |||
self.finish('<?xml version="1.0" encoding="UTF-8"?>\n' + | self.finish('<?xml version="1.0" encoding="UTF-8"?>\n' + | |||
''.join(parts)) | ''.join(parts)) | |||
def _render_parts(self, value, parts=None): | def _render_parts(self, value, parts=None): | |||
if not parts: | if not parts: | |||
parts = [] | parts = [] | |||
if isinstance(value, six.string_types): | if isinstance(value, str): | |||
parts.append(utils.xhtml_escape(value)) | parts.append(utils.xhtml_escape(value)) | |||
elif isinstance(value, six.integer_types): | elif isinstance(value, int): | |||
parts.append(str(value)) | parts.append(str(value)) | |||
elif isinstance(value, datetime.datetime): | elif isinstance(value, datetime.datetime): | |||
parts.append(value.strftime("%Y-%m-%dT%H:%M:%S.000Z")) | parts.append(value.strftime("%Y-%m-%dT%H:%M:%S.000Z")) | |||
elif isinstance(value, dict): | elif isinstance(value, dict): | |||
for name, subvalue in value.items(): | for name, subvalue in value.items(): | |||
if not isinstance(subvalue, list): | if not isinstance(subvalue, list): | |||
subvalue = [subvalue] | subvalue = [subvalue] | |||
for subsubvalue in subvalue: | for subsubvalue in subvalue: | |||
parts.append('<' + name + '>') | parts.append('<' + name + '>') | |||
self._render_parts(subsubvalue, parts) | self._render_parts(subsubvalue, parts) | |||
End of changes. 6 change blocks. | ||||
7 lines changed or deleted | 6 lines changed or added |