Ejemplo n.º 1
0
    def __init__(self, s3_req, sw_req, sw_resp):
        if sw_resp.app_iter:
            body = None
            app_iter = sw_resp.app_iter
        else:
            body = sw_resp.body
            app_iter = None

        self.swift3_headers = HeaderKeyDict()
        self.sw_headers = HeaderKeyDict()

        headers = HeaderKeyDict()
        for key, val in sw_resp.headers.iteritems():
            _key = key.lower()
            if "[swift3]" in _key:
                self.swift3_headers[_key] = val
                if _key == 'x-object-meta-[swift3]-versioned' and \
                        'x-object-meta-[swift3]-timestamp' in sw_resp.headers:
                    from swift3.request import VersionId
                    ts_key = 'x-object-meta-[swift3]-timestamp'
                    headers['x-amz-version-id'] = \
                        str(VersionId(sw_resp.headers[ts_key]))
                if _key == 'x-object-meta-[swift3]-delete-marker':
                    headers['x-amz-delete-marker'] = val
                if _key == 'x-object-meta-[swift3]-missing-meta':
                    headers['x-amz-missing-meta'] = val
            elif _key.startswith('x-object-meta-'):
                headers['x-amz-meta-' + key[14:]] = val
            elif _key in ('content-length', 'content-type',
                          'content-range', 'content-encoding',
                          'etag', 'last-modified'):
                headers[key] = val
            else:
                self.sw_headers[key] = val

        Response.__init__(self, status=sw_resp.status, headers=headers,
                          request=sw_req, body=body, app_iter=app_iter,
                          conditional_response=sw_resp.conditional_response)
        self.environ.update(sw_resp.environ)
        self.s3_req = s3_req