Commit 9e80c8b
committed
Fix parse() crash on an ISO 8601 date + duration interval
When parse() is given an interval made of a duration and a date-only
endpoint (e.g. "2021-01-01/P1DT1H" or "P1Y/2021-01-01"), base_parse
returns a datetime.date for the endpoint, so pendulum.instance() returns a
Date. _parse then calls Date.add()/Date.subtract() with the duration's
hours/minutes/seconds/microseconds, which Date does not accept, raising
'TypeError: add() got an unexpected keyword argument 'hours''. Endpoints
that carry a time component return a DateTime and worked fine.
Promote a date-only endpoint to a midnight datetime before instance(), so
the interval has DateTime endpoints (matching the time-bearing case and the
function's Interval[DateTime] return type) and add()/subtract() accept the
time components. Fixes #881.1 parent cbab60c commit 9e80c8b
2 files changed
Lines changed: 34 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
39 | 51 | | |
40 | 52 | | |
41 | 53 | | |
| |||
75 | 87 | | |
76 | 88 | | |
77 | 89 | | |
78 | | - | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
79 | 93 | | |
80 | 94 | | |
81 | 95 | | |
| |||
91 | 105 | | |
92 | 106 | | |
93 | 107 | | |
94 | | - | |
95 | | - | |
96 | | - | |
| 108 | + | |
97 | 109 | | |
98 | 110 | | |
99 | 111 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
127 | 127 | | |
128 | 128 | | |
129 | 129 | | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
130 | 148 | | |
131 | 149 | | |
132 | 150 | | |
| |||
0 commit comments