ozonapi-async 0.3.0__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ozonapi_async-0.3.0/src/ozonapi_async.egg-info → ozonapi_async-0.3.1}/PKG-INFO +1 -1
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/pyproject.toml +1 -1
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/__init__.py +1 -1
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/postings.py +27 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/methods/fbs.py +163 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/attributes_and_characteristics/__init__.py +6 -3
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/barcodes/__init__.py +5 -2
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/beta/__init__.py +11 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/__init__.py +47 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/__init__.py +47 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__addressee.py +11 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__analytics_data.py +61 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__barcodes.py +16 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__cancellation.py +34 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__customer.py +21 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__customer_address.py +54 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__delivery_method.py +25 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__financial_data.py +22 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__financial_data_products.py +62 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__legal_info.py +20 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__optional.py +14 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__posting.py +150 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__products.py +48 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__requirements.py +42 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__tariffication.py +47 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_list.py +177 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_unfulfilled_list.py +190 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/mixins.py +21 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/prices_and_stocks/__init__.py +74 -0
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/products/__init__.py +180 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v3__product_info_list.py +3 -3
- ozonapi_async-0.3.1/src/ozonapi/seller/schemas/warehouses/__init__.py +24 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1/src/ozonapi_async.egg-info}/PKG-INFO +1 -1
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi_async.egg-info/SOURCES.txt +18 -0
- ozonapi_async-0.3.0/src/ozonapi/seller/methods/fbs.py +0 -69
- ozonapi_async-0.3.0/src/ozonapi/seller/schemas/beta/__init__.py +0 -6
- ozonapi_async-0.3.0/src/ozonapi/seller/schemas/fbs/__init__.py +0 -9
- ozonapi_async-0.3.0/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_unfulfilled_list.py +0 -764
- ozonapi_async-0.3.0/src/ozonapi/seller/schemas/prices_and_stocks/__init__.py +0 -22
- ozonapi_async-0.3.0/src/ozonapi/seller/schemas/products/__init__.py +0 -51
- ozonapi_async-0.3.0/src/ozonapi/seller/schemas/warehouses/__init__.py +0 -11
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/LICENSE +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/readme.md +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/setup.cfg +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/__init__.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/__init__.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/__init__.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/delivery.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/localization.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/prices.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/products.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/requests.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/warehouses.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/__init__.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/config.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/core.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/exceptions.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/method_rate_limiter.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/rate_limiter.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/sessions.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/__init__.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/attributes_and_characteristics.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/barcodes.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/beta.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/prices_and_stocks.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/products.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/warehouses.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/__init__.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/attributes_and_characteristics/base.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute_values.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute_values_search.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_tree.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/barcodes/v1__barcode_add.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/barcodes/v1__barcode_generate.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/base.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/beta/v1__analytics_stocks.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/prices_and_stocks/base.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/prices_and_stocks/v1__product_import_prices.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/prices_and_stocks/v1__product_info_stocks_by_warehouse_fbs.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/prices_and_stocks/v2__products_stocks.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/prices_and_stocks/v4__product_info_stocks.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/prices_and_stocks/v5__product_info_prices.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/base.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_archive.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_attributes_update.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_import_by_sku.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_import_info.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_info_subscription.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_rating_by_sku.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_related_sku_get.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_unarchive.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_update_offer_id.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v2__product_pictures_info.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v2__products_delete.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v3__product_import.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v3__product_list.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v4__product_info_attributes.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/warehouses/v1__delivery_method_list.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/warehouses/v1__warehouse_list.py +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi_async.egg-info/dependency_links.txt +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi_async.egg-info/requires.txt +0 -0
- {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi_async.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ozonapi-async"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.1"
|
|
8
8
|
description = "Асинхронный клиент для работы с API маркетплейса Ozon"
|
|
9
9
|
readme = "readme.md"
|
|
10
10
|
keywords = ["ozon", "api", "async", "ecommerce", "seller", "client"]
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Асинхронный интерфейс для взаимодействия с API маркетплейса Ozon.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
__version__ = "0.3.
|
|
5
|
+
__version__ = "0.3.1"
|
|
6
6
|
__author__ = "Alexander Ulianov"
|
|
7
7
|
__repository__ = "https://github.com/a-ulianov/OzonAPI"
|
|
8
8
|
__docs__ = "https://github.com/a-ulianov/OzonAPI#readme"
|
{ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/postings.py
RENAMED
|
@@ -40,6 +40,7 @@ class AvailablePostingActions(str, Enum):
|
|
|
40
40
|
CLICK_TRACK_NUMBER = "click_track_number"
|
|
41
41
|
CUSTOMER_PHONE_AVAILABLE = "customer_phone_available"
|
|
42
42
|
HAS_WEIGHT_PRODUCTS = "has_weight_products"
|
|
43
|
+
HAS_BARCODE_FOR_PRINTING = "has_barcode_for_printing"
|
|
43
44
|
HIDE_REGION_AND_CITY = "hide_region_and_city"
|
|
44
45
|
INVOICE_GET = "invoice_get"
|
|
45
46
|
INVOICE_SEND = "invoice_send"
|
|
@@ -73,12 +74,14 @@ class PostingStatus(str, Enum):
|
|
|
73
74
|
AWAITING_DELIVER: ожидает отгрузки
|
|
74
75
|
ARBITRATION: арбитраж
|
|
75
76
|
CLIENT_ARBITRATION: клиентский арбитраж доставки
|
|
77
|
+
DELIVERED: доставлено
|
|
76
78
|
DELIVERING: доставляется
|
|
77
79
|
DRIVER_PICKUP: у водителя
|
|
78
80
|
NOT_ACCEPTED: не принят на сортировочном центре
|
|
79
81
|
AWAITING_VERIFICATION: создано
|
|
80
82
|
CANCELLED: отменено
|
|
81
83
|
CANCELLED_FROM_SPLIT_PENDING: отменён из-за разделения отправления
|
|
84
|
+
SENT_BY_SELLER: отправлено продавцом
|
|
82
85
|
"""
|
|
83
86
|
ACCEPTANCE_IN_PROGRESS = "acceptance_in_progress"
|
|
84
87
|
AWAITING_APPROVE = "awaiting_approve"
|
|
@@ -87,12 +90,14 @@ class PostingStatus(str, Enum):
|
|
|
87
90
|
AWAITING_DELIVER = "awaiting_deliver"
|
|
88
91
|
ARBITRATION = "arbitration"
|
|
89
92
|
CLIENT_ARBITRATION = "client_arbitration"
|
|
93
|
+
DELIVERED = "delivered"
|
|
90
94
|
DELIVERING = "delivering"
|
|
91
95
|
DRIVER_PICKUP = "driver_pickup"
|
|
92
96
|
NOT_ACCEPTED = "not_accepted"
|
|
93
97
|
AWAITING_VERIFICATION = "awaiting_verification"
|
|
94
98
|
CANCELLED = "cancelled"
|
|
95
99
|
CANCELLED_FROM_SPLIT_PENDING = "cancelled_from_split_pending"
|
|
100
|
+
SENT_BY_SELLER = "sent_by_seller"
|
|
96
101
|
|
|
97
102
|
|
|
98
103
|
class PostingSubstatus(str, Enum):
|
|
@@ -171,6 +176,28 @@ class CancellationType(str, Enum):
|
|
|
171
176
|
UNSPECIFIED = ""
|
|
172
177
|
|
|
173
178
|
|
|
179
|
+
class PaymentTypeGroupName(str, Enum):
|
|
180
|
+
"""Тип оплаты.
|
|
181
|
+
OZON_CARD: Ozon Карта
|
|
182
|
+
OZON_CARD_AUTO_DEBIT_AT_ISSUANCE: автосписание с Ozon Карты при выдаче
|
|
183
|
+
SAVED_CARD_AT_ISSUANCE: сохранённой картой при получении
|
|
184
|
+
SBP: Система Быстрых Платежей
|
|
185
|
+
OZON_INSTALLMENT: Ozon Рассрочка
|
|
186
|
+
BANK_ACCOUNT: оплата на расчётный счёт
|
|
187
|
+
SBERPAY: SberPay
|
|
188
|
+
UNSPECIFIED: не указано
|
|
189
|
+
"""
|
|
190
|
+
CARD_ONLINE = "картой онлайн"
|
|
191
|
+
OZON_CARD = "Ozon Карта"
|
|
192
|
+
OZON_CARD_AUTO_DEBIT_AT_ISSUANCE = "автосписание с Ozon Карты при выдаче"
|
|
193
|
+
SAVED_CARD_AT_ISSUANCE = "сохранённой картой при получении"
|
|
194
|
+
SBP = "Система Быстрых Платежей"
|
|
195
|
+
OZON_INSTALLMENT = "Ozon Рассрочка"
|
|
196
|
+
BANK_ACCOUNT = "оплата на расчётный счёт"
|
|
197
|
+
SBERPAY = "SberPay"
|
|
198
|
+
UNSPECIFIED = ""
|
|
199
|
+
|
|
200
|
+
|
|
174
201
|
class PrrOption(str, Enum):
|
|
175
202
|
"""Код услуги погрузочно-разгрузочных работ
|
|
176
203
|
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
from ..core import APIManager
|
|
2
|
+
from ..schemas.fbs import PostingFBSUnfulfilledListRequest, PostingFBSUnfulfilledListResponse, PostingFBSListResponse, \
|
|
3
|
+
PostingFBSListRequest
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class SellerFBSAPI(APIManager):
|
|
7
|
+
"""Реализует методы раздела Обработка заказов FBS и rFBS.
|
|
8
|
+
|
|
9
|
+
References:
|
|
10
|
+
https://docs.ozon.ru/api/seller/?__rr=1#tag/FBS
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
async def posting_fbs_unfulfilled_list(
|
|
14
|
+
self: "SellerFBSAPI",
|
|
15
|
+
request: PostingFBSUnfulfilledListRequest
|
|
16
|
+
) -> PostingFBSUnfulfilledListResponse:
|
|
17
|
+
"""Метод для получения списка необработанных отправлений за указанный период времени.
|
|
18
|
+
|
|
19
|
+
Notes:
|
|
20
|
+
• Период должен быть не больше одного года.
|
|
21
|
+
• Обязательно используйте фильтр либо по времени сборки — `cutoff`, либо по дате передачи отправления в доставку — `delivering_date`.
|
|
22
|
+
• Если использовать фильтры `cutoff` и `delivering_date` вместе, в ответе вернётся ошибка.
|
|
23
|
+
• Чтобы использовать фильтр по времени сборки, заполните поля `cutoff_from` и `cutoff_to`.
|
|
24
|
+
• Чтобы использовать фильтр по дате передачи отправления в доставку, заполните поля `delivering_date_from` и `delivering_date_to`.
|
|
25
|
+
• Для пагинации используйте `offset`.
|
|
26
|
+
|
|
27
|
+
References:
|
|
28
|
+
https://docs.ozon.ru/api/seller/#tag/FBS
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
request: Запрос на получение информации о необработанных отправлениях FBS и rFBS за указанный период времени по схеме `PostingFBSUnfulfilledListRequest`
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
Список необработанных отправлений за указанный период времени по схеме `PostingFBSUnfulfilledListResponse`
|
|
35
|
+
|
|
36
|
+
Examples:
|
|
37
|
+
Базовое применение:
|
|
38
|
+
async with SellerAPI(client_id, api_key) as api:
|
|
39
|
+
# noinspection PyArgumentList
|
|
40
|
+
|
|
41
|
+
result = await api.posting_fbs_unfulfilled_list(
|
|
42
|
+
PostingFBSUnfulfilledListRequest(
|
|
43
|
+
filter=PostingFBSUnfulfilledListFilter(
|
|
44
|
+
delivering_date_from=datetime.datetime.now() - datetime.timedelta(days=30),
|
|
45
|
+
delivering_date_to=datetime.datetime.now(),
|
|
46
|
+
),
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
Пример с фильтрацией выборки:
|
|
51
|
+
async with SellerAPI(client_id, api_key) as api:
|
|
52
|
+
# noinspection PyArgumentList
|
|
53
|
+
|
|
54
|
+
result = await api.posting_fbs_unfulfilled_list(
|
|
55
|
+
PostingFBSUnfulfilledListRequest(
|
|
56
|
+
filter=PostingFBSUnfulfilledListFilter(
|
|
57
|
+
cutoff_from=None,
|
|
58
|
+
cutoff_to=None,
|
|
59
|
+
delivering_date_from=datetime.datetime.now() - datetime.timedelta(days=30),
|
|
60
|
+
delivering_date_to=datetime.datetime.now(),
|
|
61
|
+
delivery_method_id=[],
|
|
62
|
+
is_quantum=False,
|
|
63
|
+
provider_id=[],
|
|
64
|
+
status=None,
|
|
65
|
+
warehouse_id=[],
|
|
66
|
+
last_changed_status_date=None
|
|
67
|
+
),
|
|
68
|
+
dir=SortingDirection.DESC,
|
|
69
|
+
limit=10,
|
|
70
|
+
offset=0,
|
|
71
|
+
with_=PostingFBSUnfulfilledListFilterWith(
|
|
72
|
+
barcodes=True,
|
|
73
|
+
financial_data=True
|
|
74
|
+
)
|
|
75
|
+
)
|
|
76
|
+
)
|
|
77
|
+
"""
|
|
78
|
+
response = await self._request(
|
|
79
|
+
method="post",
|
|
80
|
+
api_version="v3",
|
|
81
|
+
endpoint="posting/fbs/unfulfilled/list",
|
|
82
|
+
json=request.model_dump(by_alias=True)
|
|
83
|
+
)
|
|
84
|
+
return PostingFBSUnfulfilledListResponse(**response)
|
|
85
|
+
|
|
86
|
+
async def posting_fbs_list(
|
|
87
|
+
self: "SellerFBSAPI",
|
|
88
|
+
request: PostingFBSListRequest
|
|
89
|
+
) -> PostingFBSListResponse:
|
|
90
|
+
"""Метод для получения списка отправлений FBS за указанный период времени.
|
|
91
|
+
|
|
92
|
+
Notes:
|
|
93
|
+
• Период должен быть не больше одного года.
|
|
94
|
+
• Обязательно заполните поля `since` и `to` для указания периода.
|
|
95
|
+
• Для фильтрации можно использовать дополнительные параметры: статус, склад, службу доставки и другие.
|
|
96
|
+
• Для пагинации используйте `offset`.
|
|
97
|
+
|
|
98
|
+
References:
|
|
99
|
+
https://docs.ozon.ru/api/seller/?__rr=1#operation/PostingAPI_GetFbsPostingListV3
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
request: Запрос на получение информации об отправлениях FBS за указанный период времени по схеме `PostingFBSListRequest`
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
Список отправлений FBS за указанный период времени по схеме `PostingFBSListResponse`
|
|
106
|
+
|
|
107
|
+
Examples:
|
|
108
|
+
Базовое применение:
|
|
109
|
+
async with SellerAPI(client_id, api_key) as api:
|
|
110
|
+
# noinspection PyArgumentList
|
|
111
|
+
|
|
112
|
+
result = await api.posting_fbs_list(
|
|
113
|
+
PostingFBSListRequest(
|
|
114
|
+
filter=PostingFBSListFilter(
|
|
115
|
+
since=datetime.datetime.now() - datetime.timedelta(days=300),
|
|
116
|
+
to_=datetime.datetime.now(),
|
|
117
|
+
)
|
|
118
|
+
)
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
Пример с фильтрацией выборки:
|
|
122
|
+
async with SellerAPI(client_id, api_key) as api:
|
|
123
|
+
# noinspection PyArgumentList
|
|
124
|
+
|
|
125
|
+
result = await api.posting_fbs_list(
|
|
126
|
+
PostingFBSListRequest(
|
|
127
|
+
filter=PostingFBSListFilter(
|
|
128
|
+
since=datetime.datetime.now() - datetime.timedelta(days=30),
|
|
129
|
+
to_=datetime.datetime.now(),
|
|
130
|
+
status=PostingStatus.AWAITING_PACKAGING,
|
|
131
|
+
warehouse_id=[21321684811000],
|
|
132
|
+
provider_id=[24],
|
|
133
|
+
delivery_method_id=[21321684811000],
|
|
134
|
+
order_id=123456,
|
|
135
|
+
posting_number="123456789",
|
|
136
|
+
product_offer_id="ART-001",
|
|
137
|
+
product_sku=987654321,
|
|
138
|
+
last_changed_status_date=PostingFBSListRequestFilterLastChangedStatusDate(
|
|
139
|
+
from_=datetime.datetime.now() - datetime.timedelta(days=7),
|
|
140
|
+
to_=datetime.datetime.now()
|
|
141
|
+
),
|
|
142
|
+
is_quantum=False
|
|
143
|
+
),
|
|
144
|
+
dir=SortingDirection.ASC,
|
|
145
|
+
limit=100,
|
|
146
|
+
offset=0,
|
|
147
|
+
with_=PostingFBSListFilterWith(
|
|
148
|
+
analytics_data=True,
|
|
149
|
+
barcodes=True,
|
|
150
|
+
financial_data=True,
|
|
151
|
+
legal_info=False,
|
|
152
|
+
translit=True
|
|
153
|
+
)
|
|
154
|
+
)
|
|
155
|
+
)
|
|
156
|
+
"""
|
|
157
|
+
response = await self._request(
|
|
158
|
+
method="post",
|
|
159
|
+
api_version="v3",
|
|
160
|
+
endpoint="posting/fbs/list",
|
|
161
|
+
json=request.model_dump(by_alias=True)
|
|
162
|
+
)
|
|
163
|
+
return PostingFBSListResponse(**response)
|
|
@@ -2,20 +2,23 @@
|
|
|
2
2
|
https://docs.ozon.ru/api/seller/?__rr=1#tag/CategoryAPI
|
|
3
3
|
"""
|
|
4
4
|
__all__ = [
|
|
5
|
+
"DescriptionCategoryAttributeItem",
|
|
5
6
|
"DescriptionCategoryAttributeRequest",
|
|
6
7
|
"DescriptionCategoryAttributeResponse",
|
|
7
8
|
"DescriptionCategoryAttributeValuesRequest",
|
|
8
9
|
"DescriptionCategoryAttributeValuesResponse",
|
|
9
10
|
"DescriptionCategoryAttributeValuesSearchRequest",
|
|
10
11
|
"DescriptionCategoryAttributeValuesSearchResponse",
|
|
12
|
+
"DescriptionCategoryTreeItem",
|
|
11
13
|
"DescriptionCategoryTreeRequest",
|
|
12
14
|
"DescriptionCategoryTreeResponse",
|
|
13
15
|
]
|
|
14
16
|
|
|
15
|
-
from .v1__description_category_attribute import
|
|
16
|
-
DescriptionCategoryAttributeResponse
|
|
17
|
+
from .v1__description_category_attribute import DescriptionCategoryAttributeItem, \
|
|
18
|
+
DescriptionCategoryAttributeRequest, DescriptionCategoryAttributeResponse
|
|
17
19
|
from .v1__description_category_attribute_values import DescriptionCategoryAttributeValuesRequest, \
|
|
18
20
|
DescriptionCategoryAttributeValuesResponse
|
|
19
21
|
from .v1__description_category_attribute_values_search import DescriptionCategoryAttributeValuesSearchRequest, \
|
|
20
22
|
DescriptionCategoryAttributeValuesSearchResponse
|
|
21
|
-
from .v1__description_category_tree import DescriptionCategoryTreeRequest,
|
|
23
|
+
from .v1__description_category_tree import DescriptionCategoryTreeItem, DescriptionCategoryTreeRequest, \
|
|
24
|
+
DescriptionCategoryTreeResponse
|
|
@@ -4,9 +4,12 @@ https://docs.ozon.ru/api/seller/?__rr=1#tag/BarcodeAPI
|
|
|
4
4
|
__all__ = [
|
|
5
5
|
"BarcodeAddRequest",
|
|
6
6
|
"BarcodeAddResponse",
|
|
7
|
+
"BarcodeAddItem",
|
|
8
|
+
"BarcodeAddError",
|
|
7
9
|
"BarcodeGenerateRequest",
|
|
8
10
|
"BarcodeGenerateResponse",
|
|
11
|
+
"BarcodeGenerateError",
|
|
9
12
|
]
|
|
10
13
|
|
|
11
|
-
from .v1__barcode_add import BarcodeAddRequest, BarcodeAddResponse
|
|
12
|
-
from .v1__barcode_generate import BarcodeGenerateRequest, BarcodeGenerateResponse
|
|
14
|
+
from .v1__barcode_add import BarcodeAddRequest, BarcodeAddResponse, BarcodeAddItem, BarcodeAddError
|
|
15
|
+
from .v1__barcode_generate import BarcodeGenerateRequest, BarcodeGenerateResponse, BarcodeGenerateError
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Описывает модели бета-методов.
|
|
2
|
+
https://docs.ozon.com/api/seller/?#tag/BetaMethod
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"AnalyticsStocksRequest",
|
|
7
|
+
"AnalyticsStocksResponse",
|
|
8
|
+
"AnalyticsStocksItem",
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
from .v1__analytics_stocks import AnalyticsStocksResponse, AnalyticsStocksRequest, AnalyticsStocksItem
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Описывает модели методов раздела Обработка заказов FBS и rFBS.
|
|
2
|
+
https://docs.ozon.ru/api/seller/?__rr=1#tag/FBS
|
|
3
|
+
"""
|
|
4
|
+
__all__ = [
|
|
5
|
+
"PostingFBSAddressee",
|
|
6
|
+
"PostingFBSAnalyticsData",
|
|
7
|
+
"PostingFBSBarcodes",
|
|
8
|
+
"PostingFBSCancellation",
|
|
9
|
+
"PostingFBSCustomer",
|
|
10
|
+
"PostingFBSCustomerAddress",
|
|
11
|
+
"PostingFBSDeliveryMethod",
|
|
12
|
+
"PostingFBSFinancialData",
|
|
13
|
+
"PostingFBSFinancialDataProducts",
|
|
14
|
+
"PostingFBSLegalInfo",
|
|
15
|
+
"PostingFBSOptional",
|
|
16
|
+
"PostingFBSPosting",
|
|
17
|
+
"PostingFBSProducts",
|
|
18
|
+
"PostingFBSRequirements",
|
|
19
|
+
"PostingFBSTariffication",
|
|
20
|
+
"PostingFBSListRequestFilterLastChangedStatusDate",
|
|
21
|
+
"PostingFBSListFilterWith",
|
|
22
|
+
"PostingFBSListFilter",
|
|
23
|
+
"PostingFBSListRequest",
|
|
24
|
+
"PostingFBSListResult",
|
|
25
|
+
"PostingFBSListResponse",
|
|
26
|
+
"PostingFBSUnfulfilledListRequest",
|
|
27
|
+
"PostingFBSUnfulfilledListResponse",
|
|
28
|
+
"PostingFBSUnfulfilledListRequestFilterLastChangedStatusDate",
|
|
29
|
+
"PostingFBSUnfulfilledListFilterWith",
|
|
30
|
+
"PostingFBSUnfulfilledListFilter",
|
|
31
|
+
"PostingFBSUnfulfilledListResult",
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
from .entities import PostingFBSAddressee, PostingFBSAnalyticsData, PostingFBSBarcodes, PostingFBSCancellation, \
|
|
35
|
+
PostingFBSCustomer, PostingFBSCustomerAddress, PostingFBSDeliveryMethod, PostingFBSFinancialData, \
|
|
36
|
+
PostingFBSFinancialDataProducts, PostingFBSLegalInfo, PostingFBSOptional, PostingFBSPosting, PostingFBSProducts, \
|
|
37
|
+
PostingFBSRequirements, PostingFBSTariffication
|
|
38
|
+
from .v3__posting_fbs_list import PostingFBSListRequestFilterLastChangedStatusDate, PostingFBSListFilterWith, \
|
|
39
|
+
PostingFBSListFilter, PostingFBSListRequest, PostingFBSListResult, PostingFBSListResponse
|
|
40
|
+
from .v3__posting_fbs_unfulfilled_list import (
|
|
41
|
+
PostingFBSUnfulfilledListRequest,
|
|
42
|
+
PostingFBSUnfulfilledListResponse,
|
|
43
|
+
PostingFBSUnfulfilledListRequestFilterLastChangedStatusDate,
|
|
44
|
+
PostingFBSUnfulfilledListFilterWith,
|
|
45
|
+
PostingFBSUnfulfilledListFilter,
|
|
46
|
+
PostingFBSUnfulfilledListResult,
|
|
47
|
+
)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
__all__ = [
|
|
2
|
+
"PostingFBSAddressee",
|
|
3
|
+
"PostingFBSAnalyticsData",
|
|
4
|
+
"PostingFBSBarcodes",
|
|
5
|
+
"PostingFBSCancellation",
|
|
6
|
+
"PostingFBSCustomer",
|
|
7
|
+
"PostingFBSCustomerAddress",
|
|
8
|
+
"PostingFBSDeliveryMethod",
|
|
9
|
+
"PostingFBSFinancialData",
|
|
10
|
+
"PostingFBSFinancialDataProducts",
|
|
11
|
+
"PostingFBSLegalInfo",
|
|
12
|
+
"PostingFBSOptional",
|
|
13
|
+
"PostingFBSPosting",
|
|
14
|
+
"PostingFBSProducts",
|
|
15
|
+
"PostingFBSRequirements",
|
|
16
|
+
"PostingFBSTariffication",
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
from .posting__analytics_data import PostingFBSAnalyticsData
|
|
20
|
+
|
|
21
|
+
from .posting__barcodes import PostingFBSBarcodes
|
|
22
|
+
|
|
23
|
+
from .posting__cancellation import PostingFBSCancellation
|
|
24
|
+
|
|
25
|
+
from .posting__customer import PostingFBSCustomer
|
|
26
|
+
|
|
27
|
+
from .posting__customer_address import PostingFBSCustomerAddress
|
|
28
|
+
|
|
29
|
+
from .posting__delivery_method import PostingFBSDeliveryMethod
|
|
30
|
+
|
|
31
|
+
from .posting__financial_data import PostingFBSFinancialData
|
|
32
|
+
|
|
33
|
+
from .posting__financial_data_products import PostingFBSFinancialDataProducts
|
|
34
|
+
|
|
35
|
+
from .posting__legal_info import PostingFBSLegalInfo
|
|
36
|
+
|
|
37
|
+
from .posting__optional import PostingFBSOptional
|
|
38
|
+
|
|
39
|
+
from .posting__posting import PostingFBSPosting
|
|
40
|
+
|
|
41
|
+
from .posting__products import PostingFBSProducts
|
|
42
|
+
|
|
43
|
+
from .posting__requirements import PostingFBSRequirements
|
|
44
|
+
|
|
45
|
+
from .posting__tariffication import PostingFBSTariffication
|
|
46
|
+
|
|
47
|
+
from .posting__addressee import PostingFBSAddressee
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from ...base import BaseAddressee
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class PostingFBSAddressee(BaseAddressee):
|
|
5
|
+
"""Контактные данные получателя.
|
|
6
|
+
|
|
7
|
+
Attributes:
|
|
8
|
+
name (str | None): Имя покупателя
|
|
9
|
+
phone (str | None): Всегда возвращает пустую строку (для получения подменного номера метод posting_fbs_get())
|
|
10
|
+
"""
|
|
11
|
+
pass
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
from pydantic import Field, BaseModel
|
|
5
|
+
|
|
6
|
+
from ....common.enumerations.postings import PaymentTypeGroupName
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class PostingFBSAnalyticsData(BaseModel):
|
|
10
|
+
"""Данные аналитики.
|
|
11
|
+
|
|
12
|
+
Attributes:
|
|
13
|
+
city: Город доставки
|
|
14
|
+
delivery_date_begin: Дата и время начала доставки
|
|
15
|
+
delivery_date_end: Дата и время конца доставки
|
|
16
|
+
delivery_type: Способ доставки
|
|
17
|
+
is_legal: Признак юридического лица
|
|
18
|
+
is_premium: Наличие подписки Premium
|
|
19
|
+
payment_type_group_name: Способ оплаты
|
|
20
|
+
region: Регион доставки
|
|
21
|
+
tpl_provider: Служба доставки
|
|
22
|
+
tpl_provider_id: Идентификатор службы доставки
|
|
23
|
+
warehouse: Название склада отправки заказа
|
|
24
|
+
warehouse_id: Идентификатор склада
|
|
25
|
+
"""
|
|
26
|
+
city: Optional[str] = Field(
|
|
27
|
+
..., description="Город доставки. Только для отправлений rFBS и продавцов из СНГ."
|
|
28
|
+
)
|
|
29
|
+
delivery_date_begin: Optional[datetime.datetime] = Field(
|
|
30
|
+
None, description="Дата и время начала доставки."
|
|
31
|
+
)
|
|
32
|
+
delivery_date_end: Optional[datetime.datetime] = Field(
|
|
33
|
+
None, description="Дата и время конца доставки."
|
|
34
|
+
)
|
|
35
|
+
delivery_type: str = Field(
|
|
36
|
+
None, description="Способ доставки."
|
|
37
|
+
)
|
|
38
|
+
is_legal: bool = Field(
|
|
39
|
+
..., description="Признак, что получатель юридическое лицо."
|
|
40
|
+
)
|
|
41
|
+
is_premium: bool = Field(
|
|
42
|
+
..., description="Наличие подписки Premium."
|
|
43
|
+
)
|
|
44
|
+
payment_type_group_name: PaymentTypeGroupName | str = Field(
|
|
45
|
+
..., description="Способ оплаты."
|
|
46
|
+
)
|
|
47
|
+
region: Optional[str] = Field(
|
|
48
|
+
..., description="Регион доставки. Только для отправлений rFBS."
|
|
49
|
+
)
|
|
50
|
+
tpl_provider: str = Field(
|
|
51
|
+
..., description="Служба доставки."
|
|
52
|
+
)
|
|
53
|
+
tpl_provider_id: int = Field(
|
|
54
|
+
..., description="Идентификатор службы доставки."
|
|
55
|
+
)
|
|
56
|
+
warehouse: str = Field(
|
|
57
|
+
..., description="Название склада отправки заказа."
|
|
58
|
+
)
|
|
59
|
+
warehouse_id: int = Field(
|
|
60
|
+
..., description="Идентификатор склада."
|
|
61
|
+
)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from pydantic import BaseModel, Field
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class PostingFBSBarcodes(BaseModel):
|
|
5
|
+
"""Штрихкоды отправления.
|
|
6
|
+
|
|
7
|
+
Attributes:
|
|
8
|
+
lower_barcode: Нижний штрихкод на маркировке отправления
|
|
9
|
+
upper_barcode: Верхний штрихкод на маркировке отправления
|
|
10
|
+
"""
|
|
11
|
+
lower_barcode: str = Field(
|
|
12
|
+
..., description="Нижний штрихкод на маркировке отправления."
|
|
13
|
+
)
|
|
14
|
+
upper_barcode: str = Field(
|
|
15
|
+
..., description="Верхний штрихкод на маркировке отправления."
|
|
16
|
+
)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from pydantic import BaseModel, Field
|
|
2
|
+
|
|
3
|
+
from ....common.enumerations.postings import CancellationType
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class PostingFBSCancellation(BaseModel):
|
|
7
|
+
"""Информация об отмене.
|
|
8
|
+
|
|
9
|
+
Attributes:
|
|
10
|
+
affect_cancellation_rating: Влияние отмены на рейтинг продавца
|
|
11
|
+
cancel_reason: Причина отмены
|
|
12
|
+
cancel_reason_id: Идентификатор причины отмены отправления
|
|
13
|
+
cancellation_initiator: Инициатор отмены
|
|
14
|
+
cancellation_type: Тип отмены отправления
|
|
15
|
+
cancelled_after_ship: Признак отмены после сборки отправления
|
|
16
|
+
"""
|
|
17
|
+
affect_cancellation_rating: bool = Field(
|
|
18
|
+
..., description="Если отмена влияет на рейтинг продавца — true."
|
|
19
|
+
)
|
|
20
|
+
cancel_reason: str = Field(
|
|
21
|
+
..., description="Причина отмены."
|
|
22
|
+
)
|
|
23
|
+
cancel_reason_id: int = Field(
|
|
24
|
+
..., description="Идентификатор причины отмены отправления."
|
|
25
|
+
)
|
|
26
|
+
cancellation_initiator: str = Field(
|
|
27
|
+
..., description="Инициатор отмены."
|
|
28
|
+
)
|
|
29
|
+
cancellation_type: CancellationType = Field(
|
|
30
|
+
..., description="Тип отмены отправления."
|
|
31
|
+
)
|
|
32
|
+
cancelled_after_ship: bool = Field(
|
|
33
|
+
..., description="Если отмена произошла после сборки отправления — true."
|
|
34
|
+
)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from pydantic import Field
|
|
2
|
+
|
|
3
|
+
from ...base import BaseAddressee
|
|
4
|
+
from .posting__customer_address import PostingFBSCustomerAddress
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class PostingFBSCustomer(BaseAddressee):
|
|
8
|
+
"""Данные о покупателе.
|
|
9
|
+
|
|
10
|
+
Attributes:
|
|
11
|
+
address: Информация об адресе доставки
|
|
12
|
+
customer_id: Идентификатор покупателя
|
|
13
|
+
name: Имя покупателя
|
|
14
|
+
phone: Всегда возвращает пустую строку (получить подменный номер телефона posting_fbs_get())
|
|
15
|
+
"""
|
|
16
|
+
address: PostingFBSCustomerAddress = Field(
|
|
17
|
+
..., description="Информация об адресе доставки."
|
|
18
|
+
)
|
|
19
|
+
customer_id: int = Field(
|
|
20
|
+
..., description="Идентификатор покупателя."
|
|
21
|
+
)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import Field, BaseModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class PostingFBSCustomerAddress(BaseModel):
|
|
7
|
+
"""Информация об адресе доставки.
|
|
8
|
+
|
|
9
|
+
Attributes:
|
|
10
|
+
address_tail: Адрес в текстовом формате
|
|
11
|
+
city: Город доставки
|
|
12
|
+
comment: Комментарий к заказу
|
|
13
|
+
country: Страна доставки
|
|
14
|
+
district: Район доставки
|
|
15
|
+
latitude: Широта
|
|
16
|
+
longitude: Долгота
|
|
17
|
+
provider_pvz_code: Код пункта выдачи заказов 3PL провайдера
|
|
18
|
+
pvz_code: Код пункта выдачи заказов
|
|
19
|
+
region: Регион доставки
|
|
20
|
+
zip_code: Почтовый индекс получателя
|
|
21
|
+
"""
|
|
22
|
+
address_tail: Optional[str] = Field(
|
|
23
|
+
None, description="Адрес в текстовом формате."
|
|
24
|
+
)
|
|
25
|
+
city: Optional[str] = Field(
|
|
26
|
+
None, description="Город доставки."
|
|
27
|
+
)
|
|
28
|
+
comment: Optional[str] = Field(
|
|
29
|
+
None, description="Комментарий к заказу."
|
|
30
|
+
)
|
|
31
|
+
country: Optional[str] = Field(
|
|
32
|
+
None, description="Страна доставки."
|
|
33
|
+
)
|
|
34
|
+
district: Optional[str] = Field(
|
|
35
|
+
None, description="Район доставки."
|
|
36
|
+
)
|
|
37
|
+
latitude: Optional[float] = Field(
|
|
38
|
+
None, description="Широта."
|
|
39
|
+
)
|
|
40
|
+
longitude: Optional[float] = Field(
|
|
41
|
+
None, description="Долгота."
|
|
42
|
+
)
|
|
43
|
+
provider_pvz_code: Optional[str] = Field(
|
|
44
|
+
None, description="Код пункта выдачи заказов 3PL провайдера."
|
|
45
|
+
)
|
|
46
|
+
pvz_code: Optional[int] = Field(
|
|
47
|
+
None, description="Код пункта выдачи заказов."
|
|
48
|
+
)
|
|
49
|
+
region: Optional[str] = Field(
|
|
50
|
+
None, description="Регион доставки."
|
|
51
|
+
)
|
|
52
|
+
zip_code: Optional[str] = Field(
|
|
53
|
+
None, description="Почтовый индекс получателя."
|
|
54
|
+
)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from pydantic import Field
|
|
2
|
+
|
|
3
|
+
from ...base import BaseDeliveryMethod
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class PostingFBSDeliveryMethod(BaseDeliveryMethod):
|
|
7
|
+
"""Метод доставки.
|
|
8
|
+
|
|
9
|
+
Attributes:
|
|
10
|
+
id: Идентификатор способа доставки
|
|
11
|
+
name: Название способа доставки
|
|
12
|
+
tpl_provider: Служба доставки
|
|
13
|
+
tpl_provider_id: Идентификатор службы доставки
|
|
14
|
+
warehouse: Название склада
|
|
15
|
+
warehouse_id: Идентификатор склада
|
|
16
|
+
"""
|
|
17
|
+
tpl_provider: str = Field(
|
|
18
|
+
..., description="Служба доставки."
|
|
19
|
+
)
|
|
20
|
+
tpl_provider_id: int = Field(
|
|
21
|
+
..., description="Идентификатор службы доставки."
|
|
22
|
+
)
|
|
23
|
+
warehouse: str = Field(
|
|
24
|
+
..., description="Название склада."
|
|
25
|
+
)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from pydantic import Field, BaseModel
|
|
2
|
+
|
|
3
|
+
from .posting__financial_data_products import PostingFBSFinancialDataProducts
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class PostingFBSFinancialData(BaseModel):
|
|
7
|
+
"""Данные о стоимости товара, размере скидки, выплате и комиссии.
|
|
8
|
+
|
|
9
|
+
Attributes:
|
|
10
|
+
cluster_from: Код региона отправки заказа
|
|
11
|
+
cluster_to: Код региона доставки заказа
|
|
12
|
+
products: Список товаров в заказе
|
|
13
|
+
"""
|
|
14
|
+
cluster_from: str = Field(
|
|
15
|
+
..., description="Код региона, откуда отправляется заказ."
|
|
16
|
+
)
|
|
17
|
+
cluster_to: str = Field(
|
|
18
|
+
..., description="Код региона, куда доставляется заказ."
|
|
19
|
+
)
|
|
20
|
+
products: list[PostingFBSFinancialDataProducts] = Field(
|
|
21
|
+
..., description="Список товаров в заказе."
|
|
22
|
+
)
|