Заказы, этикетки и остатки¶
Этот рецепт показывает основной рабочий цикл домена orders: прочитать заказы, выполнить действие по заказу, создать PDF-этикетку, проверить delivery task и обновить остатки.
Список заказов¶
order().list() возвращает типизированный результат с краткой информацией по заказам.
from avito import AvitoClient
with AvitoClient.from_env() as avito:
orders = avito.order().list()
print(orders.items[0].order_id)
print(orders.items[0].buyer_name)
Действия по заказу¶
Write-операции принимают конкретный order_id. Для повторяемых действий передавайте idempotency_key.
from avito import AvitoClient
with AvitoClient.from_env() as avito:
confirmed = avito.order().apply(
order_id="ord-1",
transition="confirm",
idempotency_key="order-confirm-example-1",
)
marked = avito.order().update_markings(
order_id="ord-1",
codes=["marking-code-1"],
idempotency_key="order-marking-example-1",
)
print(confirmed.status)
print(marked.success)
Генерация этикетки¶
Сначала создайте задачу генерации, затем скачайте PDF по task_id.
from avito import AvitoClient
with AvitoClient.from_env() as avito:
task = avito.order_label().create(
order_ids=["ord-1"],
idempotency_key="label-create-example-1",
)
label = avito.order_label(task.task_id).download()
print(label.filename)
print(label.binary.content_type)
Доставка и delivery task¶
Production delivery API возвращает идентификатор задачи или сущности. Статус задачи можно прочитать через delivery_task().
from avito import AvitoClient
with AvitoClient.from_env() as avito:
announcement = avito.delivery_order().create_announcement(
order_id="ord-1",
idempotency_key="delivery-announcement-example-1",
)
parcel = avito.delivery_order().create(
order_id="ord-1",
parcel_id="par-1",
idempotency_key="delivery-parcel-example-1",
)
task = avito.delivery_task(announcement.task_id).get()
print(parcel.parcel_id)
print(task.status)
Остатки¶
stock() читает и обновляет остатки по объявлениям. Для обновления используйте публичную модель StockUpdateEntry.
from avito import AvitoClient
from avito.orders import StockUpdateEntry
with AvitoClient.from_env() as avito:
current = avito.stock().get(item_ids=[101])
updated = avito.stock().update(
stocks=[StockUpdateEntry(item_id=101, quantity=7)],
idempotency_key="stock-update-example-1",
)
print(current.items[0].quantity)
print(updated.items[0].success)
Полный список методов смотрите в reference по orders. Бинарные ответы, такие как PDF-этикетки, сериализуются через to_dict() с content_base64.