| Index: third_party/uritemplate/uritemplate/__init__.py
|
| diff --git a/third_party/uritemplate/uritemplate/__init__.py b/third_party/uritemplate/uritemplate/__init__.py
|
| deleted file mode 100755
|
| index 712405d42d7710193ee9d118400cf8e9daaecf89..0000000000000000000000000000000000000000
|
| --- a/third_party/uritemplate/uritemplate/__init__.py
|
| +++ /dev/null
|
| @@ -1,265 +0,0 @@
|
| -#!/usr/bin/env python
|
| -
|
| -"""
|
| -URI Template (RFC6570) Processor
|
| -"""
|
| -
|
| -__copyright__ = """\
|
| -Copyright 2011-2013 Joe Gregorio
|
| -
|
| -Licensed under the Apache License, Version 2.0 (the "License");
|
| -you may not use this file except in compliance with the License.
|
| -You may obtain a copy of the License at
|
| -
|
| - http://www.apache.org/licenses/LICENSE-2.0
|
| -
|
| -Unless required by applicable law or agreed to in writing, software
|
| -distributed under the License is distributed on an "AS IS" BASIS,
|
| -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -See the License for the specific language governing permissions and
|
| -limitations under the License.
|
| -"""
|
| -
|
| -import re
|
| -try:
|
| - from urllib.parse import quote
|
| -except ImportError:
|
| - from urllib import quote
|
| -
|
| -
|
| -
|
| -__version__ = "0.6"
|
| -
|
| -RESERVED = ":/?#[]@!$&'()*+,;="
|
| -OPERATOR = "+#./;?&|!@"
|
| -MODIFIER = ":^"
|
| -TEMPLATE = re.compile("{([^\}]+)}")
|
| -
|
| -
|
| -def variables(template):
|
| - '''Returns the set of keywords in a uri template'''
|
| - vars = set()
|
| - for varlist in TEMPLATE.findall(template):
|
| - if varlist[0] in OPERATOR:
|
| - varlist = varlist[1:]
|
| - varspecs = varlist.split(',')
|
| - for var in varspecs:
|
| - # handle prefix values
|
| - var = var.split(':')[0]
|
| - # handle composite values
|
| - if var.endswith('*'):
|
| - var = var[:-1]
|
| - vars.add(var)
|
| - return vars
|
| -
|
| -
|
| -def _quote(value, safe, prefix=None):
|
| - if prefix is not None:
|
| - return quote(str(value)[:prefix], safe)
|
| - return quote(str(value), safe)
|
| -
|
| -
|
| -def _tostring(varname, value, explode, prefix, operator, safe=""):
|
| - if isinstance(value, list):
|
| - return ",".join([_quote(x, safe) for x in value])
|
| - if isinstance(value, dict):
|
| - keys = sorted(value.keys())
|
| - if explode:
|
| - return ",".join([_quote(key, safe) + "=" + \
|
| - _quote(value[key], safe) for key in keys])
|
| - else:
|
| - return ",".join([_quote(key, safe) + "," + \
|
| - _quote(value[key], safe) for key in keys])
|
| - elif value is None:
|
| - return
|
| - else:
|
| - return _quote(value, safe, prefix)
|
| -
|
| -
|
| -def _tostring_path(varname, value, explode, prefix, operator, safe=""):
|
| - joiner = operator
|
| - if isinstance(value, list):
|
| - if explode:
|
| - out = [_quote(x, safe) for x in value if value is not None]
|
| - else:
|
| - joiner = ","
|
| - out = [_quote(x, safe) for x in value if value is not None]
|
| - if out:
|
| - return joiner.join(out)
|
| - else:
|
| - return
|
| - elif isinstance(value, dict):
|
| - keys = sorted(value.keys())
|
| - if explode:
|
| - out = [_quote(key, safe) + "=" + \
|
| - _quote(value[key], safe) for key in keys \
|
| - if value[key] is not None]
|
| - else:
|
| - joiner = ","
|
| - out = [_quote(key, safe) + "," + \
|
| - _quote(value[key], safe) \
|
| - for key in keys if value[key] is not None]
|
| - if out:
|
| - return joiner.join(out)
|
| - else:
|
| - return
|
| - elif value is None:
|
| - return
|
| - else:
|
| - return _quote(value, safe, prefix)
|
| -
|
| -
|
| -def _tostring_semi(varname, value, explode, prefix, operator, safe=""):
|
| - joiner = operator
|
| - if operator == "?":
|
| - joiner = "&"
|
| - if isinstance(value, list):
|
| - if explode:
|
| - out = [varname + "=" + _quote(x, safe) \
|
| - for x in value if x is not None]
|
| - if out:
|
| - return joiner.join(out)
|
| - else:
|
| - return
|
| - else:
|
| - return varname + "=" + ",".join([_quote(x, safe) \
|
| - for x in value])
|
| - elif isinstance(value, dict):
|
| - keys = sorted(value.keys())
|
| - if explode:
|
| - return joiner.join([_quote(key, safe) + "=" + \
|
| - _quote(value[key], safe) \
|
| - for key in keys if key is not None])
|
| - else:
|
| - return varname + "=" + ",".join([_quote(key, safe) + "," + \
|
| - _quote(value[key], safe) for key in keys \
|
| - if key is not None])
|
| - else:
|
| - if value is None:
|
| - return
|
| - elif value:
|
| - return (varname + "=" + _quote(value, safe, prefix))
|
| - else:
|
| - return varname
|
| -
|
| -
|
| -def _tostring_query(varname, value, explode, prefix, operator, safe=""):
|
| - joiner = operator
|
| - if operator in ["?", "&"]:
|
| - joiner = "&"
|
| - if isinstance(value, list):
|
| - if 0 == len(value):
|
| - return None
|
| - if explode:
|
| - return joiner.join([varname + "=" + _quote(x, safe) \
|
| - for x in value])
|
| - else:
|
| - return (varname + "=" + ",".join([_quote(x, safe) \
|
| - for x in value]))
|
| - elif isinstance(value, dict):
|
| - if 0 == len(value):
|
| - return None
|
| - keys = sorted(value.keys())
|
| - if explode:
|
| - return joiner.join([_quote(key, safe) + "=" + \
|
| - _quote(value[key], safe) \
|
| - for key in keys])
|
| - else:
|
| - return varname + "=" + \
|
| - ",".join([_quote(key, safe) + "," + \
|
| - _quote(value[key], safe) for key in keys])
|
| - else:
|
| - if value is None:
|
| - return
|
| - elif value:
|
| - return (varname + "=" + _quote(value, safe, prefix))
|
| - else:
|
| - return (varname + "=")
|
| -
|
| -
|
| -TOSTRING = {
|
| - "" : _tostring,
|
| - "+": _tostring,
|
| - "#": _tostring,
|
| - ";": _tostring_semi,
|
| - "?": _tostring_query,
|
| - "&": _tostring_query,
|
| - "/": _tostring_path,
|
| - ".": _tostring_path,
|
| - }
|
| -
|
| -
|
| -def expand(template, variables):
|
| - """
|
| - Expand template as a URI Template using variables.
|
| - """
|
| - def _sub(match):
|
| - expression = match.group(1)
|
| - operator = ""
|
| - if expression[0] in OPERATOR:
|
| - operator = expression[0]
|
| - varlist = expression[1:]
|
| - else:
|
| - varlist = expression
|
| -
|
| - safe = ""
|
| - if operator in ["+", "#"]:
|
| - safe = RESERVED
|
| - varspecs = varlist.split(",")
|
| - varnames = []
|
| - defaults = {}
|
| - for varspec in varspecs:
|
| - default = None
|
| - explode = False
|
| - prefix = None
|
| - if "=" in varspec:
|
| - varname, default = tuple(varspec.split("=", 1))
|
| - else:
|
| - varname = varspec
|
| - if varname[-1] == "*":
|
| - explode = True
|
| - varname = varname[:-1]
|
| - elif ":" in varname:
|
| - try:
|
| - prefix = int(varname[varname.index(":")+1:])
|
| - except ValueError:
|
| - raise ValueError("non-integer prefix '{0}'".format(
|
| - varname[varname.index(":")+1:]))
|
| - varname = varname[:varname.index(":")]
|
| - if default:
|
| - defaults[varname] = default
|
| - varnames.append((varname, explode, prefix))
|
| -
|
| - retval = []
|
| - joiner = operator
|
| - start = operator
|
| - if operator == "+":
|
| - start = ""
|
| - joiner = ","
|
| - if operator == "#":
|
| - joiner = ","
|
| - if operator == "?":
|
| - joiner = "&"
|
| - if operator == "&":
|
| - start = "&"
|
| - if operator == "":
|
| - joiner = ","
|
| - for varname, explode, prefix in varnames:
|
| - if varname in variables:
|
| - value = variables[varname]
|
| - if not value and value != "" and varname in defaults:
|
| - value = defaults[varname]
|
| - elif varname in defaults:
|
| - value = defaults[varname]
|
| - else:
|
| - continue
|
| - expanded = TOSTRING[operator](
|
| - varname, value, explode, prefix, operator, safe=safe)
|
| - if expanded is not None:
|
| - retval.append(expanded)
|
| - if len(retval) > 0:
|
| - return start + joiner.join(retval)
|
| - else:
|
| - return ""
|
| -
|
| - return TEMPLATE.sub(_sub, template)
|
|
|