From 835e1dea3346f938a958c815cf417c8eea5593a7 Mon Sep 17 00:00:00 2001 From: Delgan Date: Fri, 26 Jan 2018 00:06:47 +0100 Subject: [PATCH] Fix unpickling with undefined / empty timezone name --- pendulum/pendulum.py | 8 +------- pendulum/tz/timezone.py | 2 +- tests/pendulum_tests/test_behavior.py | 9 +++++++++ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/pendulum/pendulum.py b/pendulum/pendulum.py index cbbf94ac..6cca7f63 100644 --- a/pendulum/pendulum.py +++ b/pendulum/pendulum.py @@ -1980,16 +1980,10 @@ def __getnewargs__(self): return(self, ) def _getstate(self, protocol=3): - tz = self.timezone_name - - # Fix for fixed timezones not being properly unpickled - if isinstance(self.tz, FixedTimezone): - tz = self.offset_hours - return ( self.year, self.month, self.day, self.hour, self.minute, self.second, self.microsecond, - tz, + self.tzinfo, self.fold ) diff --git a/pendulum/tz/timezone.py b/pendulum/tz/timezone.py index 88592396..9130ec00 100644 --- a/pendulum/tz/timezone.py +++ b/pendulum/tz/timezone.py @@ -522,7 +522,7 @@ def fromutc(self, dt): return (dt + self._tzinfo.adjusted_offset).replace(tzinfo=self._tzinfo) def __getinitargs__(self): - return self._offset + return (self._offset, ) class _UTC(FixedTimezone): diff --git a/tests/pendulum_tests/test_behavior.py b/tests/pendulum_tests/test_behavior.py index 12a12854..76d90edf 100644 --- a/tests/pendulum_tests/test_behavior.py +++ b/tests/pendulum_tests/test_behavior.py @@ -6,6 +6,7 @@ from datetime import datetime, date, time, timedelta from pendulum import Pendulum, timezone from pendulum.tz.timezone import Timezone +from pendulum.tz.loader import Loader from .. import AbstractTestCase @@ -101,6 +102,14 @@ def test_pickle_with_integer_tzinfo(self): self.assertEqual(dt1, dt2) + def test_pickle_with_empty_tzinfo_name(self): + empty_timezone = Timezone('', *Loader.load('Europe/Paris')) + dt1 = Pendulum(2016, 8, 27, 12, 34, 56, 123456, empty_timezone) + s = pickle.dumps(dt1) + dt2 = pickle.loads(s) + + self.assertEqual(dt1, dt2) + def test_proper_dst(self): dt = pendulum.create(1941, 7, 1, tz='Europe/Amsterdam')