parse_saby/app/validation.py

54 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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