Skip to content

Commit f202c53

Browse files
shearicbehackett
authored andcommitted
change ObjectId __getstate__ and __setstate__ to just use __id also added unit test for pickling/unpickling ObjectId
1 parent c9c5457 commit f202c53

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

bson/objectid.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,12 +191,12 @@ def __getstate__(self):
191191
"""return value of object for pickling.
192192
needed explicitly because __slots__() defined.
193193
"""
194-
return self.__str__()
194+
return self.__id
195195

196-
def __setstate__(self, oid):
196+
def __setstate__(self, value):
197197
"""explicit state set from pickling
198198
"""
199-
self.__validate(oid)
199+
self.__id = value
200200

201201
def __str__(self):
202202
return self.__id.encode("hex")

test/test_objectid.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"""Tests for the objectid module."""
1616

1717
import datetime
18+
import pickle
1819
import warnings
1920
import unittest
2021
import sys
@@ -124,5 +125,9 @@ def test_from_datetime(self):
124125
oid = ObjectId.from_datetime(aware)
125126
self.assertEqual(as_utc, oid.generation_time)
126127

128+
def test_pickling(self):
129+
orig = ObjectId()
130+
self.assertEqual(orig, pickle.loads(pickle.dumps(orig)))
131+
127132
if __name__ == "__main__":
128133
unittest.main()

0 commit comments

Comments
 (0)