54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
from pydantic import BaseModel, field_validator
|
||
from datetime import date
|
||
from dateutil import parser
|
||
|
||
class DataValid(BaseModel):
|
||
id: int
|
||
organ: str
|
||
names: str
|
||
date_from: date
|
||
date_to: date | None
|
||
ver: str
|
||
|
||
# Дополнительный конструктор для списка
|
||
@classmethod
|
||
def from_list(cls, data_list: list):
|
||
return cls(
|
||
id=data_list[0],
|
||
organ=data_list[1],
|
||
names=data_list[2],
|
||
date_from=data_list[3],
|
||
date_to=data_list[4],
|
||
ver=data_list[5]
|
||
)
|
||
|
||
@field_validator('date_from', mode='before')
|
||
def parse_date_to(cls, date):
|
||
if isinstance(date, str):
|
||
try:
|
||
return parser.parse(date)
|
||
except (ValueError, TypeError): return date
|
||
return date
|
||
|
||
@field_validator('date_to', mode='before')
|
||
def parse_date_from(date):
|
||
if isinstance(date, str):
|
||
try:
|
||
return parser.parse(date)
|
||
except(ValueError, TypeError): return date
|
||
return date
|
||
|
||
@staticmethod
|
||
def validate_data(list_data: list[list]) -> list:
|
||
"""
|
||
Функция принимает список списков, выполняет парсинг и валидацию
|
||
с пмошью класса DataValid из файла validation.py.
|
||
Возвращает распршеный валидный список словарей для БД.
|
||
"""
|
||
result = []
|
||
for intem_list in list_data:
|
||
try:
|
||
validated_data = DataValid.from_list(intem_list) # Передаем один лист
|
||
result.append(validated_data.model_dump()) # Добаляем валидный и распаршеный словарь
|
||
except: continue
|
||
return result |