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

from __future__ import annotations

from datetime import datetime

from pydantic import BaseModel, Field, field_serializer

from ..models.contact import ContragentType
from ..models.location import Coordinates, Zip
from ..models.package import CalcPackage


[документация] class CalculatorLocation(Zip, Coordinates): code: int | None = Field(default=None, description="Код населенного пункта СДЭК") country_code: str | None = Field( default=None, max_length=2, description="Код страны в формате ISO_3166-1_alpha-2", ) city: str | None = Field(default=None, description="Название населенного пункта") address: str | None = Field(default=None, description="Адрес населенного пункта") contragent_type: ContragentType | None = Field( default=None, description="Тип контрагента" )
[документация] class TariffListRequest(BaseModel): date: datetime | None = Field( None, description="Дата и время планируемой передачи заказа", ) type: int = Field( 1, description="Тип заказа. 1 — интернет-магазин, 2 — доставка. По умолчанию — 1.", ) additional_order_types: list[int] | None = Field( None, description="Дополнительные типы заказа", ) currency: int | None = Field( None, description=("Валюта расчетаПо умолчанию — валюта договора."), ) lang: str = Field( "rus", max_length=3, description="Язык вывода информации о тарифах. " "Возможные значения: rus, eng, zho", ) from_location: CalculatorLocation | None = Field( None, description="Отправляющий адрес" ) to_location: CalculatorLocation | None = Field(None, description="Получающий адрес") packages: list[CalcPackage] | None = Field(None, description="Список упаковок")
[документация] def set_city_codes(self, from_location: int, to_location: int) -> TariffListRequest: """Задать коды населённых пунктов отправителя и получателя""" self.from_location = CalculatorLocation.model_validate({"code": from_location}) self.to_location = CalculatorLocation.model_validate({"code": to_location}) return self
[документация] def set_package_weight(self, weight: int) -> TariffListRequest: """Определить вес единственной упаковки в граммах""" self.packages = [CalcPackage.model_validate({"weight": weight})] return self
[документация] @field_serializer("date") def serialize_date(self, date: datetime) -> str: """Сериализовать дату в формат, поддерживаемый API""" return date.strftime("%Y-%m-%dT%H:%M:%S")
[документация] class CalcAdditionalService(BaseModel): code: str | None = Field(None, description="Код дополнительной услуги") parameter: str | None = Field(None, description="Параметр дополнительной услуги")
[документация] class TariffCodeRequest(TariffListRequest): tariff_code: int = Field(..., description="Код тарифа") services: list[CalcAdditionalService] | None = Field( None, description="Список дополнительных услуг" )