add new data validations

This commit is contained in:
Sina Atalay 2023-09-12 19:41:43 +02:00
parent fc366a7fd0
commit 2b571a9892
1 changed files with 23 additions and 15 deletions

View File

@ -4,14 +4,21 @@ JSON to generate meaningful data for Python.
""" """
from datetime import date as Date from datetime import date as Date
from datetime import datetime
from typing import Literal from typing import Literal
from typing_extensions import Annotated from typing_extensions import Annotated
import re import re
import logging import logging
from functools import cached_property from functools import cached_property
from pydantic import BaseModel, HttpUrl, Field, model_validator, computed_field from pydantic import (
BaseModel,
HttpUrl,
Field,
model_validator,
computed_field,
EmailStr,
PastDate
)
from pydantic.functional_validators import AfterValidator from pydantic.functional_validators import AfterValidator
from pydantic_extra_types.phone_numbers import PhoneNumber from pydantic_extra_types.phone_numbers import PhoneNumber
from pydantic_extra_types.color import Color from pydantic_extra_types.color import Color
@ -83,15 +90,15 @@ def check_spelling(sentence: str) -> str:
SpellCheckedString = Annotated[str, AfterValidator(check_spelling)] SpellCheckedString = Annotated[str, AfterValidator(check_spelling)]
def compute_time_span_string(start_date: Date, end_date: Date) -> str: def compute_time_span_string(start_date: PastDate, end_date: PastDate) -> str:
""" """
Compute the time span between two dates and return a string that represents it. For, Compute the time span between two dates and return a string that represents it. For,
example, if the time span is 1 year and 3 months, it will return "1 year 3 months". example, if the time span is 1 year and 3 months, it will return "1 year 3 months".
:param start_date: The start date. :param start_date: The start date.
:type start_date: Date :type start_date: PastDate
:param end_date: The end date. :param end_date: The end date.
:type end_date: Date :type end_date: PastDate
:return: The time span string. :return: The time span string.
:rtype: str :rtype: str
""" """
@ -216,8 +223,9 @@ class Event(BaseModel):
Attributes: Attributes:
test test
""" """
start_date: Date = None
end_date: Date | Literal["present"] = None start_date: PastDate = None
end_date: PastDate | Literal["present"] = None
date: str = None date: str = None
location: str = None location: str = None
highlights: list[SpellCheckedString] = None highlights: list[SpellCheckedString] = None
@ -330,17 +338,17 @@ class Event(BaseModel):
url = str(self.url) url = str(self.url)
if "github" in url: if "github" in url:
text_url = "view on GitHub" link_text = "view on GitHub"
elif "linkedin" in url: elif "linkedin" in url:
text_url = "view on LinkedIn" link_text = "view on LinkedIn"
elif "instagram" in url: elif "instagram" in url:
text_url = "view on Instagram" link_text = "view on Instagram"
elif "YOUTUBE" in url: elif "youtube" in url:
text_url = "view on YouTube" link_text = "view on YouTube"
else: else:
text_url = "view on my website" link_text = "view on my website"
markdown_url = f"[{text_url}]({url})" markdown_url = f"[{link_text}]({url})"
return markdown_url return markdown_url
@ -403,7 +411,7 @@ class CurriculumVitae(BaseModel):
# 1) Mandotory user inputs: # 1) Mandotory user inputs:
name: str name: str
# 2) Optional user inputs: # 2) Optional user inputs:
email: str = None email: EmailStr = None
phone: PhoneNumber = None phone: PhoneNumber = None
website: HttpUrl = None website: HttpUrl = None
location: str = None location: str = None