summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Kögl <stefan@skoegl.net>2017-09-10 17:30:54 +0200
committerStefan Kögl <stefan@skoegl.net>2017-09-10 17:30:54 +0200
commit45b04c77bbc8782cd522f839a9a823caf1fe0e91 (patch)
tree02195a4657aee310bd6466fac3872f16c01e3985
parentfa17b619239afeea63ca1eb89a36ba17ce9134a9 (diff)
downloadpython-json-pointer-45b04c77bbc8782cd522f839a9a823caf1fe0e91.tar.gz
Extract (un)escape function
-rw-r--r--jsonpointer.py17
1 files changed, 10 insertions, 7 deletions
diff --git a/jsonpointer.py b/jsonpointer.py
index eea100c..d79bb19 100644
--- a/jsonpointer.py
+++ b/jsonpointer.py
@@ -143,8 +143,7 @@ class JsonPointer(object):
raise JsonPointerException('location must starts with /')
parts = map(unquote, parts)
- parts = [part.replace('~1', '/') for part in parts]
- parts = [part.replace('~0', '~') for part in parts]
+ parts = [unescape(part) for part in parts]
self.parts = parts
@@ -262,8 +261,7 @@ class JsonPointer(object):
>>> ptr = JsonPointer('/~0/0/~1').path == '/~0/0/~1'
"""
- parts = [part.replace('~', '~0') for part in self.parts]
- parts = [part.replace('/', '~1') for part in parts]
+ parts = [escape(part) for part in self.parts]
return ''.join('/' + part for part in parts)
def __eq__(self, other):
@@ -289,9 +287,7 @@ class JsonPointer(object):
>>> JsonPointer.from_parts(['a', '~', '/', 0]).path == '/a/~0/~1/0'
True
"""
- parts = [str(part) for part in parts]
- parts = [part.replace('~', '~0') for part in parts]
- parts = [part.replace('/', '~1') for part in parts]
+ parts = [escape(str(part)) for part in parts]
ptr = cls(''.join('/' + part for part in parts))
return ptr
@@ -313,3 +309,10 @@ def pairwise(iterable):
for _ in b:
break
return izip(a, b)
+
+
+def escape(s):
+ return s.replace('~', '~0').replace('/', '~1')
+
+def unescape(s):
+ return s.replace('~1', '/').replace('~0', '~')