Index: reviewbot/third_party/google-api-python-client/uritemplate/__init__.py |
=================================================================== |
--- reviewbot/third_party/google-api-python-client/uritemplate/__init__.py (revision 221173) |
+++ reviewbot/third_party/google-api-python-client/uritemplate/__init__.py (working copy) |
@@ -1,147 +0,0 @@ |
-# Early, and incomplete implementation of -04. |
-# |
-import re |
-import urllib |
- |
-RESERVED = ":/?#[]@!$&'()*+,;=" |
-OPERATOR = "+./;?|!@" |
-EXPLODE = "*+" |
-MODIFIER = ":^" |
-TEMPLATE = re.compile(r"{(?P<operator>[\+\./;\?|!@])?(?P<varlist>[^}]+)}", re.UNICODE) |
-VAR = re.compile(r"^(?P<varname>[^=\+\*:\^]+)((?P<explode>[\+\*])|(?P<partial>[:\^]-?[0-9]+))?(=(?P<default>.*))?$", 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) |