コード例 #1
0
ファイル: test_s3response.py プロジェクト: zhoujian1210/swift
 def test_response_s3api_sysmeta_headers_ignore_other_sysmeta(self):
     for _server_type in ('object', 'container'):
         swift_headers = HeaderKeyDict(
             # sysmeta not leading sysmeta_prefix even including s3api word
             {'x-%s-sysmeta-test-s3api' % _server_type: 'ok',
              sysmeta_prefix(_server_type) + 'test': 'ok'})
         resp = Response(headers=swift_headers)
         s3resp = S3Response.from_swift_resp(resp)
         expected_headers = HeaderKeyDict(
             {sysmeta_prefix(_server_type) + 'test': 'ok'})
         self.assertEqual(expected_headers, s3resp.sysmeta_headers)
コード例 #2
0
ファイル: test_s3response.py プロジェクト: jgmerritt/swift
 def test_response_s3api_sysmeta_headers_ignore_other_sysmeta(self):
     for _server_type in ('object', 'container'):
         swift_headers = HeaderKeyDict(
             # sysmeta not leading sysmeta_prefix even including s3api word
             {'x-%s-sysmeta-test-s3api' % _server_type: 'ok',
              sysmeta_prefix(_server_type) + 'test': 'ok'})
         resp = Response(headers=swift_headers)
         s3resp = S3Response.from_swift_resp(resp)
         expected_headers = HeaderKeyDict(
             {sysmeta_prefix(_server_type) + 'test': 'ok'})
         self.assertEqual(expected_headers, s3resp.sysmeta_headers)
コード例 #3
0
ファイル: test_s3response.py プロジェクト: this-pama/swift-1
 def test_response_swift3_sysmeta_does_not_overwrite_s3api_sysmeta(self):
     for _server_type in ('object', 'container'):
         # same key name except sysmeta prefix
         swift_headers = HeaderKeyDict(
             {('x-%s-sysmeta-swift3-' % _server_type) + 'test': 'ng',
              sysmeta_prefix(_server_type) + 'test': 'ok'})
         resp = Response(headers=swift_headers)
         s3resp = S3Response.from_swift_resp(resp)
         expected_headers = HeaderKeyDict(
             {sysmeta_prefix(_server_type) + 'test': 'ok'})
         # but only s3api sysmeta remains in the response sysmeta_headers
         self.assertEqual(expected_headers, s3resp.sysmeta_headers)
コード例 #4
0
ファイル: test_s3response.py プロジェクト: jgmerritt/swift
 def test_response_swift3_sysmeta_does_not_overwrite_s3api_sysmeta(self):
     for _server_type in ('object', 'container'):
         # same key name except sysmeta prefix
         swift_headers = HeaderKeyDict(
             {('x-%s-sysmeta-swift3-' % _server_type) + 'test': 'ng',
              sysmeta_prefix(_server_type) + 'test': 'ok'})
         resp = Response(headers=swift_headers)
         s3resp = S3Response.from_swift_resp(resp)
         expected_headers = HeaderKeyDict(
             {sysmeta_prefix(_server_type) + 'test': 'ok'})
         # but only s3api sysmeta remains in the response sysmeta_headers
         self.assertEqual(expected_headers, s3resp.sysmeta_headers)
コード例 #5
0
ファイル: test_s3response.py プロジェクト: this-pama/swift-1
 def test_response_s3api_sysmeta_headers(self):
     for _server_type in ('object', 'container'):
         swift_headers = HeaderKeyDict(
             {sysmeta_prefix(_server_type) + 'test': 'ok'})
         resp = Response(headers=swift_headers)
         s3resp = S3Response.from_swift_resp(resp)
         self.assertEqual(swift_headers, s3resp.sysmeta_headers)
コード例 #6
0
ファイル: test_s3response.py プロジェクト: jgmerritt/swift
 def test_response_s3api_sysmeta_headers(self):
     for _server_type in ('object', 'container'):
         swift_headers = HeaderKeyDict(
             {sysmeta_prefix(_server_type) + 'test': 'ok'})
         resp = Response(headers=swift_headers)
         s3resp = S3Response.from_swift_resp(resp)
         self.assertEqual(swift_headers, s3resp.sysmeta_headers)
コード例 #7
0
ファイル: test_s3response.py プロジェクト: this-pama/swift-1
 def test_response_s3api_sysmeta_from_swift3_sysmeta(self):
     for _server_type in ('object', 'container'):
         # swift could return older swift3 sysmeta
         swift_headers = HeaderKeyDict(
             {('x-%s-sysmeta-swift3-' % _server_type) + 'test': 'ok'})
         resp = Response(headers=swift_headers)
         s3resp = S3Response.from_swift_resp(resp)
         expected_headers = HeaderKeyDict(
             {sysmeta_prefix(_server_type) + 'test': 'ok'})
         # but Response class should translates as s3api sysmeta
         self.assertEqual(expected_headers, s3resp.sysmeta_headers)
コード例 #8
0
ファイル: test_s3response.py プロジェクト: jgmerritt/swift
 def test_response_s3api_sysmeta_from_swift3_sysmeta(self):
     for _server_type in ('object', 'container'):
         # swift could return older swift3 sysmeta
         swift_headers = HeaderKeyDict(
             {('x-%s-sysmeta-swift3-' % _server_type) + 'test': 'ok'})
         resp = Response(headers=swift_headers)
         s3resp = S3Response.from_swift_resp(resp)
         expected_headers = HeaderKeyDict(
             {sysmeta_prefix(_server_type) + 'test': 'ok'})
         # but Response class should translates as s3api sysmeta
         self.assertEqual(expected_headers, s3resp.sysmeta_headers)
コード例 #9
0
ファイル: s3response.py プロジェクト: mahak/swift
 def is_s3api_sysmeta(sysmeta_key, server_type):
     s3api_sysmeta_prefix = sysmeta_prefix(_server_type).lower()
     return sysmeta_key.lower().startswith(s3api_sysmeta_prefix)
コード例 #10
0
ファイル: s3response.py プロジェクト: mahak/swift
    def __init__(self, *args, **kwargs):
        swob.Response.__init__(self, *args, **kwargs)

        s3_sysmeta_headers = swob.HeaderKeyDict()
        sw_headers = swob.HeaderKeyDict()
        headers = HeaderKeyDict()
        self.is_slo = False

        def is_swift3_sysmeta(sysmeta_key, server_type):
            swift3_sysmeta_prefix = (
                'x-%s-sysmeta-swift3' % server_type).lower()
            return sysmeta_key.lower().startswith(swift3_sysmeta_prefix)

        def is_s3api_sysmeta(sysmeta_key, server_type):
            s3api_sysmeta_prefix = sysmeta_prefix(_server_type).lower()
            return sysmeta_key.lower().startswith(s3api_sysmeta_prefix)

        for key, val in self.headers.items():
            if is_sys_meta('object', key) or is_sys_meta('container', key):
                _server_type = key.split('-')[1]
                if is_swift3_sysmeta(key, _server_type):
                    # To be compatible with older swift3, translate swift3
                    # sysmeta to s3api sysmeta here
                    key = sysmeta_prefix(_server_type) + \
                        key[len('x-%s-sysmeta-swift3-' % _server_type):]

                    if key not in s3_sysmeta_headers:
                        # To avoid overwrite s3api sysmeta by older swift3
                        # sysmeta set the key only when the key does not exist
                        s3_sysmeta_headers[key] = val
                elif is_s3api_sysmeta(key, _server_type):
                    s3_sysmeta_headers[key] = val
                else:
                    sw_headers[key] = val
            else:
                sw_headers[key] = val

        # Handle swift headers
        for key, val in sw_headers.items():
            _key = key.lower()

            if _key.startswith('x-object-meta-'):
                # Note that AWS ignores user-defined headers with '=' in the
                # header name. We translated underscores to '=5F' on the way
                # in, though.
                headers['x-amz-meta-' + _key[14:].replace('=5f', '_')] = val
            elif _key in ('content-length', 'content-type',
                          'content-range', 'content-encoding',
                          'content-disposition', 'content-language',
                          'etag', 'last-modified', 'x-robots-tag',
                          'cache-control', 'expires'):
                headers[key] = val
            elif _key == 'x-static-large-object':
                # for delete slo
                self.is_slo = config_true_value(val)

        # Check whether we stored the AWS-style etag on upload
        override_etag = s3_sysmeta_headers.get(
            sysmeta_header('object', 'etag'))
        if override_etag is not None:
            # Multipart uploads in AWS have ETags like
            #   <MD5(part_etag1 || ... || part_etagN)>-<number of parts>
            headers['etag'] = override_etag
        elif self.is_slo and 'etag' in headers:
            # Many AWS clients use the presence of a '-' to decide whether
            # to attempt client-side download validation, so even if we
            # didn't store the AWS-style header, tack on a '-N'. (Use 'N'
            # because we don't actually know how many parts there are.)
            headers['etag'] += '-N'

        self.headers = headers

        if self.etag:
            # add double quotes to the etag header
            self.etag = self.etag

        # Used for pure swift header handling at the request layer
        self.sw_headers = sw_headers
        self.sysmeta_headers = s3_sysmeta_headers
コード例 #11
0
 def is_s3api_sysmeta(sysmeta_key, server_type):
     s3api_sysmeta_prefix = sysmeta_prefix(_server_type).lower()
     return sysmeta_key.lower().startswith(s3api_sysmeta_prefix)
コード例 #12
0
    def __init__(self, *args, **kwargs):
        swob.Response.__init__(self, *args, **kwargs)

        sw_sysmeta_headers = swob.HeaderKeyDict()
        sw_headers = swob.HeaderKeyDict()
        headers = HeaderKeyDict()
        self.is_slo = False

        def is_swift3_sysmeta(sysmeta_key, server_type):
            swift3_sysmeta_prefix = ('x-%s-sysmeta-swift3' %
                                     server_type).lower()
            return sysmeta_key.lower().startswith(swift3_sysmeta_prefix)

        def is_s3api_sysmeta(sysmeta_key, server_type):
            s3api_sysmeta_prefix = sysmeta_prefix(_server_type).lower()
            return sysmeta_key.lower().startswith(s3api_sysmeta_prefix)

        for key, val in self.headers.items():
            if is_sys_meta('object', key) or is_sys_meta('container', key):
                _server_type = key.split('-')[1]
                if is_swift3_sysmeta(key, _server_type):
                    # To be compatible with older swift3, translate swift3
                    # sysmeta to s3api sysmeta here
                    key = sysmeta_prefix(_server_type) + \
                        key[len('x-%s-sysmeta-swift3-' % _server_type):]

                    if key not in sw_sysmeta_headers:
                        # To avoid overwrite s3api sysmeta by older swift3
                        # sysmeta set the key only when the key does not exist
                        sw_sysmeta_headers[key] = val
                elif is_s3api_sysmeta(key, _server_type):
                    sw_sysmeta_headers[key] = val
            else:
                sw_headers[key] = val

        # Handle swift headers
        for key, val in sw_headers.items():
            _key = key.lower()

            if _key.startswith('x-object-meta-'):
                # Note that AWS ignores user-defined headers with '=' in the
                # header name. We translated underscores to '=5F' on the way
                # in, though.
                headers['x-amz-meta-' + _key[14:].replace('=5f', '_')] = val
            elif _key in ('content-length', 'content-type', 'content-range',
                          'content-encoding', 'content-disposition',
                          'content-language', 'etag', 'last-modified',
                          'x-robots-tag', 'cache-control', 'expires'):
                headers[key] = val
            elif _key == 'x-static-large-object':
                # for delete slo
                self.is_slo = config_true_value(val)

        # Check whether we stored the AWS-style etag on upload
        override_etag = sw_sysmeta_headers.get(sysmeta_header(
            'object', 'etag'))
        if override_etag is not None:
            # Multipart uploads in AWS have ETags like
            #   <MD5(part_etag1 || ... || part_etagN)>-<number of parts>
            headers['etag'] = override_etag
        elif self.is_slo and 'etag' in headers:
            # Many AWS clients use the presence of a '-' to decide whether
            # to attempt client-side download validation, so even if we
            # didn't store the AWS-style header, tack on a '-N'. (Use 'N'
            # because we don't actually know how many parts there are.)
            headers['etag'] += '-N'

        self.headers = headers

        if self.etag:
            # add double quotes to the etag header
            self.etag = self.etag

        # Used for pure swift header handling at the request layer
        self.sw_headers = sw_headers
        self.sysmeta_headers = sw_sysmeta_headers
コード例 #13
0
ファイル: s3response.py プロジェクト: yinhui1150/swift
    def __init__(self, *args, **kwargs):
        swob.Response.__init__(self, *args, **kwargs)

        if self.etag:
            # add double quotes to the etag header
            self.etag = self.etag

        sw_sysmeta_headers = swob.HeaderKeyDict()
        sw_headers = swob.HeaderKeyDict()
        headers = HeaderKeyDict()
        self.is_slo = False

        def is_swift3_sysmeta(sysmeta_key, server_type):
            swift3_sysmeta_prefix = ('x-%s-sysmeta-swift3' %
                                     server_type).lower()
            return sysmeta_key.lower().startswith(swift3_sysmeta_prefix)

        def is_s3api_sysmeta(sysmeta_key, server_type):
            s3api_sysmeta_prefix = sysmeta_prefix(_server_type).lower()
            return sysmeta_key.lower().startswith(s3api_sysmeta_prefix)

        for key, val in self.headers.iteritems():
            if is_sys_meta('object', key) or is_sys_meta('container', key):
                _server_type = key.split('-')[1]
                if is_swift3_sysmeta(key, _server_type):
                    # To be compatible with older swift3, translate swift3
                    # sysmeta to s3api sysmeta here
                    key = sysmeta_prefix(_server_type) + \
                        key[len('x-%s-sysmeta-swift3-' % _server_type):]

                    if key not in sw_sysmeta_headers:
                        # To avoid overwrite s3api sysmeta by older swift3
                        # sysmeta set the key only when the key does not exist
                        sw_sysmeta_headers[key] = val
                elif is_s3api_sysmeta(key, _server_type):
                    sw_sysmeta_headers[key] = val
            else:
                sw_headers[key] = val

        # Handle swift headers
        for key, val in sw_headers.iteritems():
            _key = key.lower()

            if _key.startswith('x-object-meta-'):
                # Note that AWS ignores user-defined headers with '=' in the
                # header name. We translated underscores to '=5F' on the way
                # in, though.
                headers['x-amz-meta-' + _key[14:].replace('=5f', '_')] = val
            elif _key in ('content-length', 'content-type', 'content-range',
                          'content-encoding', 'content-disposition',
                          'content-language', 'etag', 'last-modified',
                          'x-robots-tag', 'cache-control', 'expires'):
                headers[key] = val
            elif _key == 'x-static-large-object':
                # for delete slo
                self.is_slo = config_true_value(val)

        self.headers = headers
        # Used for pure swift header handling at the request layer
        self.sw_headers = sw_headers
        self.sysmeta_headers = sw_sysmeta_headers
コード例 #14
0
ファイル: s3response.py プロジェクト: matthewoliver/swift
    def __init__(self, *args, **kwargs):
        swob.Response.__init__(self, *args, **kwargs)

        if self.etag:
            # add double quotes to the etag header
            self.etag = self.etag

        sw_sysmeta_headers = swob.HeaderKeyDict()
        sw_headers = swob.HeaderKeyDict()
        headers = HeaderKeyDict()
        self.is_slo = False

        def is_swift3_sysmeta(sysmeta_key, server_type):
            swift3_sysmeta_prefix = (
                'x-%s-sysmeta-swift3' % server_type).lower()
            return sysmeta_key.lower().startswith(swift3_sysmeta_prefix)

        def is_s3api_sysmeta(sysmeta_key, server_type):
            s3api_sysmeta_prefix = sysmeta_prefix(_server_type).lower()
            return sysmeta_key.lower().startswith(s3api_sysmeta_prefix)

        for key, val in self.headers.iteritems():
            if is_sys_meta('object', key) or is_sys_meta('container', key):
                _server_type = key.split('-')[1]
                if is_swift3_sysmeta(key, _server_type):
                    # To be compatible with older swift3, translate swift3
                    # sysmeta to s3api sysmeta here
                    key = sysmeta_prefix(_server_type) + \
                        key[len('x-%s-sysmeta-swift3-' % _server_type):]

                    if key not in sw_sysmeta_headers:
                        # To avoid overwrite s3api sysmeta by older swift3
                        # sysmeta set the key only when the key does not exist
                        sw_sysmeta_headers[key] = val
                elif is_s3api_sysmeta(key, _server_type):
                    sw_sysmeta_headers[key] = val
            else:
                sw_headers[key] = val

        # Handle swift headers
        for key, val in sw_headers.iteritems():
            _key = key.lower()

            if _key.startswith('x-object-meta-'):
                # Note that AWS ignores user-defined headers with '=' in the
                # header name. We translated underscores to '=5F' on the way
                # in, though.
                headers['x-amz-meta-' + _key[14:].replace('=5f', '_')] = val
            elif _key in ('content-length', 'content-type',
                          'content-range', 'content-encoding',
                          'content-disposition', 'content-language',
                          'etag', 'last-modified', 'x-robots-tag',
                          'cache-control', 'expires'):
                headers[key] = val
            elif _key == 'x-static-large-object':
                # for delete slo
                self.is_slo = config_true_value(val)

        self.headers = headers
        # Used for pure swift header handling at the request layer
        self.sw_headers = sw_headers
        self.sysmeta_headers = sw_sysmeta_headers
コード例 #15
0
ファイル: s3response.py プロジェクト: realitix/swift
    def __init__(self, *args, **kwargs):
        swob.Response.__init__(self, *args, **kwargs)

        s3_sysmeta_headers = swob.HeaderKeyDict()
        sw_headers = swob.HeaderKeyDict()
        headers = HeaderKeyDict()
        self.is_slo = False

        def is_swift3_sysmeta(sysmeta_key, server_type):
            swift3_sysmeta_prefix = ('x-%s-sysmeta-swift3' %
                                     server_type).lower()
            return sysmeta_key.lower().startswith(swift3_sysmeta_prefix)

        def is_s3api_sysmeta(sysmeta_key, server_type):
            s3api_sysmeta_prefix = sysmeta_prefix(_server_type).lower()
            return sysmeta_key.lower().startswith(s3api_sysmeta_prefix)

        for key, val in self.headers.items():
            if is_sys_meta('object', key) or is_sys_meta('container', key):
                _server_type = key.split('-')[1]
                if is_swift3_sysmeta(key, _server_type):
                    # To be compatible with older swift3, translate swift3
                    # sysmeta to s3api sysmeta here
                    key = sysmeta_prefix(_server_type) + \
                        key[len('x-%s-sysmeta-swift3-' % _server_type):]

                    if key not in s3_sysmeta_headers:
                        # To avoid overwrite s3api sysmeta by older swift3
                        # sysmeta set the key only when the key does not exist
                        s3_sysmeta_headers[key] = val
                elif is_s3api_sysmeta(key, _server_type):
                    s3_sysmeta_headers[key] = val
                else:
                    sw_headers[key] = val
            else:
                sw_headers[key] = val

        # Handle swift headers
        for key, val in sw_headers.items():
            s3_pair = translate_swift_to_s3(key, val)
            if s3_pair is None:
                continue
            headers[s3_pair[0]] = s3_pair[1]

        self.is_slo = config_true_value(
            sw_headers.get('x-static-large-object'))

        # Check whether we stored the AWS-style etag on upload
        override_etag = s3_sysmeta_headers.get(sysmeta_header(
            'object', 'etag'))
        if override_etag not in (None, ''):
            # Multipart uploads in AWS have ETags like
            #   <MD5(part_etag1 || ... || part_etagN)>-<number of parts>
            headers['etag'] = override_etag
        elif self.is_slo and 'etag' in headers:
            # Many AWS clients use the presence of a '-' to decide whether
            # to attempt client-side download validation, so even if we
            # didn't store the AWS-style header, tack on a '-N'. (Use 'N'
            # because we don't actually know how many parts there are.)
            headers['etag'] += '-N'

        self.headers = headers

        if self.etag:
            # add double quotes to the etag header
            self.etag = self.etag

        # Used for pure swift header handling at the request layer
        self.sw_headers = sw_headers
        self.sysmeta_headers = s3_sysmeta_headers