diff --git a/bson/tz_util.py b/bson/tz_util.py index c4986b778..ed5b626ef 100644 --- a/bson/tz_util.py +++ b/bson/tz_util.py @@ -38,6 +38,9 @@ class FixedOffset(tzinfo): def __getinitargs__(self): return self.__offset, self.__name + def __reduce__(self): + return _UTC, () + def utcoffset(self, dt): return self.__offset @@ -50,3 +53,12 @@ class FixedOffset(tzinfo): utc = FixedOffset(0, "UTC") """Fixed offset timezone representing UTC.""" + + +def _UTC(): + """Factory function for utc unpickling. + + Makes sure that unpickling a utc instance always returns the same + module global. + """ + return utc diff --git a/test/test_timestamp.py b/test/test_timestamp.py index b7002d9a8..38dd5719c 100644 --- a/test/test_timestamp.py +++ b/test/test_timestamp.py @@ -48,9 +48,11 @@ class TestTimestamp(unittest.TestCase): dc = copy.deepcopy(d) self.assertEqual(dc, t.as_datetime()) + self.assertEqual(d.tzinfo, dc.tzinfo) dp = pickle.loads(pickle.dumps(d)) self.assertEqual(dp, t.as_datetime()) + self.assertEqual(d.tzinfo, dp.tzinfo) def test_exceptions(self): self.assertRaises(TypeError, Timestamp)