Skip to content

Preserve calendar units in reflected Date addition - #1082

Open
Sskift wants to merge 1 commit into
python-pendulum:masterfrom
Sskift:fix/date-reflected-calendar-addition
Open

Sskift wants to merge 1 commit into
python-pendulum:masterfrom
Sskift:fix/date-reflected-calendar-addition

Conversation

@Sskift

@Sskift Sskift commented Nov 2, 2026

Copy link
Copy Markdown

Adding a calendar duration to a Date currently depends on operand order. For example, date(2024, 1, 31) + duration(months=1) produces February 29, while duration(months=1) + date(2024, 1, 31) produces March 1.

Date inherits the native reflected addition implementation, which uses the duration's approximate day count. Delegate Date.__radd__ to its existing calendar-aware addition, as DateTime already does. The tests cover both signs, leap years, month-end clamping, mixed calendar units, native timedeltas and Date subclasses.

Validation: the new tests have 7 failures and 5 passing controls before the change; all 12 pass after it. All 285 Date tests pass. The full suite has 1,879 passes, 5 skips and one existing timezone-name failure in test_instance_with_aware_datetime_any_tzinfo, also reproduced with the original addition behavior. Ruff, formatting and mypy on the changed source pass.

  • Added tests for changed code.
  • Updated documentation for changed code. This restores the existing calendar-addition behavior for the opposite operand order; no new API is introduced.

This contribution was prepared with Codex assistance.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant