url_encode and url_decode for ObjectIds
This commit is contained in:
parent
376d6e0485
commit
db25c8b0dd
@ -65,6 +65,25 @@ class ObjectId(object):
|
||||
else:
|
||||
raise TypeError("id must be an instance of (str, ObjectId), not %s" % type(oid))
|
||||
|
||||
def url_encode(self):
|
||||
"""Get a string representation of this ObjectId safe for use in a url.
|
||||
|
||||
The reverse can be achieved using `url_decode()`.
|
||||
"""
|
||||
return self.__id.encode("hex")
|
||||
|
||||
@classmethod
|
||||
def url_decode(cls, encoded_oid):
|
||||
"""Create an ObjectId from an encoded hex string.
|
||||
|
||||
The reverse can be achieved using `url_encode()`.
|
||||
|
||||
:Parameters:
|
||||
- `encoded_oid`: string encoding of an ObjectId (as created
|
||||
by `url_encode()`)
|
||||
"""
|
||||
return cls(encoded_oid.decode("hex"))
|
||||
|
||||
def __str__(self):
|
||||
return self.__id
|
||||
|
||||
|
||||
@ -50,5 +50,14 @@ class TestObjectId(unittest.TestCase):
|
||||
self.assertNotEqual(ObjectId(), ObjectId())
|
||||
self.assertNotEqual(ObjectId("123456789012"), "123456789012")
|
||||
|
||||
def test_url(self):
|
||||
a = ObjectId("123456789012")
|
||||
self.assertEqual(a.url_encode(), "313233343536373839303132")
|
||||
self.assertEqual(a, ObjectId.url_decode("313233343536373839303132"))
|
||||
|
||||
b = ObjectId()
|
||||
encoded = b.url_encode()
|
||||
self.assertEqual(b, ObjectId.url_decode(encoded))
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user