summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Kögl <stefan@skoegl.net>2014-03-22 18:48:30 +0100
committerStefan Kögl <stefan@skoegl.net>2014-03-22 18:50:02 +0100
commitdba7c666e8828bab08d1687e9264bcc9e803ee25 (patch)
tree61dbf9b6e4256c8362bbc3ce4a1c5f77add7301a
parent28ee1bb93c8ec323a061a34e74d1882def3bea80 (diff)
downloadpython-json-pointer-dba7c666e8828bab08d1687e9264bcc9e803ee25.tar.gz
add JsonPointer.path and JsonPointer.from_parts
-rw-r--r--jsonpointer.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/jsonpointer.py b/jsonpointer.py
index ddb5d8c..81fad76 100644
--- a/jsonpointer.py
+++ b/jsonpointer.py
@@ -247,6 +247,17 @@ class JsonPointer(object):
return len(self.parts) > len(ptr.parts) and \
self.parts[:len(ptr.parts)] == ptr.parts
+ @property
+ def path(self):
+ """ Returns the string representation of the pointer
+
+ >>> ptr = JsonPointer('/~0/0/~1')
+ >>> ptr.path
+ u'/~0/0/~1'
+ """
+ parts = [part.replace('~', '~0') for part in self.parts]
+ parts = [part.replace('/', '~1') for part in parts]
+ return '/' + '/'.join(parts)
def __eq__(self, other):
""" compares a pointer to another object
@@ -264,6 +275,20 @@ class JsonPointer(object):
def __hash__(self):
return hash(tuple(self.parts))
+ @classmethod
+ def from_parts(cls, parts):
+ """ Constructs a JsonPointer from a list of (unescaped) paths
+
+ >>> JsonPointer.from_parts(['a', '~', '/', 0]).path
+ u'/a/~0/~1/0'
+ """
+ parts = [str(part) for part in parts]
+ parts = [part.replace('~', '~0') for part in parts]
+ parts = [part.replace('/', '~1') for part in parts]
+ ptr = cls('/' + '/'.join(parts))
+ return ptr
+
+
def pairwise(iterable):
""" s -> (s0,s1), (s1,s2), (s2, s3), ...