diff options
author | Stefan Kögl <stefan@skoegl.net> | 2017-09-10 17:30:54 +0200 |
---|---|---|
committer | Stefan Kögl <stefan@skoegl.net> | 2017-09-10 17:30:54 +0200 |
commit | 45b04c77bbc8782cd522f839a9a823caf1fe0e91 (patch) | |
tree | 02195a4657aee310bd6466fac3872f16c01e3985 | |
parent | fa17b619239afeea63ca1eb89a36ba17ce9134a9 (diff) | |
download | python-json-pointer-45b04c77bbc8782cd522f839a9a823caf1fe0e91.tar.gz |
Extract (un)escape function
-rw-r--r-- | jsonpointer.py | 17 |
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', '~') |