Skip to content

Commit 12418d8

Browse files
committed
Adds support of Pendulum instance for convert()
1 parent 0d7190b commit 12418d8

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

pendulum/tz/timezone.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ def load(cls, name):
4343
:rtype: Timezone
4444
"""
4545
# Shortcut to UTC
46-
#if name.upper() == 'UTC':
47-
# return UTC
46+
if name.upper() == 'UTC':
47+
return UTCTimezone
4848

4949
if name not in cls._cache:
5050
(transitions,
@@ -69,11 +69,19 @@ def convert(self, dt):
6969
7070
Otherwise, it will convert the datetime to local time.
7171
"""
72+
from ..pendulum import Pendulum
73+
7274
if dt.tzinfo is None:
7375
# we assume local time
74-
return self._normalize(dt)
76+
converted = self._normalize(dt)
77+
78+
else:
79+
converted = self._convert(dt)
7580

76-
return self._convert(dt)
81+
if isinstance(dt, Pendulum):
82+
return Pendulum.instance(converted)
83+
84+
return converted
7785

7886
def _normalize(self, dt):
7987
# if tzinfo is set, something wrong happened
@@ -229,13 +237,13 @@ def _get_timestamp(self, dt):
229237

230238
def __repr__(self):
231239
return '<Timezone [{}]>'.format(self._name)
232-
233-
240+
241+
234242
class FixedTimezone(Timezone):
235243
"""
236244
A timezone that has a fixed offset to UTC.
237245
"""
238-
246+
239247
def __init__(self, offset):
240248
"""
241249
:param offset: offset to UTC in seconds.
@@ -249,7 +257,7 @@ def __init__(self, offset):
249257
name = '{0}{1:02d}:{2:02d}'.format(sign, hour, minute)
250258

251259
transition_type = TransitionType(int(offset), False, '')
252-
260+
253261
super(FixedTimezone, self).__init__(name, [], [], transition_type)
254262

255263

tests/tz_tests/test_timezone.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,6 @@ def test_subtract_time_to_new_transition_repeated(self):
214214
self.assertEqual(7200, dt.offset)
215215
self.assertTrue(dt.is_dst)
216216

217-
218217
dt = pendulum.create(2013, 11, 3, 1, 0, 0, 0, 'America/New_York')
219218

220219
self.assertPendulum(dt, 2013, 11, 3, 1, 0, 0, 0)
@@ -228,3 +227,11 @@ def test_subtract_time_to_new_transition_repeated(self):
228227
self.assertEqual('America/New_York', dt.timezone_name)
229228
self.assertEqual(-4 * 3600, dt.offset)
230229
self.assertTrue(dt.is_dst)
230+
231+
def test_convert_accept_pendulum_instance(self):
232+
dt = pendulum.create(2016, 8, 7, 12, 53, 54)
233+
tz = timezone('Europe/Paris')
234+
new = tz.convert(dt)
235+
236+
self.assertIsInstanceOfPendulum(new)
237+
self.assertPendulum(new, 2016, 8, 7, 14, 53, 54)

0 commit comments

Comments
 (0)