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