Skip to content

Commit a41901b

Browse files
committed
Fixed: can't compare offset-naive and offset-aware datetimes (date_start, date_end comparison)
1 parent edd7b24 commit a41901b

2 files changed

Lines changed: 8 additions & 8 deletions

File tree

app/crud.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -288,20 +288,20 @@ def update_election(
288288
raise errors.ForbiddenError("You are not allowed to manage the election")
289289

290290
if election_ref != election.ref:
291-
raise errors.UnauthorizedError("Wrong election ref")
291+
raise errors.ForbiddenError("Wrong election ref")
292292

293293
db_election = get_election(db, election_ref)
294294

295295
if db_election is None:
296296
raise errors.NotFoundError("elections")
297297

298298
if election.date_start is not None and election.date_end is None and db_election.date_end is not None:
299-
if election.date_start > db_election.date_end:
299+
if schemas.parse_date(election.date_start) > schemas.parse_date(db_election.date_end):
300300
raise errors.ForbiddenError(
301301
"The start date must be before the end date of the election"
302302
)
303303
elif election.date_end is not None and election.date_start is None:
304-
if election.date_end < db_election.date_start:
304+
if schemas.parse_date(election.date_end) < schemas.parse_date(db_election.date_start):
305305
raise errors.ForbiddenError(
306306
"The end date must be after the start date of the election"
307307
)

app/schemas.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def _in_a_long_time() -> datetime:
8383
def _utc_now() -> datetime:
8484
return datetime.now(timezone.utc)
8585

86-
def _parse_date(value:datetime | int | str | None):
86+
def parse_date(value:datetime | int | str | None):
8787
if value is None:
8888
return None
8989

@@ -124,15 +124,15 @@ class ElectionBase(BaseModel):
124124

125125
@model_validator(mode="after")
126126
def check_dates_order(self) -> Self:
127-
if self.date_start and self.date_end and _parse_date(self.date_start) > _parse_date(self.date_end):
127+
if self.date_start and self.date_end and parse_date(self.date_start) > parse_date(self.date_end):
128128
raise ArgumentsSchemaError("date_start must be before or equal to date_end")
129129

130130
return self
131131

132132
@field_validator("date_end", "date_start", mode="before")
133133
@classmethod
134134
def parse_date(cls, value):
135-
return _parse_date(value)
135+
return parse_date(value)
136136

137137
class ElectionGet(ElectionBase):
138138
force_close: bool = False
@@ -239,15 +239,15 @@ class ElectionUpdate(BaseModel):
239239

240240
@model_validator(mode="after")
241241
def check_dates_order(self) -> Self:
242-
if self.date_start and self.date_end and _parse_date(self.date_start) > _parse_date(self.date_end):
242+
if self.date_start and self.date_end and parse_date(self.date_start) > parse_date(self.date_end):
243243
raise ArgumentsSchemaError(f"date_start must be before or equal to date_end")
244244

245245
return self
246246

247247
@field_validator("date_end", "date_start", mode="before")
248248
@classmethod
249249
def parse_date(cls, value):
250-
return _parse_date(value)
250+
return parse_date(value)
251251

252252
@field_validator("grades")
253253
@classmethod

0 commit comments

Comments
 (0)