From 751720f44aa6a77bc88f2bd6706b35c4b92e7f6e Mon Sep 17 00:00:00 2001 From: Abdullah Bilal Date: Tue, 13 Jan 2026 23:26:33 +0500 Subject: [PATCH] Fix error of Duration deepcopy not including weeks --- src/pendulum/duration.py | 1 + tests/duration/test_behavior.py | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pendulum/duration.py b/src/pendulum/duration.py index 721401df..d6cc0657 100644 --- a/src/pendulum/duration.py +++ b/src/pendulum/duration.py @@ -467,6 +467,7 @@ def __deepcopy__(self, _: dict[int, Self]) -> Self: hours=self.hours, years=self.years, months=self.months, + weeks=self.weeks, ) diff --git a/tests/duration/test_behavior.py b/tests/duration/test_behavior.py index 2442534a..cf60282f 100644 --- a/tests/duration/test_behavior.py +++ b/tests/duration/test_behavior.py @@ -5,6 +5,8 @@ from copy import deepcopy from datetime import timedelta +import pytest + import pendulum from tests.conftest import assert_duration @@ -24,9 +26,15 @@ def test_comparison_to_timedelta() -> None: assert duration < timedelta(days=4) -def test_deepcopy() -> None: - duration = pendulum.duration(months=1) +@pytest.mark.parametrize( + "duration, expected", + [ + (pendulum.duration(months=1), {"months": 1}), + (pendulum.Duration(days=9), {"weeks": 1, "days": 2}), + ], +) +def test_deepcopy(duration, expected) -> None: copied_duration = deepcopy(duration) assert copied_duration == duration - assert_duration(copied_duration, months=1) + assert_duration(copied_duration, **expected)