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 self.args.iteritems(): # 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
def url(self, base_url, arg_sep="&"): url = base_url + "/" 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"): args = args.iteritems() args = ((quote_plus(k), 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
def __init__(self, name=None, base_url=None, timeout=None, secure=False): from docker_registry.contrib import sinastorage if sinastorage.getDefaultAppInfo() is None : raise ValueError("access_key and secret_key must not be None! Please set sinastorage.setDefaultAppInfo('access_key', 'secret_key') first!") self.access_key = sinastorage.getDefaultAppInfo().access_key self.secret_key = sinastorage.getDefaultAppInfo().secret_key secure = sinastorage.getDefaultAppInfo().secure scheme = ("http", "https")[int(bool(secure))] if not base_url: base_url = "%s://%s" % (scheme, sinastorage_domain) if name: base_url += "/%s" % aws_urlquote(name) elif secure is not None: if not base_url.startswith(scheme + "://"): raise ValueError("secure=%r, url must use %s" % (secure, scheme)) self.opener = self.build_opener() self.name = name self.base_url = base_url self.timeout = 30 self.timeout = timeout