mirror of https://github.com/eyhc1/rendercv.git
data_models: allow future dates (#25)
This commit is contained in:
parent
f191f21987
commit
170c4f912e
|
@ -208,22 +208,15 @@ class EntryBase(RenderCVBaseModel):
|
||||||
end_date_is_provided = True
|
end_date_is_provided = True
|
||||||
|
|
||||||
if date_is_provided:
|
if date_is_provided:
|
||||||
try:
|
model.start_date = None
|
||||||
date_object = get_date_object(model.date) # type: ignore
|
model.end_date = None
|
||||||
except ValueError:
|
|
||||||
# Then it is a custom date string (e.g., "My Custom Date")
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
today_object = Date.today()
|
|
||||||
if date_object > today_object:
|
|
||||||
raise ValueError(
|
|
||||||
'"date" cannot be in the future!',
|
|
||||||
"date", # this is the location of the error
|
|
||||||
model.date, # this is value of the error
|
|
||||||
)
|
|
||||||
|
|
||||||
elif start_date_is_provided and not end_date_is_provided:
|
if re.fullmatch(date_pattern_for_json_schema, model.date):
|
||||||
model.end_date = "present"
|
# Then it is in YYYY-MM-DD, YYYY-MM, or YYYY format
|
||||||
|
try:
|
||||||
|
get_date_object(model.date)
|
||||||
|
except ValueError as e:
|
||||||
|
raise ValueError(str(e), "date", str(model.date))
|
||||||
|
|
||||||
elif not start_date_is_provided and end_date_is_provided:
|
elif not start_date_is_provided and end_date_is_provided:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
|
@ -232,8 +225,11 @@ class EntryBase(RenderCVBaseModel):
|
||||||
"start_date", # this is the location of the error
|
"start_date", # this is the location of the error
|
||||||
"", # this supposed to be the value of the error
|
"", # this supposed to be the value of the error
|
||||||
)
|
)
|
||||||
|
elif start_date_is_provided:
|
||||||
|
if not end_date_is_provided:
|
||||||
|
model.end_date = "present"
|
||||||
|
|
||||||
if model.start_date is not None and model.end_date is not None:
|
# Check if start_date and end_date are provided correctly:
|
||||||
try:
|
try:
|
||||||
end_date = get_date_object(model.end_date)
|
end_date = get_date_object(model.end_date)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
|
@ -250,12 +246,6 @@ class EntryBase(RenderCVBaseModel):
|
||||||
"start_date", # this is the location of the error
|
"start_date", # this is the location of the error
|
||||||
str(model.start_date), # this is value of the error
|
str(model.start_date), # this is value of the error
|
||||||
)
|
)
|
||||||
elif end_date > Date.today():
|
|
||||||
raise ValueError(
|
|
||||||
'"end_date" cannot be in the future!',
|
|
||||||
"end_date", # this is the location of the error
|
|
||||||
str(model.end_date), # this is value of the error
|
|
||||||
)
|
|
||||||
|
|
||||||
return model
|
return model
|
||||||
|
|
||||||
|
@ -515,10 +505,9 @@ class PublicationEntry(RenderCVBaseModel):
|
||||||
@pydantic.field_validator("date")
|
@pydantic.field_validator("date")
|
||||||
@classmethod
|
@classmethod
|
||||||
def check_date(cls, date: int | RenderCVDate) -> int | RenderCVDate:
|
def check_date(cls, date: int | RenderCVDate) -> int | RenderCVDate:
|
||||||
"""Check if the date is in the past."""
|
"""Check if the date is a valid date."""
|
||||||
date_object = get_date_object(date)
|
# The function below will raise an error if the date is not valid:
|
||||||
if date_object > Date.today():
|
get_date_object(date)
|
||||||
raise ValueError("The publication date cannot be in the future!")
|
|
||||||
|
|
||||||
return date
|
return date
|
||||||
|
|
||||||
|
|
|
@ -265,7 +265,7 @@ def test_publication_dates(publication_entry, date, expected_date_string):
|
||||||
assert publication_entry.date_string == expected_date_string
|
assert publication_entry.date_string == expected_date_string
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("date", ["aaa", None, "2025"])
|
@pytest.mark.parametrize("date", ["aaa", None, "2025-23-23"])
|
||||||
def test_invalid_publication_dates(publication_entry, date):
|
def test_invalid_publication_dates(publication_entry, date):
|
||||||
with pytest.raises(pydantic.ValidationError):
|
with pytest.raises(pydantic.ValidationError):
|
||||||
publication_entry["date"] = date
|
publication_entry["date"] = date
|
||||||
|
@ -279,16 +279,13 @@ def test_invalid_publication_dates(publication_entry, date):
|
||||||
("2020-01-01", "aaa", None),
|
("2020-01-01", "aaa", None),
|
||||||
(None, "2020-01-01", None),
|
(None, "2020-01-01", None),
|
||||||
("2023-01-01", "2021-01-01", None),
|
("2023-01-01", "2021-01-01", None),
|
||||||
("2999-01-01", None, None),
|
|
||||||
("2020-01-01", "2999-01-01", None),
|
|
||||||
("2022", "2021", None),
|
("2022", "2021", None),
|
||||||
("2021", "2060", None),
|
|
||||||
("2025", "2021", None),
|
("2025", "2021", None),
|
||||||
(None, None, "2028"),
|
|
||||||
("2020-01-01", "invalid_end_date", None),
|
("2020-01-01", "invalid_end_date", None),
|
||||||
("invalid_start_date", "2021-01-01", None),
|
("invalid_start_date", "2021-01-01", None),
|
||||||
("2020-99-99", "2021-01-01", None),
|
("2020-99-99", "2021-01-01", None),
|
||||||
("2020-10-12", "2020-99-99", None),
|
("2020-10-12", "2020-99-99", None),
|
||||||
|
(None, None, "2020-20-20")
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_invalid_dates(start_date, end_date, date):
|
def test_invalid_dates(start_date, end_date, date):
|
||||||
|
|
Loading…
Reference in New Issue