Source code for pochta.api.nogroup

from __future__ import annotations

from typing import TYPE_CHECKING, List, Optional

from pochta.enums import (
    EntryType,
    MailCategory,
    MailType,
    PaymentType,
    TransportType,
)
from pochta.helpers import Address, Name, Phone, Recipient
from pochta.utils import HTTPMethod


if TYPE_CHECKING:
    from pochta import Delivery


[docs]class NoGroup: """ Методы API Данных. Используется через объект :class:`Delivery <pochta.delivery.Delivery>` или вручную. """ def __init__(self, client: Delivery): """ Инициализация API Данных. :param client: API клиент Доставки """ self._client = client
[docs] def address_normalization(self, addresses: List[Address]) -> dict: """ Нормализация адреса. Разделяет и помещает сущности переданных адресов (город, улица) в соответствующие поля возвращаемого объекта. Параметр id (идентификатор записи) используется для установления соответствия переданных и полученных записей, так как порядок сортировки возвращаемых записей не гарантируется. Метод автоматически ищет и возвращает индекс близлежащего ОПС по указанному адресу. https://otpravka.pochta.ru/specification#/nogroup-normalization_adress :param addresses: Список адрессов :return: Результат нормализации """ url = f'/1.0/clean/address' data = [address.raw for address in addresses] res = self._client.request(HTTPMethod.POST, url, data=data) return res.json()
[docs] def fio_normalization(self, names: List[Name]) -> dict: """ Нормализация ФИО. Очищает, разделяет и помещает значения ФИО в соответствующие поля возвращаемого объекта. Параметр id (идентификатор записи) используется для установления соответствия переданных и полученных записей, так как порядок сортировки возвращаемых записей не гарантируется. https://otpravka.pochta.ru/specification#/nogroup-normalization_fio :param names: Список имен :return: Результат нормализации """ url = f'/1.0/clean/physical' data = [name.raw for name in names] res = self._client.request(HTTPMethod.POST, url, data=data) return res.json()
[docs] def phone_normalization(self, phone_numbers: List[Phone]) -> dict: """ Нормализация телефона. Принимает номера телефонов в неотформатированном виде, который может включать пробелы, символы: +-(). Очищает, разделяет и помещает сущности телефона (код города, номер) в соответствующие поля возвращаемого объекта. Если номер телефона 11-ти значный (мобильный), то дополнительные параметры, кроме original-phone и id, указывать не обязательно. Если номер телефона стационарный, то необходимо опционально указать дополнительные параметры для определения кода города. Параметр id (идентификатор записи) используется для установления соответствия переданных и полученных записей, так как порядок сортировки возвращаемых записей не гарантируется. https://otpravka.pochta.ru/specification#/nogroup-normalization_phone :param phone_numbers: Список номеров :return: Результат нормализации """ url = '/1.0/clean/phone' data = [phone.raw for phone in phone_numbers] res = self._client.request(HTTPMethod.POST, url, data=data) return res.json()
[docs] def check_reliability(self, recipients: List[Recipient]) -> List[dict]: """ Проверка благонадежности получателя. Актуально для отправлений с наложенным платежом. Определяет, является ли получатель благонадёжным, есть ли прецеденты невыкупа. https://otpravka.pochta.ru/specification#/nogroup-unreliable_recipient :param recipients: Список получателей :return: Результат проверки """ url = '/1.0/unreliable-recipient' data = [recipient.raw for recipient in recipients] res = self._client.request(HTTPMethod.POST, url, data=data) return res.json()
@property def counterpart_balance(self) -> dict: """ Отображение баланса. Отображает баланс расчетного счета. Возвращаемые значения указываются в копейках. https://otpravka.pochta.ru/specification#/nogroup-counterpart_balance :return: Информация о балансе контрагента """ url = '/1.0/counterpart/balance' res = self._client.request(HTTPMethod.GET, url) return res.json()
[docs] def calc_delivery_rate(self, completeness_checking: Optional[bool] = None, courier: Optional[bool] = None, declared_value: Optional[int] = None, height: Optional[int] = None, length: Optional[int] = None, width: Optional[int] = None, entries_type: Optional[EntryType] = None, fragile: Optional[bool] = None, index_from: Optional[str] = None, index_to: Optional[str] = None, mail_category: MailCategory = MailCategory.SIMPLE, mail_direct: Optional[int] = None, mail_type: MailType = MailType.POSTAL_PARCEL, mass: int = 100, notice_payment_method: Optional[PaymentType] = None, payment_method: Optional[PaymentType] = None, sms_notice_recipient: Optional[int] = None, transport_type: Optional[TransportType] = None, with_order_of_notice: bool = False, with_simple_notice: bool = False) -> dict: """ Калькулятор стоимости доставки. Рассчитывает стоимость пересылки в зависимости от указанных входных данных. Индекс ОПС точки отправления берется из профиля клиента. Возвращаемые значения указываются в копейках. https://otpravka.pochta.ru/specification#/nogroup-rate_calculate :param completeness_checking: Признак услуги проверки комплектности :param courier: Отметка "Курьер" :param declared_value: Объявленная ценность :param height: Линейная высота (сантиметры) :param length: Линейная длина (сантиметры) :param width: Линейная ширина (сантиметры) :param entries_type: Категория вложения. :param fragile: Отметка "Осторожно/Хрупко" :param index_from: Почтовый индекс объекта почтовой связи места приема :param index_to: Почтовый индекс объекта почтовой связи места назначения :param mail_category: Категория РПО :param mail_direct: Код страны назначения. :param mail_type: Вид РПО :param mass: Масса отправления в граммах :param notice_payment_method: Способ оплаты уведомеления. :param payment_method: Способ оплаты. :param sms_notice_recipient: Признак услуги SMS уведомления :param transport_type: Вид транспортировки :param with_order_of_notice: Отметка 'С заказным уведомлением' :param with_simple_notice: Отметка 'С простым уведомлением' :return: Результат расчета доставки """ url = '/1.0/tariff' data = { 'completeness-checking': completeness_checking, 'courier': courier, 'declared-value': declared_value, 'dimension': { 'height': height, 'length': length, 'width': width, }, 'entries-type': entries_type, 'fragile': fragile, 'index-from': index_from, 'index-to': index_to, 'mail-category': mail_category, 'mail-direct': mail_direct, 'mail-type': mail_type, 'mass': mass, 'notice-payment-method': notice_payment_method, 'payment-method': payment_method, 'sms-notice-recipient': sms_notice_recipient, 'transport-type': transport_type, 'with-order-of-notice': with_order_of_notice, 'with-simple-notice': with_simple_notice, } res = self._client.request(HTTPMethod.POST, url, data=data) return res.json()