Skip to content

Commit 14a7d18

Browse files
authored
fix: add ability to strictly enforce date format in conformatteddate (#70)
* fix: add ability to strictly enforce date format in conformatteddate * refactor: tweaks to sort review comments
1 parent 0869911 commit 14a7d18

1 file changed

Lines changed: 6 additions & 0 deletions

File tree

src/dve/metadata_parser/domain_types.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,8 @@ class ConFormattedDate(dt.date):
260260

261261
DATE_FORMAT: ClassVar[Optional[str]] = None
262262
"""The specific format of the date as a Python 'strptime' string."""
263+
strict: ClassVar[Optional[bool]] = False
264+
"""Add additional check to ensure that date supplied meets the date format exactly."""
263265
ge: ClassVar[Optional[dt.date]] = None
264266
"""The earliest date allowed."""
265267
le: ClassVar[Optional[dt.date]] = None
@@ -280,6 +282,8 @@ def validate(cls, value: Optional[Union[dt.date, str]]) -> Optional[dt.date]:
280282
elif cls.DATE_FORMAT is not None:
281283
try:
282284
date = dt.datetime.strptime(value, cls.DATE_FORMAT).date()
285+
if cls.strict and (date.strftime(cls.DATE_FORMAT) != value):
286+
raise ValueError
283287
except ValueError as err:
284288
raise ValueError(
285289
f"Unable to parse provided datetime in format {cls.DATE_FORMAT}"
@@ -317,6 +321,7 @@ def __get_validators__(cls) -> Iterator[classmethod]:
317321
@validate_arguments
318322
def conformatteddate(
319323
date_format: Optional[str] = None,
324+
strict: Optional[bool] = False,
320325
ge: Optional[dt.date] = None, # pylint: disable=invalid-name
321326
le: Optional[dt.date] = None, # pylint: disable=invalid-name
322327
gt: Optional[dt.date] = None, # pylint: disable=invalid-name
@@ -331,6 +336,7 @@ def conformatteddate(
331336

332337
dict_ = ConFormattedDate.__dict__.copy()
333338
dict_["DATE_FORMAT"] = date_format
339+
dict_["strict"] = strict
334340
dict_["ge"] = ge
335341
dict_["le"] = le
336342
dict_["gt"] = gt

0 commit comments

Comments
 (0)