ozonapi-async 0.1.0__py3-none-any.whl

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.
Files changed (67) hide show
  1. ozonapi/__init__.py +9 -0
  2. ozonapi/seller/__init__.py +29 -0
  3. ozonapi/seller/common/__init__.py +0 -0
  4. ozonapi/seller/common/enumerations/__init__.py +0 -0
  5. ozonapi/seller/common/enumerations/delivery.py +16 -0
  6. ozonapi/seller/common/enumerations/localization.py +39 -0
  7. ozonapi/seller/common/enumerations/postings.py +205 -0
  8. ozonapi/seller/common/enumerations/products.py +225 -0
  9. ozonapi/seller/common/enumerations/requests.py +26 -0
  10. ozonapi/seller/common/enumerations/warehouses.py +54 -0
  11. ozonapi/seller/core/__init__.py +14 -0
  12. ozonapi/seller/core/config.py +88 -0
  13. ozonapi/seller/core/core.py +404 -0
  14. ozonapi/seller/core/exceptions.py +32 -0
  15. ozonapi/seller/core/method_rate_limiter.py +199 -0
  16. ozonapi/seller/core/rate_limiter.py +174 -0
  17. ozonapi/seller/core/sessions.py +75 -0
  18. ozonapi/seller/methods/__init__.py +15 -0
  19. ozonapi/seller/methods/attributes_and_characteristics.py +177 -0
  20. ozonapi/seller/methods/barcodes.py +84 -0
  21. ozonapi/seller/methods/fbs.py +69 -0
  22. ozonapi/seller/methods/prices_and_stocks.py +147 -0
  23. ozonapi/seller/methods/products.py +673 -0
  24. ozonapi/seller/methods/warehouses.py +80 -0
  25. ozonapi/seller/schemas/__init__.py +0 -0
  26. ozonapi/seller/schemas/attributes_and_characteristics/__init__.py +21 -0
  27. ozonapi/seller/schemas/attributes_and_characteristics/base.py +52 -0
  28. ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute.py +108 -0
  29. ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute_values.py +38 -0
  30. ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute_values_search.py +36 -0
  31. ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_tree.py +61 -0
  32. ozonapi/seller/schemas/barcodes/__init__.py +12 -0
  33. ozonapi/seller/schemas/barcodes/v1__barcode_add.py +66 -0
  34. ozonapi/seller/schemas/barcodes/v1__barcode_generate.py +46 -0
  35. ozonapi/seller/schemas/base.py +94 -0
  36. ozonapi/seller/schemas/fbs/__init__.py +9 -0
  37. ozonapi/seller/schemas/fbs/v3__posting_fbs_unfulfilled_list.py +764 -0
  38. ozonapi/seller/schemas/prices_and_stocks/__init__.py +16 -0
  39. ozonapi/seller/schemas/prices_and_stocks/base.py +26 -0
  40. ozonapi/seller/schemas/prices_and_stocks/v1__product_info_stocks_by_warehouse_fbs.py +55 -0
  41. ozonapi/seller/schemas/prices_and_stocks/v4__product_info_stocks.py +113 -0
  42. ozonapi/seller/schemas/prices_and_stocks/v5__product_info_prices.py +292 -0
  43. ozonapi/seller/schemas/products/__init__.py +51 -0
  44. ozonapi/seller/schemas/products/base.py +162 -0
  45. ozonapi/seller/schemas/products/v1__product_archive.py +20 -0
  46. ozonapi/seller/schemas/products/v1__product_attributes_update.py +79 -0
  47. ozonapi/seller/schemas/products/v1__product_import_by_sku.py +71 -0
  48. ozonapi/seller/schemas/products/v1__product_import_info.py +103 -0
  49. ozonapi/seller/schemas/products/v1__product_info_subscription.py +39 -0
  50. ozonapi/seller/schemas/products/v1__product_rating_by_sku.py +116 -0
  51. ozonapi/seller/schemas/products/v1__product_related_sku_get.py +81 -0
  52. ozonapi/seller/schemas/products/v1__product_unarchive.py +20 -0
  53. ozonapi/seller/schemas/products/v1__product_update_offer_id.py +52 -0
  54. ozonapi/seller/schemas/products/v2__product_pictures_info.py +73 -0
  55. ozonapi/seller/schemas/products/v2__products_delete.py +57 -0
  56. ozonapi/seller/schemas/products/v3__product_import.py +142 -0
  57. ozonapi/seller/schemas/products/v3__product_info_list.py +482 -0
  58. ozonapi/seller/schemas/products/v3__product_list.py +107 -0
  59. ozonapi/seller/schemas/products/v4__product_info_attributes.py +137 -0
  60. ozonapi/seller/schemas/warehouses/__init__.py +11 -0
  61. ozonapi/seller/schemas/warehouses/v1__delivery_method_list.py +95 -0
  62. ozonapi/seller/schemas/warehouses/v1__warehouse_list.py +109 -0
  63. ozonapi_async-0.1.0.dist-info/METADATA +648 -0
  64. ozonapi_async-0.1.0.dist-info/RECORD +67 -0
  65. ozonapi_async-0.1.0.dist-info/WHEEL +5 -0
  66. ozonapi_async-0.1.0.dist-info/licenses/LICENSE +21 -0
  67. ozonapi_async-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,84 @@
1
+ from ..core import APIManager
2
+ from ..core.method_rate_limiter import method_rate_limit
3
+ from ..schemas.barcodes import BarcodeGenerateRequest, BarcodeGenerateResponse
4
+ from ..schemas.barcodes import BarcodeAddRequest, BarcodeAddResponse
5
+
6
+
7
+ class SellerBarcodeAPI(APIManager):
8
+ """Реализует методы раздела Штрихкоды товаров.
9
+
10
+ References:
11
+ https://docs.ozon.ru/api/seller/#tag/BarcodeAPI
12
+ """
13
+
14
+ @method_rate_limit(limit_requests=20, interval_seconds=60)
15
+ async def barcode_add(
16
+ self: "SellerBarcodeAPI",
17
+ request: BarcodeAddRequest
18
+ ) -> BarcodeAddResponse:
19
+ """Если у товара есть штрихкод, который не указан в системе Ozon, привяжите его с помощью этого метода.
20
+ Если штрихкода нет, вы можете создать его через метод `barcode_generate()`.
21
+
22
+ Notes:
23
+ • За один запрос вы можете назначить штрихкод не больше чем на `100` товаров.
24
+ • На одном товаре может быть до `100` штрихкодов.
25
+ • С одного аккаунта продавца можно использовать метод не больше `20` раз в минуту.
26
+
27
+ References:
28
+ https://docs.ozon.ru/api/seller/#operation/add-barcode
29
+
30
+ Args:
31
+ request: Данные для добавления штрих-кодов по схеме `BarcodeAddRequest`
32
+
33
+ Returns:
34
+ Ответ с результатом добавления штрих-кодов по схеме `BarcodeAddResponse`
35
+
36
+ Example:
37
+ async with SellerAPI(client_id, api_key) as api:
38
+ barcodes = [BarcodeAddItem.model_validate({"barcode": "4321012345678", "sku": 0}), ]
39
+
40
+ result = await api.barcode_add(BarcodeAddRequest(barcodes=barcodes))
41
+ """
42
+ response = await self._request(
43
+ method="post",
44
+ api_version="v1",
45
+ endpoint="barcode/add",
46
+ json=request.model_dump(),
47
+ )
48
+ return BarcodeAddResponse(**response)
49
+
50
+ async def barcode_generate(
51
+ self: "SellerBarcodeAPI",
52
+ request: BarcodeGenerateRequest,
53
+ ) -> BarcodeGenerateResponse:
54
+ """Если у товара нет штрихкода, вы можете создать его с помощью этого метода.
55
+ Если штрихкод уже есть, но он не указан в системе Ozon, вы можете привязать его через метод `barcode_add()`.
56
+
57
+ Notes:
58
+ • За один запрос вы можете создать штрихкоды не больше чем для `100` товаров.
59
+ • С одного аккаунта продавца можно использовать метод не больше `20` раз в минуту.
60
+
61
+ References:
62
+ https://docs.ozon.ru/api/seller/#operation/generate-barcode
63
+
64
+ Args:
65
+ request: Массив с product_id для создания штрих-кодов по схеме `BarcodeGenerateRequest`
66
+
67
+ Returns:
68
+ Массив с описанием ошибок при создании штрихкодов по схеме `BarcodeGenerateResponse`
69
+
70
+ Example:
71
+ async with SellerAPI(client_id, api_key) as api:
72
+ result = await api.barcode_generate(
73
+ BarcodeGenerateRequest(
74
+ product_ids=[12345, 67890, ]
75
+ )
76
+ )
77
+ """
78
+ response = await self._request(
79
+ method="post",
80
+ api_version="v1",
81
+ endpoint="barcode/generate",
82
+ json=request.model_dump(),
83
+ )
84
+ return BarcodeGenerateResponse(**response)
@@ -0,0 +1,69 @@
1
+ from ..core import APIManager
2
+ from ..schemas.fbs import PostingFBSUnfulfilledListRequest, PostingFBSUnfulfilledListResponse
3
+
4
+
5
+ class SellerFBSAPI(APIManager):
6
+ """Реализует методы раздела Обработка заказов FBS и rFBS.
7
+
8
+ References:
9
+ https://docs.ozon.ru/api/seller/?__rr=1#tag/FBS
10
+ """
11
+
12
+ async def posting_fbs_unfulfilled_list(
13
+ self: "SellerFBSAPI",
14
+ request: PostingFBSUnfulfilledListRequest
15
+ ) -> PostingFBSUnfulfilledListResponse:
16
+ """Метод для получения списка необработанных отправлений за указанный период времени.
17
+
18
+ Notes:
19
+ • Период должен быть не больше одного года.
20
+ • Обязательно используйте фильтр либо по времени сборки — `cutoff`, либо по дате передачи отправления в доставку — `delivering_date`.
21
+ • Если использовать фильтры `cutoff` и `delivering_date` вместе, в ответе вернётся ошибка.
22
+ • Чтобы использовать фильтр по времени сборки, заполните поля `cutoff_from` и `cutoff_to`.
23
+ • Чтобы использовать фильтр по дате передачи отправления в доставку, заполните поля `delivering_date_from` и `delivering_date_to`.
24
+ • Для пагинации используйте `offset`.
25
+
26
+ References:
27
+ https://docs.ozon.ru/api/seller/#tag/FBS
28
+
29
+ Args:
30
+ request: Запрос на получение информации о необработанных отправлениях FBS и rFBS за указанный период времени по схеме `PostingFBSUnfulfilledListRequest`
31
+
32
+ Returns:
33
+ Список необработанных отправлений за указанный период времени по схеме `PostingFBSUnfulfilledListResponse`
34
+
35
+ Example:
36
+ async with SellerAPI(client_id, api_key) as api:
37
+ # noinspection PyArgumentList
38
+
39
+ result = await api.posting_fbs_unfulfilled_list(
40
+ PostingFBSUnfulfilledListRequest(
41
+ filter=PostingFBSUnfulfilledListFilter(
42
+ cutoff_from=None,
43
+ cutoff_to=None,
44
+ delivering_date_from=datetime.datetime.now() - datetime.timedelta(days=30),
45
+ delivering_date_to=datetime.datetime.now(),
46
+ delivery_method_id=[],
47
+ is_quantum=False,
48
+ provider_id=[],
49
+ status=None,
50
+ warehouse_id=[],
51
+ last_changed_status_date=None
52
+ ),
53
+ dir=SortingDirection.DESC,
54
+ limit=10,
55
+ offset=0,
56
+ with_=PostingFBSUnfulfilledListFilterWith(
57
+ barcodes=True,
58
+ financial_data=True
59
+ )
60
+ )
61
+ )
62
+ """
63
+ response = await self._request(
64
+ method="post",
65
+ api_version="v3",
66
+ endpoint="posting/fbs/unfulfilled/list",
67
+ json=request.model_dump(by_alias=True)
68
+ )
69
+ return PostingFBSUnfulfilledListResponse(**response)
@@ -0,0 +1,147 @@
1
+ from ..core import APIManager
2
+
3
+ from ..schemas.prices_and_stocks import (
4
+ ProductInfoPricesRequest,
5
+ ProductInfoPricesResponse,
6
+ ProductInfoStocksRequest,
7
+ ProductInfoStocksResponse,
8
+ ProductInfoStocksByWarehouseFBSRequest,
9
+ ProductInfoStocksByWarehouseFBSResponse,
10
+ )
11
+
12
+
13
+ class SellerPricesAndStocksAPI(APIManager):
14
+ """Реализует методы раздела Цены и остатки товаров.
15
+
16
+ References:
17
+ https://docs.ozon.ru/api/seller/#tag/PricesandStocksAPI
18
+ """
19
+
20
+ async def product_info_prices(
21
+ self: "SellerPricesAndStocksAPI",
22
+ request: ProductInfoPricesRequest = ProductInfoPricesRequest.model_construct(),
23
+ ) -> ProductInfoPricesResponse:
24
+ """Метод для получения информации о ценах и комиссиях товаров по их идентификаторам.
25
+
26
+ Notes:
27
+ • Можно вообще ничего не передавать - выберет всё по максимальному лимиту.
28
+ • Можно передавать до `1000` значений суммарно по `offer_id` и `product_id` или не передавать их вовсе, чтобы выбрать всё.
29
+ • Максимум `1000` товаров на страницу, если не заданы `offer_id` и `product_id`.
30
+ • Для пагинации используйте `cursor` из ответа, передав его в следующий запрос.
31
+
32
+ References:
33
+ https://docs.ozon.ru/api/seller/#operation/ProductAPI_GetProductInfoPrices
34
+
35
+ Args:
36
+ request: Содержит товарные идентификаторы для получения информации о ценах и комиссиях по схеме `ProductInfoPricesRequest`
37
+
38
+ Returns:
39
+ Ответ с информацией о ценах и комиссиях по схеме `ProductInfoPricesResponse`
40
+
41
+ Example:
42
+ Базовый запрос:
43
+ async with SellerAPI(client_id, api_key) as api:
44
+ result = await api.product_info_prices()
45
+
46
+ Запрос с настройками выборки:
47
+ async with SellerAPI(client_id, api_key) as api:
48
+ result = await api.product_info_prices(
49
+ ProductInfoPricesRequest(
50
+ cursor="",
51
+ filter=ProductInfoPricesFilter(
52
+ offer_id=[],
53
+ product_id=[],
54
+ visibility = Visibility.VISIBLE,
55
+ ),
56
+ limit=100
57
+ )
58
+ )
59
+ """
60
+ response = await self._request(
61
+ method="post",
62
+ api_version="v5",
63
+ endpoint="product/info/prices",
64
+ json=request.model_dump(),
65
+ )
66
+ return ProductInfoPricesResponse(**response)
67
+
68
+ async def product_info_stocks(
69
+ self: "SellerPricesAndStocksAPI",
70
+ request: ProductInfoStocksRequest = ProductInfoStocksRequest.model_construct()
71
+ ) -> ProductInfoStocksResponse:
72
+ """Метод для получения информации о количестве общих складских остатков и зарезервированном количестве для схем FBS и rFBS по товарным идентификаторам.
73
+ Чтобы получить информацию об остатках по схеме FBO, используйте метод `analytics_stocks()`.
74
+
75
+ Notes:
76
+ • Можно использовать без параметров - выберет всё по максимальному лимиту.
77
+ • Можно передавать до `1000` значений суммарно по `offer_id` и `product_id` или не передавать их вовсе, чтобы выбрать всё.
78
+ • Максимум `1000` товаров на страницу, если не заданы `offer_id` и `product_id`.
79
+ • Для пагинации передайте полученный `cursor` в следующий запрос.
80
+
81
+ References:
82
+ https://docs.ozon.ru/api/seller/#operation/ProductAPI_GetProductInfoStocks
83
+
84
+ Args:
85
+ request: Данные для получения информации об общих остатках FBS и rFBS по схеме `ProductInfoStocksRequest`
86
+
87
+ Returns:
88
+ Ответ с информацией об общих остатках FBS и rFBS по схеме `ProductInfoStocksResponse`
89
+
90
+ Examples:
91
+ Базовый запрос:
92
+ async with SellerAPI(client_id, api_key) as api:
93
+ result = await api.product_info_stocks()
94
+
95
+ Запрос с настройками выборки (товары не в наличии):
96
+ async with SellerAPI(client_id, api_key) as api:
97
+ result = await api.product_info_stocks(
98
+ ProductInfoStocksRequest(
99
+ cursor="",
100
+ filter=ProductInfoStocksFilter(
101
+ offer_id=[],
102
+ product_id=[],
103
+ visibility = Visibility.EMPTY_STOCK,
104
+ with_quants=None
105
+ ),
106
+ limit=100
107
+ )
108
+ )
109
+ """
110
+ response = await self._request(
111
+ method="post",
112
+ api_version="v4",
113
+ endpoint="product/info/stocks",
114
+ json=request.model_dump(),
115
+ )
116
+ return ProductInfoStocksResponse(**response)
117
+
118
+ async def product_info_stocks_by_warehouse_fbs(
119
+ self: "SellerPricesAndStocksAPI",
120
+ request: ProductInfoStocksByWarehouseFBSRequest
121
+ ) -> ProductInfoStocksByWarehouseFBSResponse:
122
+ """Метод для получения информации о складских остатках и зарезервированном кол-ве в разбивке по складам продавца (FBS и rFBS) по SKU.
123
+
124
+ References:
125
+ https://docs.ozon.ru/api/seller/#operation/ProductAPI_ProductStocksByWarehouseFbs
126
+
127
+ Args:
128
+ request: Список SKU для получения информации о товарах о складских остатках и зарезервированном кол-ве в разбивке по складам продавца (FBS и rFBS) по схеме `ProductInfoStocksByWarehouseFBSRequest`
129
+
130
+ Returns:
131
+ Ответ с информацией о складских остатках и зарезервированном кол-ве в разбивке по складам продавца (FBS и rFBS) по схеме `ProductInfoStocksByWarehouseFBSResponse`
132
+
133
+ Example:
134
+ async with SellerAPI(client_id, api_key) as api:
135
+ result = await api.product_info_stocks_by_warehouse_fbs(
136
+ ProductInfoStocksByWarehouseFBSRequest(
137
+ sku=[9876543210, ]
138
+ )
139
+ )
140
+ """
141
+ response = await self._request(
142
+ method="post",
143
+ api_version="v1",
144
+ endpoint="product/info/stocks-by-warehouse/fbs",
145
+ json=request.model_dump(),
146
+ )
147
+ return ProductInfoStocksByWarehouseFBSResponse(**response)