diff --git a/oauth2client/gce.py b/oauth2client/gce.py index 024a82d..eb5596b 100644 --- a/oauth2client/gce.py +++ b/oauth2client/gce.py @@ -21,7 +21,7 @@ __author__ = 'jcgregorio@google.com (Joe Gregorio)' import json import logging -import uritemplate +import urllib from oauth2client import util from oauth2client.client import AccessTokenRefreshError @@ -78,7 +78,8 @@ class AppAssertionCredentials(AssertionCredentials): Raises: AccessTokenRefreshError: When the refresh fails. """ - uri = uritemplate.expand(META, {'scope': self.scope}) + query = '?scope=%s' % urllib.quote(self.scope, '') + uri = META.replace('{?scope}', query) response, content = http_request(uri) if response.status == 200: try: @@ -101,5 +102,4 @@ class AppAssertionCredentials(AssertionCredentials): return not self.scope def create_scoped(self, scopes): - return AppAssertionCredentials(scopes, - **self.kwargs) + return AppAssertionCredentials(scopes, **self.kwargs) diff --git a/setup.py b/setup.py index f01f401..5bc3b23 100644 --- a/setup.py +++ b/setup.py @@ -29,7 +29,6 @@ from setuptools import setup packages = [ 'oauth2client', - 'uritemplate', ] install_requires = [ diff --git a/uritemplate/__init__.py b/uritemplate/__init__.py deleted file mode 100644 index 5d0ebce..0000000 --- a/uritemplate/__init__.py +++ /dev/null @@ -1,147 +0,0 @@ -# Early, and incomplete implementation of -04. -# -import re -import urllib - -RESERVED = ":/?#[]@!$&'()*+,;=" -OPERATOR = "+./;?|!@" -EXPLODE = "*+" -MODIFIER = ":^" -TEMPLATE = re.compile(r"{(?P[\+\./;\?|!@])?(?P[^}]+)}", re.UNICODE) -VAR = re.compile(r"^(?P[^=\+\*:\^]+)((?P[\+\*])|(?P[:\^]-?[0-9]+))?(=(?P.*))?$", re.UNICODE) - -def _tostring(varname, value, explode, operator, safe=""): - if type(value) == type([]): - if explode == "+": - return ",".join([varname + "." + urllib.quote(x, safe) for x in value]) - else: - return ",".join([urllib.quote(x, safe) for x in value]) - if type(value) == type({}): - keys = value.keys() - keys.sort() - if explode == "+": - return ",".join([varname + "." + urllib.quote(key, safe) + "," + urllib.quote(value[key], safe) for key in keys]) - else: - return ",".join([urllib.quote(key, safe) + "," + urllib.quote(value[key], safe) for key in keys]) - else: - return urllib.quote(value, safe) - - -def _tostring_path(varname, value, explode, operator, safe=""): - joiner = operator - if type(value) == type([]): - if explode == "+": - return joiner.join([varname + "." + urllib.quote(x, safe) for x in value]) - elif explode == "*": - return joiner.join([urllib.quote(x, safe) for x in value]) - else: - return ",".join([urllib.quote(x, safe) for x in value]) - elif type(value) == type({}): - keys = value.keys() - keys.sort() - if explode == "+": - return joiner.join([varname + "." + urllib.quote(key, safe) + joiner + urllib.quote(value[key], safe) for key in keys]) - elif explode == "*": - return joiner.join([urllib.quote(key, safe) + joiner + urllib.quote(value[key], safe) for key in keys]) - else: - return ",".join([urllib.quote(key, safe) + "," + urllib.quote(value[key], safe) for key in keys]) - else: - if value: - return urllib.quote(value, safe) - else: - return "" - -def _tostring_query(varname, value, explode, operator, safe=""): - joiner = operator - varprefix = "" - if operator == "?": - joiner = "&" - varprefix = varname + "=" - if type(value) == type([]): - if 0 == len(value): - return "" - if explode == "+": - return joiner.join([varname + "=" + urllib.quote(x, safe) for x in value]) - elif explode == "*": - return joiner.join([urllib.quote(x, safe) for x in value]) - else: - return varprefix + ",".join([urllib.quote(x, safe) for x in value]) - elif type(value) == type({}): - if 0 == len(value): - return "" - keys = value.keys() - keys.sort() - if explode == "+": - return joiner.join([varname + "." + urllib.quote(key, safe) + "=" + urllib.quote(value[key], safe) for key in keys]) - elif explode == "*": - return joiner.join([urllib.quote(key, safe) + "=" + urllib.quote(value[key], safe) for key in keys]) - else: - return varprefix + ",".join([urllib.quote(key, safe) + "," + urllib.quote(value[key], safe) for key in keys]) - else: - if value: - return varname + "=" + urllib.quote(value, safe) - else: - return varname - -TOSTRING = { - "" : _tostring, - "+": _tostring, - ";": _tostring_query, - "?": _tostring_query, - "/": _tostring_path, - ".": _tostring_path, - } - - -def expand(template, vars): - def _sub(match): - groupdict = match.groupdict() - operator = groupdict.get('operator') - if operator is None: - operator = '' - varlist = groupdict.get('varlist') - - safe = "@" - if operator == '+': - safe = RESERVED - varspecs = varlist.split(",") - varnames = [] - defaults = {} - for varspec in varspecs: - m = VAR.search(varspec) - groupdict = m.groupdict() - varname = groupdict.get('varname') - explode = groupdict.get('explode') - partial = groupdict.get('partial') - default = groupdict.get('default') - if default: - defaults[varname] = default - varnames.append((varname, explode, partial)) - - retval = [] - joiner = operator - prefix = operator - if operator == "+": - prefix = "" - joiner = "," - if operator == "?": - joiner = "&" - if operator == "": - joiner = "," - for varname, explode, partial in varnames: - if varname in vars: - value = vars[varname] - #if not value and (type(value) == type({}) or type(value) == type([])) and varname in defaults: - if not value and value != "" and varname in defaults: - value = defaults[varname] - elif varname in defaults: - value = defaults[varname] - else: - continue - retval.append(TOSTRING[operator](varname, value, explode, operator, safe=safe)) - if "".join(retval): - return prefix + joiner.join(retval) - else: - return "" - - return TEMPLATE.sub(_sub, template)