Исходный код cdek.apps.agreement.requests

from __future__ import annotations

from datetime import date as Date
from datetime import datetime
from typing import Any
from uuid import UUID

from pydantic import BaseModel, Field, field_serializer

from ..models import Address, City, Coordinates, Country, Region, Zip
from ..models.order import OrderInfo


[документация] class ScheduleLocation(City, Country, Region, Coordinates, Address, Zip): code: int | None = Field(default=None) # type: ignore region: str | None = Field(default=None) # type: ignore region_code: int | None = Field(default=None) city: str | None = Field(default=None) # type: ignore city_uuid: str | None = Field(default=None) # type: ignore
[документация] class DeliveryLocation(Zip, Coordinates, Country, Region): code: int | None = None fias_guid: UUID | None = None city: str | None = None address: str
[документация] class RegisterDeliveryRequest(OrderInfo): date: Date = Field(..., description="Дата доставки, согласованная с получателем") time_from: str = Field( ..., description='Время доставки "С", согласованное с получателем' ) time_to: str = Field( ..., description='Время доставки "По", согласованное с получателем' ) comment: str | None = Field( None, max_length=255, description="Комментарий к договоренности о доставке" ) delivery_point: str | None = Field( None, max_length=255, description="Буквенно-цифровой код ПВЗ СДЭК" ) to_location: ScheduleLocation | None = Field(None, description="Населённый пункт")
[документация] def to_location_init(self, **kwargs: Any) -> ScheduleLocation: """Создать объект локации для договорённости о доставке""" return ScheduleLocation(**kwargs)
[документация] def set_to_location(self, location: ScheduleLocation) -> RegisterDeliveryRequest: """Установить локацию доставки""" self.to_location = location return self
[документация] @field_serializer("date") def serialize_date(self, date: Date) -> str: """Вернуть дату доставки в формате YYYY-MM-DD""" return date.strftime("%Y-%m-%d")
[документация] class DeliveryIntervalRequest(BaseModel): date_time: datetime = Field(..., description="Дата и время заявки на вызов курьера") from_location: DeliveryLocation | None = Field( None, description="Адрес отправления" ) shipment_point: str | None = Field(None, description="Код ПВЗ СДЭК") to_location: DeliveryLocation = Field(..., description="Адрес доставки") tariff_code: int = Field(..., description="Код тарифа") additional_order_types: list[int] | None = Field( None, description="Дополнительные типы заказа" )
[документация] @field_serializer("date_time") def serialize_date_time(self, date_time: datetime) -> str: """Вернуть дату запроса интервалов в формате ISO 8601""" return date_time.strftime("%Y-%m-%dT%H:%M:%S")