Skip to content

Commit 1fabeba

Browse files
committed
Fixes range() behavior.
1 parent 660c6b9 commit 1fabeba

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

pendulum/period.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,14 @@ def xrange(self, unit):
9898
op = operator.ge
9999

100100
start, end = self.start, self.end
101+
102+
i = 1
101103
while op(start, end):
102104
yield start
103105

104-
start = getattr(start, method)(**{unit: 1})
106+
start = getattr(self.start, method)(**{unit: i})
107+
108+
i += 1
105109

106110
def intersect(self, *periods):
107111
"""

tests/period_tests/test_range.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,22 @@ def test_contains_with_datetime(self):
7373
p = Period(dt1, dt2)
7474
dt = datetime(2000, 1, 7)
7575
self.assertTrue(dt in p)
76+
77+
def test_range_months_overflow(self):
78+
dt1 = Pendulum(2016, 1, 30, tzinfo='America/Sao_Paulo')
79+
dt2 = dt1.add(months=4)
80+
81+
p = Period(dt1, dt2)
82+
r = p.range('months')
83+
self.assertPendulum(r[0], 2016, 1, 30, 0, 0, 0)
84+
self.assertPendulum(r[-1], 2016, 5, 30, 0, 0, 0)
85+
86+
def test_range_with_dst(self):
87+
dt1 = Pendulum(2016, 10, 14, tzinfo='America/Sao_Paulo')
88+
dt2 = dt1.add(weeks=1)
89+
90+
p = Period(dt1, dt2)
91+
r = p.range('days')
92+
self.assertPendulum(r[0], 2016, 10, 14, 0, 0, 0)
93+
self.assertPendulum(r[2], 2016, 10, 16, 1, 0, 0)
94+
self.assertPendulum(r[-1], 2016, 10, 21, 0, 0, 0)

0 commit comments

Comments
 (0)