mirror of
https://github.com/Eledio/superfaktura-client.git
synced 2025-11-01 08:28:25 +01:00
data_types: Date - a new data type
This commit is contained in:
0
utils/__init__.py
Normal file
0
utils/__init__.py
Normal file
62
utils/data_types.py
Normal file
62
utils/data_types.py
Normal file
@@ -0,0 +1,62 @@
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
import json
|
||||
|
||||
|
||||
class Date:
|
||||
def __init__(self, date_str: Optional[str] = None):
|
||||
"""
|
||||
Creates a Date instance that supports typing and validation for the format YYYY-MM-DD.
|
||||
|
||||
:param date_str: Date in the format YYYY-MM-DD or None.
|
||||
"""
|
||||
self.date: Optional[datetime] = None
|
||||
if date_str:
|
||||
self.date = self._validate_date(date_str)
|
||||
|
||||
@staticmethod
|
||||
def _validate_date(date_str: str) -> datetime:
|
||||
"""
|
||||
Validates that the date is in the format YYYY-MM-DD.
|
||||
|
||||
:param date_str: Date as a string.
|
||||
:return: Validated date as a datetime instance.
|
||||
"""
|
||||
try:
|
||||
return datetime.strptime(date_str, "%Y-%m-%d")
|
||||
except ValueError:
|
||||
raise ValueError(f"Date must be in format YYYY-MM-DD, got: {date_str}")
|
||||
|
||||
def __str__(self) -> str:
|
||||
"""
|
||||
Returns the date as a string in the format YYYY-MM-DD, or 'None' if not set.
|
||||
"""
|
||||
return self.date.strftime("%Y-%m-%d") if self.date else "None"
|
||||
|
||||
def is_set(self) -> bool:
|
||||
"""
|
||||
Returns True if the date is set, otherwise False.
|
||||
"""
|
||||
return self.date is not None
|
||||
|
||||
def to_dict(self) -> Optional[str]:
|
||||
"""
|
||||
Converts the Date object to a serializable format.
|
||||
:return: The date as a string in YYYY-MM-DD format, or None if not set.
|
||||
"""
|
||||
return self.date.strftime("%Y-%m-%d") if self.date else None
|
||||
|
||||
def to_json(self) -> Optional[str]:
|
||||
"""
|
||||
Converts the Date object to a JSON serializable format.
|
||||
:return: The date as a string in YYYY-MM-DD format, or None if not set.
|
||||
"""
|
||||
return self.to_dict()
|
||||
|
||||
|
||||
class DateEncoder(json.JSONEncoder):
|
||||
def default(self, o):
|
||||
if isinstance(o, Date):
|
||||
return o.to_json()
|
||||
return super().default(o)
|
||||
Reference in New Issue
Block a user