Skip to content

Commit 9c09065

Browse files
Matti Lamppumatti-lamppu
authored andcommitted
Add tests for dateutils
1 parent fb4d1df commit 9c09065

2 files changed

Lines changed: 381 additions & 18 deletions

File tree

common/date_utils.py

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -147,28 +147,29 @@ def datetimes_equal(_dt_1: datetime.datetime, _dt_2: datetime.datetime, /, *, ch
147147
"""
148148
Check if two timezone-aware datetime objects are equal.
149149
150-
This is needed because equals checks for datetime objects can give false results
151-
if `zoneinfo.ZoneInfo` objects are used for `tzinfo`:
150+
This is needed because == / != checks for datetime objects don't check for timezone-awareness:
152151
153152
```python 3.11
154153
import zoneinfo
155154
import datetime
156155
157156
tz = zoneinfo.ZoneInfo("Europe/Helsinki")
158157
159-
dt_1 = datetime.datetime(2021, 1, 1, tzinfo=tz)
160-
dt_2 = datetime.datetime(2021, 1, 1, tzinfo=datetime.UTC)
161-
dt_3 = datetime.datetime(2021, 1, 1)
158+
dt_zi = datetime.datetime(2021, 1, 1, tzinfo=tz)
159+
dt_tz = datetime.datetime(2021, 1, 1, tzinfo=datetime.UTC)
160+
dt_naive = datetime.datetime(2021, 1, 1)
162161
163-
assert dt_1 >= dt_3 # Works
164-
assert dt_1 <= dt_3 # Works??? This should be False, right?
165-
assert dt_2 >= dt_3 # raises "TypeError: can't compare offset-naive and offset-aware times"
162+
# There might not be true, since on datetime is timezone-aware and the other is not.
163+
assert dt_zi != dt_naive
164+
assert dt_tz != dt_naive
166165
```
167166
"""
168167
if _dt_1.utcoffset() is None:
169-
raise ValueError("First datetime must be timezone-aware using `datetime.timezone` objects.")
168+
msg = "First datetime must be timezone-aware using `datetime.timezone` objects."
169+
raise ValueError(msg)
170170
if _dt_2.utcoffset() is None:
171-
raise ValueError("Second datetime must be timezone-aware using `datetime.timezone` objects.")
171+
msg = "Second datetime must be timezone-aware using `datetime.timezone` objects."
172+
raise ValueError(msg)
172173
if check_same_tz and _dt_1.tzname() != _dt_2.tzname():
173174
msg = f"Timezones of both datetimes must be the same. Got: {_dt_1.tzname()} and {_dt_2.tzname()}"
174175
raise ValueError(msg)
@@ -179,22 +180,22 @@ def times_equal(_t_1: datetime.time, _t_2: datetime.time, /, *, check_same_tz: b
179180
"""
180181
Check if two timezone-aware time objects are equal.
181182
182-
This is needed because equals checks for time objects can give false results
183-
if `zoneinfo.ZoneInfo` objects are used for `tzinfo`:
183+
This is needed because == / != checks for time objects don't check for timezone-awareness,
184+
and / < / <= / > / >= checks can give false results if `zoneinfo.ZoneInfo` objects are used for `tzinfo`:
184185
185186
```python 3.11
186187
import zoneinfo
187188
import datetime
188189
189190
tz = zoneinfo.ZoneInfo("Europe/Helsinki")
190191
191-
t_1 = datetime.time(tzinfo=tz)
192-
t_2 = datetime.time(tzinfo=datetime.UTC)
193-
t_3 = datetime.time()
192+
t_zi = datetime.time(tzinfo=tz)
193+
t_tz = datetime.time(tzinfo=datetime.UTC)
194+
t_naive = datetime.time()
194195
195-
assert t_1 >= t_3 # Works
196-
assert t_1 <= t_3 # Works??? This should be False, right?
197-
assert t_2 >= t_3 # raises "TypeError: can't compare offset-naive and offset-aware times"
196+
assert t_zi >= t_naive # Works
197+
assert t_zi <= t_naive # Works??? This should be False, right?
198+
assert t_tz >= t_naive # raises "TypeError: can't compare offset-naive and offset-aware times"
198199
```
199200
"""
200201
if _t_1.utcoffset() is None:

0 commit comments

Comments
 (0)