Пример #1
0
def _amz_canonicalize(headers):
    r"""Canonicalize AMZ headers in that certain AWS way.

    >>> _amz_canonicalize({"x-amz-test": "test"})
    'x-amz-test:test\n'
    >>> _amz_canonicalize({"x-amz-first": "test",
    ...                    "x-amz-second": "hello"})
    'x-amz-first:test\nx-amz-second:hello\n'
    >>> _amz_canonicalize({})
    ''
    """
    
    ''' 
        CanonicalizedAmzHeaders描述
        CanonicalizedAmzHeaders = "\n".join( allheaders witch startswith "x-amz-" or "x-sina-" ) + '\n'
        这里的所有header名需要转换成小写,并按header名进行排序,过滤掉空格,并加以’\n’进行连接
    '''
    rv = {}
    for header, value in six.iteritems(headers):
        header = header.lower()
#         if header.startswith("x-amz-"):  #edit by hanchao
        if header.startswith("x-amz-") or header.startswith("x-sina-"):
            rv.setdefault(header, []).append(value)
    parts = []
    for key in sorted(rv):
        parts.append("%s:%s\n" % (key, ",".join(rv[key])))
    return "".join(parts)
Пример #2
0
    def url(self, base_url, arg_sep="&", bucketAsDomain=False):
        if bucketAsDomain:  #bucket name 作为域名
            url = 'http://' + self.bucket + "/"
        else:
            url = base_url + "/"

        #生成url,不适用https方式请求
        if url.startswith('https://'):
            url = 'http://' + url[8:]

        if self.key:
            url += aws_urlquote(self.key)
        if self.subresource or self.args:
            ps = []
            if self.subresource:
                ps.append(self.subresource)
            if self.args:
                args = self.args
                if hasattr(args, "iteritems") or hasattr(args, "items"):
                    args = six.iteritems(args)
                args = ((urllib.parse.quote_plus(k),
                         urllib.parse.quote_plus(v)) for (k, v) in args)
                args = arg_sep.join("%s=%s" % i for i in args)
                ps.append(args)
            url += "?" + "&".join(ps)
        return url
Пример #3
0
 def __str__(self):
     rv = self.msg
     if self.extra:
         rv += " ("
         rv += ", ".join("%s=%r" % i for i in six.iteritems(self.extra))
         rv += ")"
     return rv
Пример #4
0
 def __str__(self):
     rv = self.msg
     if self.extra:
         rv += " ("
         rv += ", ".join("%s=%r" % i for i in six.iteritems(self.extra))
         rv += ")"
     return rv
Пример #5
0
    def canonical_resource(self):
        '''
			详见:http://sinastorage.sinaapp.com/developer/interface/aws/auth.html
		'''
        res = "/"
        if self.bucket:
            res += '%s/' % aws_urlquote(self.bucket)
        if self.key is not None:
            res += "%s" % aws_urlquote(self.key)
        if self.subresource:
            if self.subresource in self.subresource_need_to_sign:
                res += "?%s" % aws_urlquote(self.subresource)
        if self.args:
            rv = {}
            for key, value in six.iteritems(self.args):
                #                 key = key.lower()
                if key in self.subresource_kv_need_to_sign:
                    rv[key] = value

            if len(rv) > 0:
                parts = []
                for key in sorted(rv):
                    parts.append("%s=%s" % (key, rv[key]))
                res += "%s%s" % ('&' if self.subresource and self.subresource
                                 in self.subresource_need_to_sign else '?',
                                 "&".join(parts))
        return res
Пример #6
0
 def url(self, base_url, arg_sep="&", bucketAsDomain=False):
     if bucketAsDomain:              #bucket name 作为域名
         url = 'http://'+self.bucket + "/"
     else:
         url = base_url + "/"
         
     #生成url,不适用https方式请求
     if url.startswith('https://') :
         url = 'http://'+url[8:]
         
     if self.key:
         url += aws_urlquote(self.key)
     if self.subresource or self.args:
         ps = []
         if self.subresource:
             ps.append(self.subresource)
         if self.args:
             args = self.args
             if hasattr(args, "iteritems") or hasattr(args, "items"):
                 args = six.iteritems(args)
             args = ((urllib.parse.quote_plus(k), urllib.parse.quote_plus(v)) for (k, v) in args)
             args = arg_sep.join("%s=%s" % i for i in args)
             ps.append(args)
         url += "?" + "&".join(ps)
     return url
Пример #7
0
    def canonical_resource(self):
        '''
            详见:http://sinastorage.sinaapp.com/developer/interface/aws/auth.html
        '''
        res = "/"
        if self.bucket:
            res += '%s/'%aws_urlquote(self.bucket)
        if self.key is not None:
            res += "%s" % aws_urlquote(self.key)
        if self.subresource:
            if self.subresource in self.subresource_need_to_sign:
                res += "?%s" % aws_urlquote(self.subresource)
        if self.args:
            rv = {}
            for key, value in six.iteritems(self.args):
#                 key = key.lower()
                if key in self.subresource_kv_need_to_sign:
                    rv[key] = value
            
            if len(rv) > 0 :
                parts = []
                for key in sorted(rv):
                    parts.append("%s=%s" % (key, rv[key]))
                res += "%s%s" % ('&' if self.subresource and self.subresource in self.subresource_need_to_sign else '?', "&".join(parts))
        return res
Пример #8
0
def _amz_canonicalize(headers):
    r"""Canonicalize AMZ headers in that certain AWS way.

	>>> _amz_canonicalize({"x-amz-test": "test"})
	'x-amz-test:test\n'
	>>> _amz_canonicalize({"x-amz-first": "test",
	...                    "x-amz-second": "hello"})
	'x-amz-first:test\nx-amz-second:hello\n'
	>>> _amz_canonicalize({})
	''
	"""
    ''' 
		CanonicalizedAmzHeaders描述
		CanonicalizedAmzHeaders = "\n".join( allheaders witch startswith "x-amz-" or "x-sina-" ) + '\n'
		这里的所有header名需要转换成小写,并按header名进行排序,过滤掉空格,并加以’\n’进行连接
	'''
    rv = {}
    print(headers)
    for header, value in six.iteritems(headers):
        print(header, value)
        header = header.lower()
        # if header.startswith("x-amz-"):  #edit by hanchao
        if header.startswith("x-amz-") or header.startswith("x-sina-"):
            rv.setdefault(header, []).append(value)
    parts = []
    print(rv)
    for key in sorted(rv):
        print(key, rv[key])
        parts.append("%s:%s\n" % (key, ",".join(rv[key])))
    return "".join(parts)
Пример #9
0
def headers_metadata(headers):
    return dict((h[11:], v) for h, v in six.iteritems(headers)
                            if h.lower().startswith("x-amz-meta-"))
Пример #10
0
def metadata_headers(metadata):
    return dict(("X-AMZ-Meta-" + h, v) for h, v in six.iteritems(metadata))
Пример #11
0
def headers_metadata(headers):
    return dict((h[11:], v) for h, v in six.iteritems(headers)
                if h.lower().startswith("x-amz-meta-"))
Пример #12
0
def metadata_headers(metadata):
    return dict(("X-AMZ-Meta-" + h, v) for h, v in six.iteritems(metadata))