| 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)
|
|
|