diff options
-rw-r--r-- | HISTORY.rst | 2 | ||||
-rw-r--r-- | MANIFEST.in | 4 | ||||
-rw-r--r-- | tox.ini | 4 | ||||
-rw-r--r-- | uritemplate/template.py | 47 |
4 files changed, 36 insertions, 21 deletions
diff --git a/HISTORY.rst b/HISTORY.rst index 83be429..bf23379 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -8,6 +8,8 @@ Changelog - If there is no value or default given, simply return an empty string +- Fix sdist + 0.1.0 - 2013-05-14 ------------------ diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..c36f0c7 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,4 @@ +include README.rst +include HISTORY.rst +include LICENSE +include AUTHORS.rst @@ -0,0 +1,4 @@ +[tox] +envlist = py26,py27,py32,py33 +[testenv] +commands = python test_uritemplate.py diff --git a/uritemplate/template.py b/uritemplate/template.py index 3c4f9cd..fb62adb 100644 --- a/uritemplate/template.py +++ b/uritemplate/template.py @@ -211,7 +211,7 @@ class URIVariable(object): if value is None or (len(value) == 0 and value != ""): return None - tuples = is_list_of_tuples(value) + tuples, items = is_list_of_tuples(value) safe = self.safe if isinstance(value, (list, tuple)) and not tuples: @@ -224,7 +224,7 @@ class URIVariable(object): return '%s=%s' % (name, value) if isinstance(value, (dict, collections.MutableMapping)) or tuples: - items = value if tuples else sorted(value.items()) + items = items or sorted(value.items()) if explode: return self.join_str.join( '%s=%s' % ( @@ -256,9 +256,9 @@ class URIVariable(object): if value is None or (len(value) == 0 and value != ''): return None - tuples = is_list_of_tuples(value) + tuples, items = is_list_of_tuples(value) - if isinstance(value, (list, tuple)) and not tuples: + if list_test(value) and not tuples: if not explode: join_str = ',' @@ -267,8 +267,8 @@ class URIVariable(object): ) return expanded if expanded else None - if isinstance(value, (dict, collections.MutableMapping)) or tuples: - items = value if tuples else sorted(value.items()) + if dict_test(value) or tuples: + items = items or sorted(value.items()) format_str = '%s=%s' if not explode: format_str = '%s,%s' @@ -295,9 +295,9 @@ class URIVariable(object): if self.operator == '?': join_str = '&' - tuples = is_list_of_tuples(value) + tuples, items = is_list_of_tuples(value) - if isinstance(value, (list, tuple)) and not tuples: + if list_test(value) and not tuples: if explode: expanded = join_str.join( '%s=%s' % ( @@ -309,8 +309,8 @@ class URIVariable(object): value = ','.join(quote(v, safe) for v in value) return '%s=%s' % (name, value) - if isinstance(value, (dict, collections.MutableMapping)) or tuples: - items = value if tuples else sorted(value.items()) + if dict_test(value) or tuples: + items = items or sorted(value.items()) if explode: return join_str.join( @@ -336,17 +336,14 @@ class URIVariable(object): if value is None: return None - tuples = is_list_of_tuples(value) + tuples, items = is_list_of_tuples(value) - if isinstance(value, (list, tuple)) and not tuples: + if list_test(value) and not tuples: return ','.join(quote(v, self.safe) for v in value) - if isinstance(value, (dict, collections.MutableMapping)) or tuples: - items = value if tuples else sorted(value.items()) - if explode: - format_str = '%s=%s' - else: - format_str = '%s,%s' + if dict_test(value) or tuples: + items = items or sorted(value.items()) + format_str = '%s=%s' if explode else '%s,%s' return ','.join( format_str % ( @@ -399,11 +396,19 @@ class URIVariable(object): def is_list_of_tuples(value): if not isinstance(value, (list, tuple)): - return False + return False, None try: dict(value) except: - return False + return False, None else: - return True + return True, value + + +def list_test(value): + return isinstance(value, (list, tuple)) + + +def dict_test(value): + return isinstance(value, (dict, collections.MutableMapping)) |