Skip to content

Commit 69473d1

Browse files
date fix
1 parent ad28d05 commit 69473d1

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

src/eligibility_signposting_api/model/campaign_config.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
import json
4+
import re
45
import typing
56
from collections import Counter
67
from datetime import UTC, date, datetime
@@ -273,7 +274,12 @@ class Iteration(BaseModel):
273274
def parse_dates(cls, v: str | date) -> date:
274275
if isinstance(v, date):
275276
return v
276-
return datetime.strptime(v, "%Y%m%d").date() # noqa: DTZ007
277+
if not re.fullmatch(r"\d{8}", str(v)):
278+
raise ValueError(f"Invalid format: {v}. Must be YYYYMMDD with 8 digits.")
279+
try:
280+
return datetime.strptime(str(v), "%Y%m%d").date() # noqa: DTZ007
281+
except ValueError:
282+
raise ValueError(f"Invalid date value: {v}. Must be a valid calendar date in YYYYMMDD format.")
277283

278284
@field_serializer("iteration_date", when_used="always")
279285
@staticmethod
@@ -316,7 +322,12 @@ class CampaignConfig(BaseModel):
316322
def parse_dates(cls, v: str | date) -> date:
317323
if isinstance(v, date):
318324
return v
319-
return datetime.strptime(v, "%Y%m%d").date() # noqa: DTZ007
325+
if not re.fullmatch(r"\d{8}", str(v)):
326+
raise ValueError(f"Invalid format: {v}. Must be YYYYMMDD with 8 digits.")
327+
try:
328+
return datetime.strptime(str(v), "%Y%m%d").date() # noqa: DTZ007
329+
except ValueError:
330+
raise ValueError(f"Invalid date value: {v}. Must be a valid calendar date in YYYYMMDD format.")
320331

321332
@field_serializer("start_date", "end_date", when_used="always")
322333
@staticmethod

0 commit comments

Comments
 (0)