ozonapi-async 0.7.4__tar.gz → 0.9.0__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.7.4 → ozonapi_async-0.9.0}/PKG-INFO +29 -24
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/pyproject.toml +3 -2
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/readme.md +27 -23
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/__init__.py +1 -1
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/methods/fbs.py +137 -2
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/methods/prices_and_stocks.py +1 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/methods/products.py +98 -2
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/__init__.py +10 -0
- ozonapi_async-0.9.0/src/ozonapi/seller/schemas/fbs/v1__posting_fbs_restrictions.py +53 -0
- ozonapi_async-0.9.0/src/ozonapi/seller/schemas/fbs/v2__posting_fbs_product_country_list.py +45 -0
- ozonapi_async-0.9.0/src/ozonapi/seller/schemas/fbs/v2__posting_fbs_product_country_set.py +36 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_unfulfilled_list.py +2 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/prices_and_stocks/v1__product_import_prices.py +4 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/__init__.py +5 -0
- ozonapi_async-0.9.0/src/ozonapi/seller/schemas/products/v1__product_pictures_import.py +85 -0
- ozonapi_async-0.9.0/src/ozonapi/seller/schemas/products/v4__product_info_limit.py +76 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi_async.egg-info/PKG-INFO +29 -24
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi_async.egg-info/SOURCES.txt +5 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi_async.egg-info/requires.txt +1 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/LICENSE +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/setup.cfg +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/__init__.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/common/__init__.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/common/enumerations/__init__.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/common/enumerations/delivery.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/common/enumerations/localization.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/common/enumerations/postings.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/common/enumerations/prices.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/common/enumerations/products.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/common/enumerations/requests.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/common/enumerations/warehouses.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/core/__init__.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/core/config.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/core/core.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/core/exceptions.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/core/method_rate_limiter.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/core/rate_limiter.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/core/sessions.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/methods/__init__.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/methods/attributes_and_characteristics.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/methods/barcodes.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/methods/beta.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/methods/warehouses.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/__init__.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/__init__.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/base.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute_values.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute_values_search.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_tree.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/barcodes/__init__.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/barcodes/v1__barcode_add.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/barcodes/v1__barcode_generate.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/base.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/beta/__init__.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/beta/v1__analytics_stocks.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/__init__.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__addressee.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__analytics_data.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__barcodes.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__cancellation.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__customer.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__customer_address.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__delivery_method.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__filter_with.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__financial_data.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__financial_data_products.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__legal_info.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__optional.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__posting.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__product.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__requirements.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/entities/posting__tariffication.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/v2__fbs_posting_delivering.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/v2__posting_fbs_get_by_barcode.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/v2__posting_fbs_product_change.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_get.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_list.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/fbs/v3__posting_multiboxqty_set.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/mixins.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/prices_and_stocks/__init__.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/prices_and_stocks/base.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/prices_and_stocks/v1__product_info_stocks_by_warehouse_fbs.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/prices_and_stocks/v2__products_stocks.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/prices_and_stocks/v4__product_info_stocks.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/prices_and_stocks/v5__product_info_prices.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/base.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v1__product_archive.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v1__product_attributes_update.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v1__product_import_by_sku.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v1__product_import_info.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v1__product_info_subscription.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v1__product_rating_by_sku.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v1__product_related_sku_get.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v1__product_unarchive.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v1__product_update_offer_id.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v2__product_pictures_info.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v2__products_delete.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v3__product_import.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v3__product_info_list.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v3__product_list.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/products/v4__product_info_attributes.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/warehouses/__init__.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/warehouses/v1__delivery_method_list.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi/seller/schemas/warehouses/v1__warehouse_list.py +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi_async.egg-info/dependency_links.txt +0 -0
- {ozonapi_async-0.7.4 → ozonapi_async-0.9.0}/src/ozonapi_async.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ozonapi-async
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: Асинхронный клиент для работы с API маркетплейса Ozon
|
|
5
5
|
Author: Alexander Ulianov
|
|
6
6
|
License: MIT
|
|
@@ -30,6 +30,7 @@ Requires-Dist: tenacity<10.0.0,>=9.1.2
|
|
|
30
30
|
Requires-Dist: aiolimiter<2.0.0,>=1.2.1
|
|
31
31
|
Requires-Dist: pydantic<3.0.0,>=2.12.3
|
|
32
32
|
Requires-Dist: pydantic-settings<3.0.0,>=2.11.0
|
|
33
|
+
Requires-Dist: async-lru<3.0.0,>=2.0.5
|
|
33
34
|
Provides-Extra: test
|
|
34
35
|
Requires-Dist: pytest<9.0.0,>=8.4.2; extra == "test"
|
|
35
36
|
Requires-Dist: pytest-cov<8.0.0,>=7.0.0; extra == "test"
|
|
@@ -62,12 +63,13 @@ Dynamic: license-file
|
|
|
62
63
|
- **👍 Простое использование** - быстрое развертывание и интеграция с вашим проектом
|
|
63
64
|
- **📝 Отличная документация** - все методы содержат подробное описание и примеры
|
|
64
65
|
- **👥 Мульти-аккаунт** - одновременная работа с несколькими кабинетами продавца Ozon
|
|
65
|
-
-
|
|
66
|
+
- **⏱️ Умное ограничение запросов** - автоматическое соблюдение лимитов API Ozon
|
|
66
67
|
- **➿ Гибкая настройка лимитов** - кастомные лимиты запросов для методов
|
|
67
|
-
-
|
|
68
|
+
- **⏳ Кеширование ответов** - для методов, возвращающих статичные данные
|
|
68
69
|
- **🔄 Автоповторы** - интеллектуальные повторные попытки запросов при сбоях
|
|
70
|
+
- **🛡️ Валидация данных** - строгая типизация с Pydantic v2
|
|
69
71
|
- **📊 Детальное логирование** - асинхронная трассировка операций
|
|
70
|
-
- **🎪 Гибкая конфигурация** - настройка через классы, переменные окружения или .env
|
|
72
|
+
- **🎪 Гибкая конфигурация** - настройка через классы, переменные окружения или .env файл
|
|
71
73
|
- **🧹 Очистка ресурсов** - автоматический контроль посредством контекстных менеджеров
|
|
72
74
|
- **🧪 Полное покрытие тестами** - вся основная функциональность
|
|
73
75
|
- **✔️ Проверено в production** - тестируется на боевых кабинетах продавцов Ozon
|
|
@@ -260,7 +262,7 @@ pytest --cov=ozonapi --cov-report=html
|
|
|
260
262
|
| ✓ | `/v1/description-category/attribute/values/search` | Поиск по справочным значениям характеристики | `description_category_attribute_values_search()` |
|
|
261
263
|
</details>
|
|
262
264
|
<details>
|
|
263
|
-
<summary>Загрузка и обновление товаров (
|
|
265
|
+
<summary>Загрузка и обновление товаров (18)</summary>
|
|
264
266
|
|
|
265
267
|
| ✓ | Адрес метода Ozon | Описание метода | Python-метод |
|
|
266
268
|
|---|---|---|---|
|
|
@@ -268,13 +270,13 @@ pytest --cov=ozonapi --cov-report=html
|
|
|
268
270
|
| ✓ | `/v1/product/import/info` | Узнать статус добавления или обновления товара | `product_import_info()` |
|
|
269
271
|
| ✓ | `/v1/product/import-by-sku` | Создать товар по SKU | `product_import_by_sku()` |
|
|
270
272
|
| ✓ | `/v1/product/attributes/update` | Обновить характеристики товара | `product_attributes_update()` |
|
|
271
|
-
|
|
|
273
|
+
| ✓ | `/v1/product/pictures/import` | Загрузить или обновить изображения товара | `product_pictures_import()` |
|
|
272
274
|
| ✓ | `/v3/product/list` | Список товаров | `product_list()` |
|
|
273
275
|
| ✓ | `/v1/product/rating-by-sku` | Получить контент-рейтинг товаров по SKU | `product_rating_by_sku()` |
|
|
274
276
|
| ✓ | `/v3/product/info/list` | Получить информацию о товарах по идентификаторам | `product_info_list()` |
|
|
275
277
|
| ✓ | `/v4/product/info/attributes` | Получить описание характеристик товара | `product_info_attributes()` |
|
|
276
278
|
| ✓ | `/v1/product/info/description` | Получить описание товара | `product_info_description()` |
|
|
277
|
-
|
|
|
279
|
+
| ✓ | `/v4/product/info/limit` | Лимиты на ассортимент, создание и обновление товаров | `product_info_limit()` |
|
|
278
280
|
| ✓ | `/v1/product/update/offer-id` | Изменить артикулы товаров из системы продавца | `product_update_offer_id()` |
|
|
279
281
|
| ✓ | `/v1/product/archive` | Перенести товар в архив | `product_archive()` |
|
|
280
282
|
| ✓ | `/v1/product/unarchive` | Вернуть товар из архива | `product_unarchive()` |
|
|
@@ -374,7 +376,7 @@ pytest --cov=ozonapi --cov-report=html
|
|
|
374
376
|
| ✓ | `/v1/delivery-method/list` | Список методов доставки склада | `delivery_method_list()` |
|
|
375
377
|
</details>
|
|
376
378
|
<details>
|
|
377
|
-
<summary>Обработка заказов FBS и rFBS (
|
|
379
|
+
<summary>Обработка заказов FBS и rFBS (9)</summary>
|
|
378
380
|
|
|
379
381
|
| ✓ | Адрес метода Ozon | Описание метода | Python-метод |
|
|
380
382
|
|---|---|---|---|
|
|
@@ -384,9 +386,9 @@ pytest --cov=ozonapi --cov-report=html
|
|
|
384
386
|
| ✓ | `/v2/posting/fbs/get-by-barcode` | Получить информацию об отправлении по штрихкоду | `posting_fbs_get_by_barcode()` |
|
|
385
387
|
| ✓ | `/v3/posting/multiboxqty/set` | Указать количество коробок для многокоробочных отправлений | `posting_multiboxqty_set()` |
|
|
386
388
|
| ✓ | `/v2/posting/fbs/product/change` | Добавить вес для весовых товаров в отправлении | `posting_fbs_product_change()` |
|
|
387
|
-
|
|
|
388
|
-
|
|
|
389
|
-
|
|
|
389
|
+
| ✓ | `/v2/posting/fbs/product/country/list` | Список доступных стран-изготовителей | `posting_fbs_product_country_list()` |
|
|
390
|
+
| ✓ | `/v2/posting/fbs/product/country/set` | Добавить информацию о стране-изготовителе товара | `posting_fbs_product_country_set()` |
|
|
391
|
+
| ✓ | `/v1/posting/fbs/restrictions` | Получить ограничения пункта приёма | `posting_fbs_restrictions()` |
|
|
390
392
|
| ☐ | `/v2/posting/fbs/package-label` | Напечатать этикетку | `posting_fbs_package_label()` |
|
|
391
393
|
| ☐ | `/v2/posting/fbs/package-label/create` | Создать задание на формирование этикеток | `posting_fbs_package_label_create()` |
|
|
392
394
|
| ☐ | `/v1/posting/fbs/package-label/get` | Получить файл с этикетками | `posting_fbs_package_label_get()` |
|
|
@@ -628,20 +630,21 @@ pytest --cov=ozonapi --cov-report=html
|
|
|
628
630
|
<details>
|
|
629
631
|
<summary>Прочие методы (1)</summary>
|
|
630
632
|
|
|
631
|
-
| ✓ | Адрес метода Ozon | Описание метода
|
|
632
|
-
|
|
633
|
-
| ☐ | `/v1/analytics/manage/stocks` | Управление остатками
|
|
634
|
-
| ✓ | `/v1/analytics/stocks` | Получить аналитику по остаткам
|
|
635
|
-
| ☐ | `/v1/analytics/average-delivery-time` | Получить аналитику по среднему времени доставки
|
|
633
|
+
| ✓ | Адрес метода Ozon | Описание метода | Python-метод |
|
|
634
|
+
|---|---|-----------------------------------------------------------|---------------------------------------------|
|
|
635
|
+
| ☐ | `/v1/analytics/manage/stocks` | Управление остатками | `analytics_manage_stocks()` |
|
|
636
|
+
| ✓ | `/v1/analytics/stocks` | Получить аналитику по остаткам | `analytics_stocks()` |
|
|
637
|
+
| ☐ | `/v1/analytics/average-delivery-time` | Получить аналитику по среднему времени доставки | `analytics_average_delivery_time()` |
|
|
636
638
|
| ☐ | `/v1/analytics/average-delivery-time/details` | Получить детальную аналитику по среднему времени доставки | `analytics_average_delivery_time_details()` |
|
|
637
|
-
| ☐ | `/v1/analytics/average-delivery-time/summary` | Получить общую аналитику по среднему времени доставки
|
|
638
|
-
| ☐ | `/v1/product/info/wrong-volume` | Список товаров с некорректными ОВХ
|
|
639
|
-
| ☐ | `/v1/removal/from-supply/list` | Отчёт по вывозу и утилизации с поставки FBO
|
|
640
|
-
| ☐ | `/v1/removal/from-stock/list` | Отчёт по вывозу и утилизации со стока FBO
|
|
641
|
-
| ☐ | `/
|
|
642
|
-
| ☐ | `/v3/supply-order/
|
|
643
|
-
| ☐ | `/
|
|
644
|
-
| ☐ | `/v1/
|
|
639
|
+
| ☐ | `/v1/analytics/average-delivery-time/summary` | Получить общую аналитику по среднему времени доставки | `analytics_average_delivery_time_summary()` |
|
|
640
|
+
| ☐ | `/v1/product/info/wrong-volume` | Список товаров с некорректными ОВХ | `product_info_wrong_volume()` |
|
|
641
|
+
| ☐ | `/v1/removal/from-supply/list` | Отчёт по вывозу и утилизации с поставки FBO | `removal_from_supply_list()` |
|
|
642
|
+
| ☐ | `/v1/removal/from-stock/list` | Отчёт по вывозу и утилизации со стока FBO | `removal_from_stock_list()` |
|
|
643
|
+
| ☐ | `/v1/report/marked-products-sales/create` | Отчёт по продажам товаров с маркировкой | `report_marked_products_sales_create()` |
|
|
644
|
+
| ☐ | `/v3/supply-order/list` | Список заявок на поставку на склад Ozon | `supply_order_list()` |
|
|
645
|
+
| ☐ | `/v3/supply-order/get` | Информация о заявке на поставку | `supply_order_get()` |
|
|
646
|
+
| ☐ | `/v1/supply-order/content/update/validation` | Проверить новый товарный состав | `supply_order_content_update_validation()` |
|
|
647
|
+
| ☐ | `/v1/product/info/warehouse/stocks` | Получить информацию по остаткам на складе FBS и rFBS | `product_info_warehouse_stocks()` |
|
|
645
648
|
</details>
|
|
646
649
|
<details>
|
|
647
650
|
<summary>Работа с цифровыми товарами</summary>
|
|
@@ -740,6 +743,8 @@ pytest --cov=ozonapi --cov-report=html
|
|
|
740
743
|
| ☐ | `/v1/posting/cancel/status` | Статус отмены постинга из заказа | `posting_cancel_status()` |
|
|
741
744
|
</details>
|
|
742
745
|
|
|
746
|
+
---
|
|
747
|
+
|
|
743
748
|
[MIT License](LICENSE)
|
|
744
749
|
|
|
745
750
|
---
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ozonapi-async"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.9.0"
|
|
8
8
|
description = "Асинхронный клиент для работы с API маркетплейса Ozon"
|
|
9
9
|
readme = "readme.md"
|
|
10
10
|
keywords = ["ozon", "api", "async", "ecommerce", "seller", "client"]
|
|
@@ -28,7 +28,8 @@ dependencies = [
|
|
|
28
28
|
"tenacity>=9.1.2,<10.0.0",
|
|
29
29
|
"aiolimiter>=1.2.1,<2.0.0",
|
|
30
30
|
"pydantic>=2.12.3,<3.0.0",
|
|
31
|
-
"pydantic-settings>=2.11.0,<3.0.0"
|
|
31
|
+
"pydantic-settings>=2.11.0,<3.0.0",
|
|
32
|
+
"async-lru (>=2.0.5,<3.0.0)"
|
|
32
33
|
]
|
|
33
34
|
|
|
34
35
|
[[project.authors]]
|
|
@@ -20,12 +20,13 @@
|
|
|
20
20
|
- **👍 Простое использование** - быстрое развертывание и интеграция с вашим проектом
|
|
21
21
|
- **📝 Отличная документация** - все методы содержат подробное описание и примеры
|
|
22
22
|
- **👥 Мульти-аккаунт** - одновременная работа с несколькими кабинетами продавца Ozon
|
|
23
|
-
-
|
|
23
|
+
- **⏱️ Умное ограничение запросов** - автоматическое соблюдение лимитов API Ozon
|
|
24
24
|
- **➿ Гибкая настройка лимитов** - кастомные лимиты запросов для методов
|
|
25
|
-
-
|
|
25
|
+
- **⏳ Кеширование ответов** - для методов, возвращающих статичные данные
|
|
26
26
|
- **🔄 Автоповторы** - интеллектуальные повторные попытки запросов при сбоях
|
|
27
|
+
- **🛡️ Валидация данных** - строгая типизация с Pydantic v2
|
|
27
28
|
- **📊 Детальное логирование** - асинхронная трассировка операций
|
|
28
|
-
- **🎪 Гибкая конфигурация** - настройка через классы, переменные окружения или .env
|
|
29
|
+
- **🎪 Гибкая конфигурация** - настройка через классы, переменные окружения или .env файл
|
|
29
30
|
- **🧹 Очистка ресурсов** - автоматический контроль посредством контекстных менеджеров
|
|
30
31
|
- **🧪 Полное покрытие тестами** - вся основная функциональность
|
|
31
32
|
- **✔️ Проверено в production** - тестируется на боевых кабинетах продавцов Ozon
|
|
@@ -218,7 +219,7 @@ pytest --cov=ozonapi --cov-report=html
|
|
|
218
219
|
| ✓ | `/v1/description-category/attribute/values/search` | Поиск по справочным значениям характеристики | `description_category_attribute_values_search()` |
|
|
219
220
|
</details>
|
|
220
221
|
<details>
|
|
221
|
-
<summary>Загрузка и обновление товаров (
|
|
222
|
+
<summary>Загрузка и обновление товаров (18)</summary>
|
|
222
223
|
|
|
223
224
|
| ✓ | Адрес метода Ozon | Описание метода | Python-метод |
|
|
224
225
|
|---|---|---|---|
|
|
@@ -226,13 +227,13 @@ pytest --cov=ozonapi --cov-report=html
|
|
|
226
227
|
| ✓ | `/v1/product/import/info` | Узнать статус добавления или обновления товара | `product_import_info()` |
|
|
227
228
|
| ✓ | `/v1/product/import-by-sku` | Создать товар по SKU | `product_import_by_sku()` |
|
|
228
229
|
| ✓ | `/v1/product/attributes/update` | Обновить характеристики товара | `product_attributes_update()` |
|
|
229
|
-
|
|
|
230
|
+
| ✓ | `/v1/product/pictures/import` | Загрузить или обновить изображения товара | `product_pictures_import()` |
|
|
230
231
|
| ✓ | `/v3/product/list` | Список товаров | `product_list()` |
|
|
231
232
|
| ✓ | `/v1/product/rating-by-sku` | Получить контент-рейтинг товаров по SKU | `product_rating_by_sku()` |
|
|
232
233
|
| ✓ | `/v3/product/info/list` | Получить информацию о товарах по идентификаторам | `product_info_list()` |
|
|
233
234
|
| ✓ | `/v4/product/info/attributes` | Получить описание характеристик товара | `product_info_attributes()` |
|
|
234
235
|
| ✓ | `/v1/product/info/description` | Получить описание товара | `product_info_description()` |
|
|
235
|
-
|
|
|
236
|
+
| ✓ | `/v4/product/info/limit` | Лимиты на ассортимент, создание и обновление товаров | `product_info_limit()` |
|
|
236
237
|
| ✓ | `/v1/product/update/offer-id` | Изменить артикулы товаров из системы продавца | `product_update_offer_id()` |
|
|
237
238
|
| ✓ | `/v1/product/archive` | Перенести товар в архив | `product_archive()` |
|
|
238
239
|
| ✓ | `/v1/product/unarchive` | Вернуть товар из архива | `product_unarchive()` |
|
|
@@ -332,7 +333,7 @@ pytest --cov=ozonapi --cov-report=html
|
|
|
332
333
|
| ✓ | `/v1/delivery-method/list` | Список методов доставки склада | `delivery_method_list()` |
|
|
333
334
|
</details>
|
|
334
335
|
<details>
|
|
335
|
-
<summary>Обработка заказов FBS и rFBS (
|
|
336
|
+
<summary>Обработка заказов FBS и rFBS (9)</summary>
|
|
336
337
|
|
|
337
338
|
| ✓ | Адрес метода Ozon | Описание метода | Python-метод |
|
|
338
339
|
|---|---|---|---|
|
|
@@ -342,9 +343,9 @@ pytest --cov=ozonapi --cov-report=html
|
|
|
342
343
|
| ✓ | `/v2/posting/fbs/get-by-barcode` | Получить информацию об отправлении по штрихкоду | `posting_fbs_get_by_barcode()` |
|
|
343
344
|
| ✓ | `/v3/posting/multiboxqty/set` | Указать количество коробок для многокоробочных отправлений | `posting_multiboxqty_set()` |
|
|
344
345
|
| ✓ | `/v2/posting/fbs/product/change` | Добавить вес для весовых товаров в отправлении | `posting_fbs_product_change()` |
|
|
345
|
-
|
|
|
346
|
-
|
|
|
347
|
-
|
|
|
346
|
+
| ✓ | `/v2/posting/fbs/product/country/list` | Список доступных стран-изготовителей | `posting_fbs_product_country_list()` |
|
|
347
|
+
| ✓ | `/v2/posting/fbs/product/country/set` | Добавить информацию о стране-изготовителе товара | `posting_fbs_product_country_set()` |
|
|
348
|
+
| ✓ | `/v1/posting/fbs/restrictions` | Получить ограничения пункта приёма | `posting_fbs_restrictions()` |
|
|
348
349
|
| ☐ | `/v2/posting/fbs/package-label` | Напечатать этикетку | `posting_fbs_package_label()` |
|
|
349
350
|
| ☐ | `/v2/posting/fbs/package-label/create` | Создать задание на формирование этикеток | `posting_fbs_package_label_create()` |
|
|
350
351
|
| ☐ | `/v1/posting/fbs/package-label/get` | Получить файл с этикетками | `posting_fbs_package_label_get()` |
|
|
@@ -586,20 +587,21 @@ pytest --cov=ozonapi --cov-report=html
|
|
|
586
587
|
<details>
|
|
587
588
|
<summary>Прочие методы (1)</summary>
|
|
588
589
|
|
|
589
|
-
| ✓ | Адрес метода Ozon | Описание метода
|
|
590
|
-
|
|
591
|
-
| ☐ | `/v1/analytics/manage/stocks` | Управление остатками
|
|
592
|
-
| ✓ | `/v1/analytics/stocks` | Получить аналитику по остаткам
|
|
593
|
-
| ☐ | `/v1/analytics/average-delivery-time` | Получить аналитику по среднему времени доставки
|
|
590
|
+
| ✓ | Адрес метода Ozon | Описание метода | Python-метод |
|
|
591
|
+
|---|---|-----------------------------------------------------------|---------------------------------------------|
|
|
592
|
+
| ☐ | `/v1/analytics/manage/stocks` | Управление остатками | `analytics_manage_stocks()` |
|
|
593
|
+
| ✓ | `/v1/analytics/stocks` | Получить аналитику по остаткам | `analytics_stocks()` |
|
|
594
|
+
| ☐ | `/v1/analytics/average-delivery-time` | Получить аналитику по среднему времени доставки | `analytics_average_delivery_time()` |
|
|
594
595
|
| ☐ | `/v1/analytics/average-delivery-time/details` | Получить детальную аналитику по среднему времени доставки | `analytics_average_delivery_time_details()` |
|
|
595
|
-
| ☐ | `/v1/analytics/average-delivery-time/summary` | Получить общую аналитику по среднему времени доставки
|
|
596
|
-
| ☐ | `/v1/product/info/wrong-volume` | Список товаров с некорректными ОВХ
|
|
597
|
-
| ☐ | `/v1/removal/from-supply/list` | Отчёт по вывозу и утилизации с поставки FBO
|
|
598
|
-
| ☐ | `/v1/removal/from-stock/list` | Отчёт по вывозу и утилизации со стока FBO
|
|
599
|
-
| ☐ | `/
|
|
600
|
-
| ☐ | `/v3/supply-order/
|
|
601
|
-
| ☐ | `/
|
|
602
|
-
| ☐ | `/v1/
|
|
596
|
+
| ☐ | `/v1/analytics/average-delivery-time/summary` | Получить общую аналитику по среднему времени доставки | `analytics_average_delivery_time_summary()` |
|
|
597
|
+
| ☐ | `/v1/product/info/wrong-volume` | Список товаров с некорректными ОВХ | `product_info_wrong_volume()` |
|
|
598
|
+
| ☐ | `/v1/removal/from-supply/list` | Отчёт по вывозу и утилизации с поставки FBO | `removal_from_supply_list()` |
|
|
599
|
+
| ☐ | `/v1/removal/from-stock/list` | Отчёт по вывозу и утилизации со стока FBO | `removal_from_stock_list()` |
|
|
600
|
+
| ☐ | `/v1/report/marked-products-sales/create` | Отчёт по продажам товаров с маркировкой | `report_marked_products_sales_create()` |
|
|
601
|
+
| ☐ | `/v3/supply-order/list` | Список заявок на поставку на склад Ozon | `supply_order_list()` |
|
|
602
|
+
| ☐ | `/v3/supply-order/get` | Информация о заявке на поставку | `supply_order_get()` |
|
|
603
|
+
| ☐ | `/v1/supply-order/content/update/validation` | Проверить новый товарный состав | `supply_order_content_update_validation()` |
|
|
604
|
+
| ☐ | `/v1/product/info/warehouse/stocks` | Получить информацию по остаткам на складе FBS и rFBS | `product_info_warehouse_stocks()` |
|
|
603
605
|
</details>
|
|
604
606
|
<details>
|
|
605
607
|
<summary>Работа с цифровыми товарами</summary>
|
|
@@ -698,6 +700,8 @@ pytest --cov=ozonapi --cov-report=html
|
|
|
698
700
|
| ☐ | `/v1/posting/cancel/status` | Статус отмены постинга из заказа | `posting_cancel_status()` |
|
|
699
701
|
</details>
|
|
700
702
|
|
|
703
|
+
---
|
|
704
|
+
|
|
701
705
|
[MIT License](LICENSE)
|
|
702
706
|
|
|
703
707
|
---
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Асинхронный интерфейс для взаимодействия с API маркетплейса Ozon.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
__version__ = "0.
|
|
5
|
+
__version__ = "0.9.0"
|
|
6
6
|
__author__ = "Alexander Ulianov"
|
|
7
7
|
__repository__ = "https://github.com/a-ulianov/OzonAPI"
|
|
8
8
|
__docs__ = "https://github.com/a-ulianov/OzonAPI#readme"
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
from async_lru import alru_cache
|
|
2
|
+
|
|
1
3
|
from ..core import APIManager, method_rate_limit
|
|
4
|
+
from ..core.exceptions import APINotFoundError
|
|
2
5
|
from ..schemas.fbs import PostingFBSUnfulfilledListRequest, PostingFBSUnfulfilledListResponse, PostingFBSListResponse, \
|
|
3
6
|
PostingFBSListRequest, PostingFBSGetRequest, PostingFBSGetResponse, PostingFBSGetByBarcodeResponse, \
|
|
4
7
|
PostingFBSGetByBarcodeRequest, PostingFBSMultiBoxQtySetResponse, PostingFBSMultiBoxQtySetRequest, \
|
|
5
|
-
PostingFBSProductChangeRequest, PostingFBSProductChangeResponse
|
|
8
|
+
PostingFBSProductChangeRequest, PostingFBSProductChangeResponse, PostingFBSProductCountryListResponse, \
|
|
9
|
+
PostingFBSProductCountryListRequest, PostingFBSProductCountrySetRequest, PostingFBSProductCountrySetResponse, \
|
|
10
|
+
PostingFBSRestrictionsResponse, PostingFBSRestrictionsRequest
|
|
6
11
|
|
|
7
12
|
|
|
8
13
|
class SellerFBSAPI(APIManager):
|
|
@@ -339,4 +344,134 @@ class SellerFBSAPI(APIManager):
|
|
|
339
344
|
endpoint="posting/fbs/product/change",
|
|
340
345
|
json=request.model_dump(by_alias=True)
|
|
341
346
|
)
|
|
342
|
-
return PostingFBSProductChangeResponse(**response)
|
|
347
|
+
return PostingFBSProductChangeResponse(**response)
|
|
348
|
+
|
|
349
|
+
@alru_cache(ttl=86400)
|
|
350
|
+
async def posting_fbs_product_country_list(
|
|
351
|
+
self: "SellerFBSAPI",
|
|
352
|
+
request: PostingFBSProductCountryListRequest = PostingFBSProductCountryListRequest.model_construct()
|
|
353
|
+
) -> PostingFBSProductCountryListResponse:
|
|
354
|
+
"""Метод для получения списка доступных стран-изготовителей и их ISO кодов.
|
|
355
|
+
|
|
356
|
+
Notes:
|
|
357
|
+
• Метод возвращает полный список стран-изготовителей, доступных для указания в карточках товаров.
|
|
358
|
+
• Для фильтрации результатов можно использовать параметр `name_search` - поисковая строка по названию страны.
|
|
359
|
+
• Если параметр `name_search` не указан или пустой, возвращается полный список всех доступных стран.
|
|
360
|
+
• Поиск осуществляется по частичному совпадению с названием страны на русском языке.
|
|
361
|
+
• Регистр букв в поисковой строке не имеет значения.
|
|
362
|
+
• ISO код страны возвращается в формате двухбуквенного кода (Alpha-2) согласно стандарту ISO 3166-1.
|
|
363
|
+
|
|
364
|
+
References:
|
|
365
|
+
https://docs.ozon.ru/api/seller/?__rr=1#operation/PostingAPI_ListCountryProductFbsPostingV2
|
|
366
|
+
|
|
367
|
+
Args:
|
|
368
|
+
request: Запрос на получение списка стран-изготовителей по схеме `PostingFBSProductCountryListRequest`
|
|
369
|
+
|
|
370
|
+
Returns:
|
|
371
|
+
Список доступных стран-изготовителей с их ISO кодами по схеме `PostingFBSProductCountryListResponse`
|
|
372
|
+
|
|
373
|
+
Examples:
|
|
374
|
+
Базовое применение (получение полного списка стран):
|
|
375
|
+
async with SellerAPI(client_id, api_key) as api:
|
|
376
|
+
result = await api.posting_fbs_product_country_list(
|
|
377
|
+
PostingFBSProductCountryListRequest()
|
|
378
|
+
)
|
|
379
|
+
|
|
380
|
+
Пример с фильтрацией по названию страны (частичное совпадение):
|
|
381
|
+
async with SellerAPI(client_id, api_key) as api:
|
|
382
|
+
result = await api.posting_fbs_product_country_list(
|
|
383
|
+
PostingFBSProductCountryListRequest(
|
|
384
|
+
name_search="тУрЦ"
|
|
385
|
+
)
|
|
386
|
+
)
|
|
387
|
+
"""
|
|
388
|
+
try:
|
|
389
|
+
response = await self._request(
|
|
390
|
+
method="post",
|
|
391
|
+
api_version="v2",
|
|
392
|
+
endpoint="posting/fbs/product/country/list",
|
|
393
|
+
json=request.model_dump()
|
|
394
|
+
)
|
|
395
|
+
except APINotFoundError:
|
|
396
|
+
return PostingFBSProductCountryListResponse.model_construct()
|
|
397
|
+
return PostingFBSProductCountryListResponse(**response)
|
|
398
|
+
|
|
399
|
+
async def posting_fbs_product_country_set(
|
|
400
|
+
self: "SellerFBSAPI",
|
|
401
|
+
request: PostingFBSProductCountrySetRequest
|
|
402
|
+
) -> PostingFBSProductCountrySetResponse:
|
|
403
|
+
"""Метод для добавления информации о стране-изготовителе товара в отправлении FBS.
|
|
404
|
+
|
|
405
|
+
Notes:
|
|
406
|
+
• Метод используется для добавления атрибута «Страна-изготовитель» к товару в отправлении, если он не был указан ранее.
|
|
407
|
+
• Страна-изготовитель указывается в формате двухбуквенного кода стандарта ISO 3166-1 (Alpha-2).
|
|
408
|
+
• Список доступных стран-изготовителей и их ISO кодов можно получить с помощью метода posting_fbs_product_country_list().
|
|
409
|
+
• После успешного выполнения метода система возвращает признак необходимости передачи номера ГТД (грузовой таможенной декларации).
|
|
410
|
+
• Если is_gtd_needed = true, необходимо передать номер ГТД для указанного продукта и отправления.
|
|
411
|
+
• Метод может быть применен только к отправлениям, где страна-изготовитель еще не указана.
|
|
412
|
+
|
|
413
|
+
References:
|
|
414
|
+
https://docs.ozon.ru/api/seller/?#operation/PostingAPI_SetCountryProductFbsPostingV2
|
|
415
|
+
|
|
416
|
+
Args:
|
|
417
|
+
request: Запрос на добавление информации о стране-изготовителе товара по схеме `PostingFBSProductCountrySetRequest`
|
|
418
|
+
|
|
419
|
+
Returns:
|
|
420
|
+
Результат выполнения операции с информацией о необходимости ГТД по схеме `PostingFBSProductCountrySetResponse`
|
|
421
|
+
|
|
422
|
+
Examples:
|
|
423
|
+
async with SellerAPI(client_id, api_key) as api:
|
|
424
|
+
result = await api.posting_fbs_product_country_set(
|
|
425
|
+
PostingFBSProductCountrySetRequest(
|
|
426
|
+
posting_number="57195475-0050-3",
|
|
427
|
+
product_id=180550365,
|
|
428
|
+
country_iso_code="NO"
|
|
429
|
+
)
|
|
430
|
+
)
|
|
431
|
+
"""
|
|
432
|
+
response = await self._request(
|
|
433
|
+
method="post",
|
|
434
|
+
api_version="v2",
|
|
435
|
+
endpoint="posting/fbs/product/country/set",
|
|
436
|
+
json=request.model_dump()
|
|
437
|
+
)
|
|
438
|
+
return PostingFBSProductCountrySetResponse(**response)
|
|
439
|
+
|
|
440
|
+
async def posting_fbs_restrictions(
|
|
441
|
+
self: "SellerFBSAPI",
|
|
442
|
+
request: PostingFBSRestrictionsRequest
|
|
443
|
+
) -> PostingFBSRestrictionsResponse:
|
|
444
|
+
"""Метод для получения габаритных, весовых и прочих ограничений пункта приёма по номеру отправления.
|
|
445
|
+
|
|
446
|
+
Notes:
|
|
447
|
+
• Метод применим только для работы по схеме FBS.
|
|
448
|
+
• Возвращает ограничения пункта приёма, связанные с указанным отправлением.
|
|
449
|
+
• Ограничения включают габаритные (ширина, высота, длина), весовые (мин./макс. вес) и стоимостные (мин./макс. цена) параметры.
|
|
450
|
+
• Вес указывается в граммах, габариты — в сантиметрах, стоимость — в рублях.
|
|
451
|
+
• Если для какого-то параметра ограничение не установлено, значение будет None.
|
|
452
|
+
• Метод помогает определить, соответствует ли отправление требованиям пункта приёма перед передачей.
|
|
453
|
+
|
|
454
|
+
References:
|
|
455
|
+
https://docs.ozon.ru/api/seller/?#operation/PostingAPI_GetRestrictions
|
|
456
|
+
|
|
457
|
+
Args:
|
|
458
|
+
request: Запрос на получение ограничений пункта приёма по номеру отправления по схеме `PostingFBSRestrictionsRequest`
|
|
459
|
+
|
|
460
|
+
Returns:
|
|
461
|
+
Ограничения пункта приёма для указанного отправления по схеме `PostingFBSRestrictionsResponse`
|
|
462
|
+
|
|
463
|
+
Examples:
|
|
464
|
+
async with SellerAPI(client_id, api_key) as api:
|
|
465
|
+
result = await api.posting_fbs_restrictions(
|
|
466
|
+
PostingFBSRestrictionsRequest(
|
|
467
|
+
posting_number="76673629-0020-1"
|
|
468
|
+
)
|
|
469
|
+
)
|
|
470
|
+
"""
|
|
471
|
+
response = await self._request(
|
|
472
|
+
method="post",
|
|
473
|
+
api_version="v1",
|
|
474
|
+
endpoint="posting/fbs/restrictions",
|
|
475
|
+
json=request.model_dump()
|
|
476
|
+
)
|
|
477
|
+
return PostingFBSRestrictionsResponse(**response["result"])
|
|
@@ -181,6 +181,7 @@ class SellerPricesAndStocksAPI(APIManager):
|
|
|
181
181
|
auto_action_enabled=PricingStrategy.UNKNOWN,
|
|
182
182
|
auto_add_to_ozon_actions_list_enabled=PricingStrategy.UNKNOWN,
|
|
183
183
|
currency_code=CurrencyCode.RUB,
|
|
184
|
+
manage_elastic_boosting_through_price=True,
|
|
184
185
|
min_price="800",
|
|
185
186
|
min_price_for_auto_actions_enabled=True,
|
|
186
187
|
net_price="650",
|
|
@@ -6,7 +6,8 @@ from ..schemas.products import ProductArchiveResponse, ProductArchiveRequest, Pr
|
|
|
6
6
|
ProductInfoAttributesResponse, ProductInfoListRequest, ProductInfoListResponse, ProductInfoSubscriptionRequest, \
|
|
7
7
|
ProductInfoSubscriptionResponse, ProductListRequest, ProductListResponse, ProductPicturesInfoRequest, \
|
|
8
8
|
ProductPicturesInfoResponse, ProductRatingBySkuRequest, ProductRatingBySkuResponse, ProductRelatedSkuGetRequest, \
|
|
9
|
-
ProductRelatedSkuGetResponse, ProductUpdateOfferIdRequest, ProductUpdateOfferIdResponse
|
|
9
|
+
ProductRelatedSkuGetResponse, ProductUpdateOfferIdRequest, ProductUpdateOfferIdResponse, \
|
|
10
|
+
ProductPicturesImportResponse, ProductPicturesImportRequest, ProductInfoLimitResponse
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
class SellerProductAPI(APIManager):
|
|
@@ -670,4 +671,99 @@ class SellerProductAPI(APIManager):
|
|
|
670
671
|
endpoint="product/update/offer-id",
|
|
671
672
|
json=request.model_dump(),
|
|
672
673
|
)
|
|
673
|
-
return ProductUpdateOfferIdResponse(**response)
|
|
674
|
+
return ProductUpdateOfferIdResponse(**response)
|
|
675
|
+
|
|
676
|
+
async def product_pictures_import(
|
|
677
|
+
self: "SellerProductAPI", request: ProductPicturesImportRequest
|
|
678
|
+
) -> ProductPicturesImportResponse:
|
|
679
|
+
"""Загружает или обновляет изображения товара.
|
|
680
|
+
|
|
681
|
+
Notes:
|
|
682
|
+
• При каждом вызове метода передавайте все изображения, которые должны быть на карточке товара.
|
|
683
|
+
Например, если вы вызвали метод и загрузили 10 изображений, а затем вызвали метод второй раз
|
|
684
|
+
и загрузили ещё одно, то все 10 предыдущих сотрутся.
|
|
685
|
+
• Для загрузки передайте адрес ссылки на изображение в общедоступном облачном хранилище.
|
|
686
|
+
Формат изображения по ссылке — JPG или PNG.
|
|
687
|
+
• Изображения в массиве `images` располагайте в соответствии с желаемым порядком на сайте.
|
|
688
|
+
Главным будет первое изображение в массиве.
|
|
689
|
+
• Для каждого товара вы можете загрузить до `30` изображений.
|
|
690
|
+
• Для загрузки изображений 360 используйте поле `images360`, для загрузки маркетингового цвета — `color_image`.
|
|
691
|
+
• Если вы хотите изменить состав или порядок изображений, получите информацию с помощью метода
|
|
692
|
+
`product_info_list()` — в нём отображается текущий порядок и состав изображений. Скопируйте
|
|
693
|
+
данные полей `images`, `images360`, `color_image`, измените и дополните состав или порядок
|
|
694
|
+
в соответствии с необходимостью.
|
|
695
|
+
• В ответе метода всегда будет статус `imported` — картинка не обработана. Чтобы посмотреть
|
|
696
|
+
финальный статус, примерно через 10 секунд вызовите метод `product_pictures_info()`.
|
|
697
|
+
`* Примечание: Видимо, артефакт в документации, т.к. по факту метод product_pictures_info() не возвращает статусы.`
|
|
698
|
+
• Финальные статусы загрузки изображений:
|
|
699
|
+
- `uploaded` — изображение загружено;
|
|
700
|
+
- `pending` — при загрузке изображения возникла ошибка. Повторите попытку позже.
|
|
701
|
+
|
|
702
|
+
References:
|
|
703
|
+
https://docs.ozon.ru/api/seller/?__rr=1#operation/ProductAPI_ProductImportPictures
|
|
704
|
+
|
|
705
|
+
Args:
|
|
706
|
+
request: Данные для загрузки изображений товара по схеме `ProductPicturesImportRequest`.
|
|
707
|
+
|
|
708
|
+
Returns:
|
|
709
|
+
Результат загрузки изображений с временными статусами по схеме `ProductPicturesImportResponse`.
|
|
710
|
+
|
|
711
|
+
Example:
|
|
712
|
+
async with SellerAPI(client_id, api_key) as api:
|
|
713
|
+
result = await api.product_pictures_import(
|
|
714
|
+
ProductPicturesImportRequest(
|
|
715
|
+
product_id=123456789,
|
|
716
|
+
color_image="https://example.com/color.jpg",
|
|
717
|
+
images=[
|
|
718
|
+
"https://example.com/image1.jpg",
|
|
719
|
+
"https://example.com/image2.jpg",
|
|
720
|
+
"https://example.com/image3.jpg",
|
|
721
|
+
],
|
|
722
|
+
images360=[
|
|
723
|
+
"https://example.com/360_1.jpg",
|
|
724
|
+
"https://example.com/360_2.jpg",
|
|
725
|
+
]
|
|
726
|
+
)
|
|
727
|
+
)
|
|
728
|
+
"""
|
|
729
|
+
response = await self._request(
|
|
730
|
+
method="post",
|
|
731
|
+
api_version="v1",
|
|
732
|
+
endpoint="product/pictures/import",
|
|
733
|
+
json=request.model_dump(),
|
|
734
|
+
)
|
|
735
|
+
return ProductPicturesImportResponse(**response)
|
|
736
|
+
|
|
737
|
+
async def product_info_limit(
|
|
738
|
+
self: "SellerProductAPI"
|
|
739
|
+
) -> ProductInfoLimitResponse:
|
|
740
|
+
"""Получает информацию о лимитах на ассортимент, создание и обновление товаров.
|
|
741
|
+
|
|
742
|
+
Notes:
|
|
743
|
+
• Метод возвращает информацию о трёх типах лимитов:
|
|
744
|
+
- Лимит на ассортимент (total) — сколько всего товаров можно создать в личном кабинете.
|
|
745
|
+
- Суточный лимит на создание товаров (daily_create) — сколько товаров можно создать в сутки.
|
|
746
|
+
- Суточный лимит на обновление товаров (daily_update) — сколько товаров можно обновить в сутки.
|
|
747
|
+
• Если значение лимита равно `-1`, это означает, что лимит не ограничен.
|
|
748
|
+
• При достижении лимита на ассортимент вы не сможете создавать новые товары.
|
|
749
|
+
• Суточные лимиты сбрасываются в указанное в `reset_at` время по UTC.
|
|
750
|
+
• Лимиты зависят от типа аккаунта продавца и могут изменяться.
|
|
751
|
+
• Рекомендуется проверять лимиты перед массовыми операциями с товарами.
|
|
752
|
+
|
|
753
|
+
References:
|
|
754
|
+
https://docs.ozon.ru/api/seller/?__rr=1#operation/ProductAPI_GetUploadQuota
|
|
755
|
+
|
|
756
|
+
Returns:
|
|
757
|
+
Информация о лимитах на ассортимент, создание и обновление товаров по схеме `ProductInfoLimitResponse`.
|
|
758
|
+
|
|
759
|
+
Example:
|
|
760
|
+
async with SellerAPI(client_id, api_key) as api:
|
|
761
|
+
result = await api.product_info_limit()
|
|
762
|
+
"""
|
|
763
|
+
response = await self._request(
|
|
764
|
+
method="post",
|
|
765
|
+
api_version="v4",
|
|
766
|
+
endpoint="product/info/limit",
|
|
767
|
+
json={},
|
|
768
|
+
)
|
|
769
|
+
return ProductInfoLimitResponse(**response)
|
|
@@ -23,8 +23,14 @@ __all__ = [
|
|
|
23
23
|
"PostingFBSProductChangeRequest",
|
|
24
24
|
"PostingFBSProductChangeRequestItem",
|
|
25
25
|
"PostingFBSProductChangeResponse",
|
|
26
|
+
"PostingFBSProductCountrySetRequest",
|
|
27
|
+
"PostingFBSProductCountrySetResponse",
|
|
26
28
|
"PostingFBSProductDetailed",
|
|
29
|
+
"PostingFBSProductCountryListRequest",
|
|
30
|
+
"PostingFBSProductCountryListResponse",
|
|
27
31
|
"PostingFBSRequirements",
|
|
32
|
+
"PostingFBSRestrictionsRequest",
|
|
33
|
+
"PostingFBSRestrictionsResponse",
|
|
28
34
|
"PostingFBSTariffication",
|
|
29
35
|
"PostingFBSListRequestFilterLastChangedStatusDate",
|
|
30
36
|
"PostingFBSListFilter",
|
|
@@ -45,9 +51,13 @@ from .entities import PostingFBSAddressee, PostingFBSAnalyticsData, PostingFBSBa
|
|
|
45
51
|
PostingFBSFinancialDataProducts, PostingFBSLegalInfo, PostingFBSOptional, PostingFBSPosting, \
|
|
46
52
|
PostingFBSProductDetailed, \
|
|
47
53
|
PostingFBSRequirements, PostingFBSTariffication, PostingFBSFilterWith, PostingFBSProduct
|
|
54
|
+
from .v1__posting_fbs_restrictions import PostingFBSRestrictionsResponse, PostingFBSRestrictionsRequest
|
|
48
55
|
from .v2__posting_fbs_get_by_barcode import PostingFBSGetByBarcodeRequest, PostingFBSGetByBarcodeResponse
|
|
49
56
|
from .v2__posting_fbs_product_change import PostingFBSProductChangeRequestItem, PostingFBSProductChangeRequest, \
|
|
50
57
|
PostingFBSProductChangeResponse
|
|
58
|
+
from .v2__posting_fbs_product_country_list import PostingFBSProductCountryListResponse, \
|
|
59
|
+
PostingFBSProductCountryListRequest
|
|
60
|
+
from .v2__posting_fbs_product_country_set import PostingFBSProductCountrySetResponse, PostingFBSProductCountrySetRequest
|
|
51
61
|
from .v3__posting_fbs_get import PostingFBSGetRequest, PostingFBSGetResponse
|
|
52
62
|
from .v3__posting_fbs_list import PostingFBSListRequestFilterLastChangedStatusDate, \
|
|
53
63
|
PostingFBSListFilter, PostingFBSListRequest, PostingFBSListResult, PostingFBSListResponse
|