url_encode and url_decode for ObjectIds

This commit is contained in:
Mike Dirolf 2009-02-18 14:46:09 -05:00
parent 376d6e0485
commit db25c8b0dd
2 changed files with 28 additions and 0 deletions

View File

@ -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

View File

@ -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()