Skip to content

Commit 56f93ba

Browse files
Delgansdispater
authored andcommitted
Fix unpickling with undefined / empty timezone name (#174)
1 parent 5a596b0 commit 56f93ba

File tree

3 files changed

+11
-8
lines changed

3 files changed

+11
-8
lines changed

pendulum/pendulum.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1980,16 +1980,10 @@ def __getnewargs__(self):
19801980
return(self, )
19811981

19821982
def _getstate(self, protocol=3):
1983-
tz = self.timezone_name
1984-
1985-
# Fix for fixed timezones not being properly unpickled
1986-
if isinstance(self.tz, FixedTimezone):
1987-
tz = self.offset_hours
1988-
19891983
return (
19901984
self.year, self.month, self.day,
19911985
self.hour, self.minute, self.second, self.microsecond,
1992-
tz,
1986+
self.tzinfo,
19931987
self.fold
19941988
)
19951989

pendulum/tz/timezone.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ def fromutc(self, dt):
512512
return (dt + self._tzinfo.adjusted_offset).replace(tzinfo=self._tzinfo)
513513

514514
def __getinitargs__(self):
515-
return self._offset
515+
return (self._offset, )
516516

517517

518518
class _UTC(FixedTimezone):

tests/pendulum_tests/test_behavior.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from datetime import datetime, date, time, timedelta
77
from pendulum import Pendulum, timezone
88
from pendulum.tz.timezone import Timezone
9+
from pendulum.tz.loader import Loader
910
from .. import AbstractTestCase
1011

1112

@@ -101,6 +102,14 @@ def test_pickle_with_integer_tzinfo(self):
101102

102103
self.assertEqual(dt1, dt2)
103104

105+
def test_pickle_with_empty_tzinfo_name(self):
106+
empty_timezone = Timezone('', *Loader.load('Europe/Paris'))
107+
dt1 = Pendulum(2016, 8, 27, 12, 34, 56, 123456, empty_timezone)
108+
s = pickle.dumps(dt1)
109+
dt2 = pickle.loads(s)
110+
111+
self.assertEqual(dt1, dt2)
112+
104113
def test_proper_dst(self):
105114
dt = pendulum.create(1941, 7, 1, tz='Europe/Amsterdam')
106115

0 commit comments

Comments
 (0)