Skip to content

Commit ab5e95b

Browse files
committed
Make sure Interval can be deepcopy-ed, fix #850
1 parent df4d44c commit ab5e95b

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

src/pendulum/interval.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
import copy
34
import operator
45

56
from datetime import date
@@ -453,3 +454,10 @@ def __eq__(self, other: object) -> bool:
453454

454455
def __ne__(self, other: object) -> bool:
455456
return not self.__eq__(other)
457+
458+
def __deepcopy__(self, memodict: dict[int, Self]) -> Self:
459+
return self.__class__(
460+
copy.deepcopy(self.start),
461+
copy.deepcopy(self.end),
462+
self._absolute,
463+
)

tests/interval/test_behavior.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
import pickle
4+
import copy
45

56
from datetime import timedelta
67

@@ -65,3 +66,18 @@ def test_inequality():
6566

6667
assert interval1 != interval2
6768
assert interval1 != interval3
69+
70+
71+
def test_deepcopy():
72+
dt1 = pendulum.datetime(2016, 11, 18)
73+
dt2 = pendulum.datetime(2016, 11, 20)
74+
75+
interval = dt2 - dt1
76+
77+
interval2 = copy.deepcopy(interval)
78+
79+
assert interval == interval2
80+
# make sure it's a deep copy
81+
assert interval is not interval2
82+
assert interval.start is not interval2.start
83+
assert interval.end is not interval2.end

0 commit comments

Comments
 (0)