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.
Files changed (103) hide show
  1. {ozonapi_async-0.3.0/src/ozonapi_async.egg-info → ozonapi_async-0.3.1}/PKG-INFO +1 -1
  2. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/pyproject.toml +1 -1
  3. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/__init__.py +1 -1
  4. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/postings.py +27 -0
  5. ozonapi_async-0.3.1/src/ozonapi/seller/methods/fbs.py +163 -0
  6. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/attributes_and_characteristics/__init__.py +6 -3
  7. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/barcodes/__init__.py +5 -2
  8. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/beta/__init__.py +11 -0
  9. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/__init__.py +47 -0
  10. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/__init__.py +47 -0
  11. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__addressee.py +11 -0
  12. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__analytics_data.py +61 -0
  13. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__barcodes.py +16 -0
  14. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__cancellation.py +34 -0
  15. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__customer.py +21 -0
  16. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__customer_address.py +54 -0
  17. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__delivery_method.py +25 -0
  18. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__financial_data.py +22 -0
  19. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__financial_data_products.py +62 -0
  20. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__legal_info.py +20 -0
  21. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__optional.py +14 -0
  22. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__posting.py +150 -0
  23. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__products.py +48 -0
  24. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__requirements.py +42 -0
  25. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/entities/posting__tariffication.py +47 -0
  26. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_list.py +177 -0
  27. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_unfulfilled_list.py +190 -0
  28. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/mixins.py +21 -0
  29. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/prices_and_stocks/__init__.py +74 -0
  30. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/products/__init__.py +180 -0
  31. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v3__product_info_list.py +3 -3
  32. ozonapi_async-0.3.1/src/ozonapi/seller/schemas/warehouses/__init__.py +24 -0
  33. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1/src/ozonapi_async.egg-info}/PKG-INFO +1 -1
  34. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi_async.egg-info/SOURCES.txt +18 -0
  35. ozonapi_async-0.3.0/src/ozonapi/seller/methods/fbs.py +0 -69
  36. ozonapi_async-0.3.0/src/ozonapi/seller/schemas/beta/__init__.py +0 -6
  37. ozonapi_async-0.3.0/src/ozonapi/seller/schemas/fbs/__init__.py +0 -9
  38. ozonapi_async-0.3.0/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_unfulfilled_list.py +0 -764
  39. ozonapi_async-0.3.0/src/ozonapi/seller/schemas/prices_and_stocks/__init__.py +0 -22
  40. ozonapi_async-0.3.0/src/ozonapi/seller/schemas/products/__init__.py +0 -51
  41. ozonapi_async-0.3.0/src/ozonapi/seller/schemas/warehouses/__init__.py +0 -11
  42. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/LICENSE +0 -0
  43. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/readme.md +0 -0
  44. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/setup.cfg +0 -0
  45. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/__init__.py +0 -0
  46. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/__init__.py +0 -0
  47. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/__init__.py +0 -0
  48. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/delivery.py +0 -0
  49. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/localization.py +0 -0
  50. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/prices.py +0 -0
  51. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/products.py +0 -0
  52. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/requests.py +0 -0
  53. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/common/enumerations/warehouses.py +0 -0
  54. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/__init__.py +0 -0
  55. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/config.py +0 -0
  56. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/core.py +0 -0
  57. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/exceptions.py +0 -0
  58. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/method_rate_limiter.py +0 -0
  59. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/rate_limiter.py +0 -0
  60. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/core/sessions.py +0 -0
  61. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/__init__.py +0 -0
  62. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/attributes_and_characteristics.py +0 -0
  63. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/barcodes.py +0 -0
  64. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/beta.py +0 -0
  65. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/prices_and_stocks.py +0 -0
  66. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/products.py +0 -0
  67. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/methods/warehouses.py +0 -0
  68. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/__init__.py +0 -0
  69. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/attributes_and_characteristics/base.py +0 -0
  70. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute.py +0 -0
  71. {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
  72. {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
  73. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_tree.py +0 -0
  74. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/barcodes/v1__barcode_add.py +0 -0
  75. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/barcodes/v1__barcode_generate.py +0 -0
  76. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/base.py +0 -0
  77. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/beta/v1__analytics_stocks.py +0 -0
  78. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/prices_and_stocks/base.py +0 -0
  79. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/prices_and_stocks/v1__product_import_prices.py +0 -0
  80. {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
  81. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/prices_and_stocks/v2__products_stocks.py +0 -0
  82. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/prices_and_stocks/v4__product_info_stocks.py +0 -0
  83. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/prices_and_stocks/v5__product_info_prices.py +0 -0
  84. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/base.py +0 -0
  85. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_archive.py +0 -0
  86. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_attributes_update.py +0 -0
  87. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_import_by_sku.py +0 -0
  88. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_import_info.py +0 -0
  89. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_info_subscription.py +0 -0
  90. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_rating_by_sku.py +0 -0
  91. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_related_sku_get.py +0 -0
  92. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_unarchive.py +0 -0
  93. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v1__product_update_offer_id.py +0 -0
  94. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v2__product_pictures_info.py +0 -0
  95. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v2__products_delete.py +0 -0
  96. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v3__product_import.py +0 -0
  97. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v3__product_list.py +0 -0
  98. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/products/v4__product_info_attributes.py +0 -0
  99. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/warehouses/v1__delivery_method_list.py +0 -0
  100. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi/seller/schemas/warehouses/v1__warehouse_list.py +0 -0
  101. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi_async.egg-info/dependency_links.txt +0 -0
  102. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/src/ozonapi_async.egg-info/requires.txt +0 -0
  103. {ozonapi_async-0.3.0 → ozonapi_async-0.3.1}/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.0
3
+ Version: 0.3.1
4
4
  Summary: Асинхронный клиент для работы с API маркетплейса Ozon
5
5
  Author: Alexander Ulianov
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ozonapi-async"
7
- version = "0.3.0"
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.0"
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"
@@ -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 DescriptionCategoryAttributeRequest, \
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, DescriptionCategoryTreeResponse
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
+ )