Skip to content

Commit 6db4dca

Browse files
committed
Merge branch 'PYTHON-360'
2 parents b66d477 + f2ea613 commit 6db4dca

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

bson/objectid.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,21 @@ def from_datetime(cls, generation_time):
123123
oid = struct.pack(">i", int(ts)) + ZERO * 8
124124
return cls(oid)
125125

126+
@classmethod
127+
def is_valid(cls, oid):
128+
"""Checks if a `oid` string is valid or not.
129+
130+
:Parameters:
131+
- `oid`: the object id to validate
132+
133+
.. versionadded:: 2.2.1+
134+
"""
135+
try:
136+
ObjectId(oid)
137+
return True
138+
except (InvalidId, TypeError):
139+
return False
140+
126141
def __generate(self):
127142
"""Generate a new value for this ObjectId.
128143
"""

test/test_objectid.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,5 +179,17 @@ def test_pickle_backwards_compatability(self):
179179
self.assertEqual(oid_1_9, ObjectId("4d9a66561376c00b88000000"))
180180
self.assertEqual(oid_1_9, oid_1_10)
181181

182+
def test_is_valid(self):
183+
self.assertFalse(ObjectId.is_valid(4))
184+
self.assertFalse(ObjectId.is_valid(175.0))
185+
self.assertFalse(ObjectId.is_valid({"test": 4}))
186+
self.assertFalse(ObjectId.is_valid(["something"]))
187+
self.assertFalse(ObjectId.is_valid(""))
188+
self.assertFalse(ObjectId.is_valid("12345678901"))
189+
self.assertFalse(ObjectId.is_valid("1234567890123"))
190+
191+
self.assertTrue(ObjectId.is_valid(b("123456789012")))
192+
self.assertTrue(ObjectId.is_valid("123456789012123456789012"))
193+
182194
if __name__ == "__main__":
183195
unittest.main()

0 commit comments

Comments
 (0)