diff options
author | Stefan Kögl <stefan@skoegl.net> | 2014-03-22 18:48:30 +0100 |
---|---|---|
committer | Stefan Kögl <stefan@skoegl.net> | 2014-03-22 18:50:02 +0100 |
commit | dba7c666e8828bab08d1687e9264bcc9e803ee25 (patch) | |
tree | 61dbf9b6e4256c8362bbc3ce4a1c5f77add7301a /jsonpointer.py | |
parent | 28ee1bb93c8ec323a061a34e74d1882def3bea80 (diff) | |
download | python-json-pointer-dba7c666e8828bab08d1687e9264bcc9e803ee25.tar.gz |
add JsonPointer.path and JsonPointer.from_parts
Diffstat (limited to 'jsonpointer.py')
-rw-r--r-- | jsonpointer.py | 25 |
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), ... |