ozonapi-async 0.4.0__tar.gz → 0.5.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.
Files changed (98) hide show
  1. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/PKG-INFO +2 -2
  2. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/pyproject.toml +1 -1
  3. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/readme.md +1 -1
  4. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/__init__.py +1 -1
  5. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/common/enumerations/postings.py +2 -0
  6. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/core/config.py +1 -1
  7. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/methods/fbs.py +55 -2
  8. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/__init__.py +6 -5
  9. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/__init__.py +2 -14
  10. ozonapi_async-0.5.0/src/ozonapi/seller/schemas/fbs/entities/posting__filter_with.py +30 -0
  11. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__posting.py +1 -1
  12. ozonapi_async-0.5.0/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_get.py +264 -0
  13. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_list.py +4 -28
  14. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_unfulfilled_list.py +2 -28
  15. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi_async.egg-info/PKG-INFO +2 -2
  16. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi_async.egg-info/SOURCES.txt +2 -0
  17. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/LICENSE +0 -0
  18. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/setup.cfg +0 -0
  19. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/__init__.py +0 -0
  20. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/common/__init__.py +0 -0
  21. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/common/enumerations/__init__.py +0 -0
  22. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/common/enumerations/delivery.py +0 -0
  23. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/common/enumerations/localization.py +0 -0
  24. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/common/enumerations/prices.py +0 -0
  25. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/common/enumerations/products.py +0 -0
  26. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/common/enumerations/requests.py +0 -0
  27. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/common/enumerations/warehouses.py +0 -0
  28. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/core/__init__.py +0 -0
  29. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/core/core.py +0 -0
  30. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/core/exceptions.py +0 -0
  31. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/core/method_rate_limiter.py +0 -0
  32. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/core/rate_limiter.py +0 -0
  33. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/core/sessions.py +0 -0
  34. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/methods/__init__.py +0 -0
  35. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/methods/attributes_and_characteristics.py +0 -0
  36. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/methods/barcodes.py +0 -0
  37. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/methods/beta.py +0 -0
  38. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/methods/prices_and_stocks.py +0 -0
  39. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/methods/products.py +0 -0
  40. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/methods/warehouses.py +0 -0
  41. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/__init__.py +0 -0
  42. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/__init__.py +0 -0
  43. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/base.py +0 -0
  44. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute.py +0 -0
  45. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute_values.py +0 -0
  46. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute_values_search.py +0 -0
  47. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_tree.py +0 -0
  48. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/barcodes/__init__.py +0 -0
  49. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/barcodes/v1__barcode_add.py +0 -0
  50. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/barcodes/v1__barcode_generate.py +0 -0
  51. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/base.py +0 -0
  52. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/beta/__init__.py +0 -0
  53. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/beta/v1__analytics_stocks.py +0 -0
  54. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__addressee.py +0 -0
  55. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__analytics_data.py +0 -0
  56. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__barcodes.py +0 -0
  57. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__cancellation.py +0 -0
  58. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__customer.py +0 -0
  59. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__customer_address.py +0 -0
  60. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__delivery_method.py +0 -0
  61. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__financial_data.py +0 -0
  62. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__financial_data_products.py +0 -0
  63. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__legal_info.py +0 -0
  64. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__optional.py +0 -0
  65. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__products.py +0 -0
  66. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__requirements.py +0 -0
  67. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/fbs/entities/posting__tariffication.py +0 -0
  68. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/mixins.py +0 -0
  69. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/prices_and_stocks/__init__.py +0 -0
  70. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/prices_and_stocks/base.py +0 -0
  71. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/prices_and_stocks/v1__product_import_prices.py +0 -0
  72. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/prices_and_stocks/v1__product_info_stocks_by_warehouse_fbs.py +0 -0
  73. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/prices_and_stocks/v2__products_stocks.py +0 -0
  74. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/prices_and_stocks/v4__product_info_stocks.py +0 -0
  75. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/prices_and_stocks/v5__product_info_prices.py +0 -0
  76. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/__init__.py +0 -0
  77. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/base.py +0 -0
  78. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v1__product_archive.py +0 -0
  79. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v1__product_attributes_update.py +0 -0
  80. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v1__product_import_by_sku.py +0 -0
  81. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v1__product_import_info.py +0 -0
  82. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v1__product_info_subscription.py +0 -0
  83. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v1__product_rating_by_sku.py +0 -0
  84. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v1__product_related_sku_get.py +0 -0
  85. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v1__product_unarchive.py +0 -0
  86. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v1__product_update_offer_id.py +0 -0
  87. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v2__product_pictures_info.py +0 -0
  88. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v2__products_delete.py +0 -0
  89. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v3__product_import.py +0 -0
  90. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v3__product_info_list.py +0 -0
  91. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v3__product_list.py +0 -0
  92. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/products/v4__product_info_attributes.py +0 -0
  93. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/warehouses/__init__.py +0 -0
  94. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/warehouses/v1__delivery_method_list.py +0 -0
  95. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi/seller/schemas/warehouses/v1__warehouse_list.py +0 -0
  96. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi_async.egg-info/dependency_links.txt +0 -0
  97. {ozonapi_async-0.4.0 → ozonapi_async-0.5.0}/src/ozonapi_async.egg-info/requires.txt +0 -0
  98. {ozonapi_async-0.4.0 → ozonapi_async-0.5.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.4.0
3
+ Version: 0.5.0
4
4
  Summary: Асинхронный клиент для работы с API маркетплейса Ozon
5
5
  Author: Alexander Ulianov
6
6
  License: MIT
@@ -377,7 +377,7 @@ pytest --cov=ozonapi --cov-report=html
377
377
  |---|---|---|---|
378
378
  | ✓ | `/v3/posting/fbs/unfulfilled/list` | Список необработанных отправлений | `posting_fbs_unfulfilled_list()` |
379
379
  | ✓ | `/v3/posting/fbs/list` | Список отправлений | `posting_fbs_list()` |
380
- | | `/v3/posting/fbs/get` | Получить информацию об отправлении по идентификатору | `posting_fbs_get()` |
380
+ | | `/v3/posting/fbs/get` | Получить информацию об отправлении по идентификатору | `posting_fbs_get()` |
381
381
  | ☐ | `/v2/posting/fbs/get-by-barcode` | Получить информацию об отправлении по штрихкоду | `posting_fbs_get_by_barcode()` |
382
382
  | ☐ | `/v3/posting/multiboxqty/set` | Указать количество коробок для многокоробочных отправлений | `posting_multiboxqty_set()` |
383
383
  | ☐ | `/v2/posting/fbs/product/change` | Добавить вес для весовых товаров в отправлении | `posting_fbs_product_change()` |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ozonapi-async"
7
- version = "0.4.0"
7
+ version = "0.5.0"
8
8
  description = "Асинхронный клиент для работы с API маркетплейса Ozon"
9
9
  readme = "readme.md"
10
10
  keywords = ["ozon", "api", "async", "ecommerce", "seller", "client"]
@@ -335,7 +335,7 @@ pytest --cov=ozonapi --cov-report=html
335
335
  |---|---|---|---|
336
336
  | ✓ | `/v3/posting/fbs/unfulfilled/list` | Список необработанных отправлений | `posting_fbs_unfulfilled_list()` |
337
337
  | ✓ | `/v3/posting/fbs/list` | Список отправлений | `posting_fbs_list()` |
338
- | | `/v3/posting/fbs/get` | Получить информацию об отправлении по идентификатору | `posting_fbs_get()` |
338
+ | | `/v3/posting/fbs/get` | Получить информацию об отправлении по идентификатору | `posting_fbs_get()` |
339
339
  | ☐ | `/v2/posting/fbs/get-by-barcode` | Получить информацию об отправлении по штрихкоду | `posting_fbs_get_by_barcode()` |
340
340
  | ☐ | `/v3/posting/multiboxqty/set` | Указать количество коробок для многокоробочных отправлений | `posting_multiboxqty_set()` |
341
341
  | ☐ | `/v2/posting/fbs/product/change` | Добавить вес для весовых товаров в отправлении | `posting_fbs_product_change()` |
@@ -2,7 +2,7 @@
2
2
  Асинхронный интерфейс для взаимодействия с API маркетплейса Ozon.
3
3
  """
4
4
 
5
- __version__ = "0.4.0"
5
+ __version__ = "0.5.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"
@@ -12,6 +12,7 @@ class AvailablePostingActions(str, Enum):
12
12
  CLICK_TRACK_NUMBER: просмотреть по трек-номеру историю изменения статусов в личном кабинете
13
13
  CUSTOMER_PHONE_AVAILABLE: телефон покупателя
14
14
  HAS_WEIGHT_PRODUCTS: весовые товары в отправлении
15
+ HAS_BARCODE_FOR_PRINTING: штрихкод для печати
15
16
  HIDE_REGION_AND_CITY: скрыть регион и город покупателя в отчёте
16
17
  INVOICE_GET: получить информацию из счёта-фактуры
17
18
  INVOICE_SEND: создать счёт-фактуру
@@ -204,6 +205,7 @@ class PrrOption(str, Enum):
204
205
  Attributes:
205
206
  LIFT: подъём на лифте
206
207
  STAIRS: подъём по лестнице
208
+ FLOOR: подъем на этаж
207
209
  NONE: покупатель отказался от услуги, поднимать товары не нужно
208
210
  DELIVERY_DEFAULT: доставка включена в стоимость, по условиям оферты нужно доставить товар на этаж
209
211
  UNSPECIFIED: не указано
@@ -45,7 +45,7 @@ class APIConfig(BaseSettings):
45
45
  description="Базовый URL API Ozon"
46
46
  )
47
47
  max_requests_per_second: int = Field(
48
- default=50,
48
+ default=25,
49
49
  ge=1,
50
50
  le=50,
51
51
  description="Максимальное количество запросов в секунду (50 по документации Ozon)"
@@ -1,6 +1,6 @@
1
1
  from ..core import APIManager
2
2
  from ..schemas.fbs import PostingFBSUnfulfilledListRequest, PostingFBSUnfulfilledListResponse, PostingFBSListResponse, \
3
- PostingFBSListRequest
3
+ PostingFBSListRequest, PostingFBSGetRequest, PostingFBSGetResponse
4
4
 
5
5
 
6
6
  class SellerFBSAPI(APIManager):
@@ -160,4 +160,57 @@ class SellerFBSAPI(APIManager):
160
160
  endpoint="posting/fbs/list",
161
161
  json=request.model_dump(by_alias=True)
162
162
  )
163
- return PostingFBSListResponse(**response)
163
+ return PostingFBSListResponse(**response)
164
+
165
+ async def posting_fbs_get(
166
+ self: "SellerFBSAPI",
167
+ request: PostingFBSGetRequest
168
+ ) -> PostingFBSGetResponse:
169
+ """Метод для получения информации об отправлении FBS по его номеру.
170
+
171
+ Notes:
172
+ • Чтобы получать актуальную дату отгрузки, регулярно обновляйте информацию об отправлениях или подключите пуш-уведомления.
173
+ • Для получения дополнительных данных используйте параметр `with_` в запросе.
174
+
175
+ References:
176
+ https://docs.ozon.ru/api/seller/#operation/PostingAPI_GetFbsPostingV3
177
+
178
+ Args:
179
+ request: Запрос на получение информации об отправлении FBS по схеме `PostingFBSGetRequest`
180
+
181
+ Returns:
182
+ Детализированная информация об отправлении по схеме `PostingFBSGetResponse`
183
+
184
+ Examples:
185
+ Базовое применение:
186
+ async with SellerAPI(client_id, api_key) as api:
187
+ result = await api.posting_fbs_get(
188
+ PostingFBSGetRequest(
189
+ posting_number="57195475-0050-3"
190
+ )
191
+ )
192
+
193
+ Пример с дополнительными полями:
194
+ async with SellerAPI(client_id, api_key) as api:
195
+ result = await api.posting_fbs_get(
196
+ PostingFBSGetRequest(
197
+ posting_number="57195475-0050-3",
198
+ with_=PostingFBSGetRequestWith(
199
+ analytics_data=True,
200
+ barcodes=True,
201
+ financial_data=True,
202
+ legal_info=False,
203
+ product_exemplars=True,
204
+ related_postings=True,
205
+ translit=False
206
+ )
207
+ )
208
+ )
209
+ """
210
+ response = await self._request(
211
+ method="post",
212
+ api_version="v3",
213
+ endpoint="posting/fbs/get",
214
+ json=request.model_dump(by_alias=True)
215
+ )
216
+ return PostingFBSGetResponse(**response)
@@ -9,8 +9,11 @@ __all__ = [
9
9
  "PostingFBSCustomer",
10
10
  "PostingFBSCustomerAddress",
11
11
  "PostingFBSDeliveryMethod",
12
+ "PostingFBSFilterWith",
12
13
  "PostingFBSFinancialData",
13
14
  "PostingFBSFinancialDataProducts",
15
+ "PostingFBSGetRequest",
16
+ "PostingFBSGetResponse",
14
17
  "PostingFBSLegalInfo",
15
18
  "PostingFBSOptional",
16
19
  "PostingFBSPosting",
@@ -18,7 +21,6 @@ __all__ = [
18
21
  "PostingFBSRequirements",
19
22
  "PostingFBSTariffication",
20
23
  "PostingFBSListRequestFilterLastChangedStatusDate",
21
- "PostingFBSListFilterWith",
22
24
  "PostingFBSListFilter",
23
25
  "PostingFBSListRequest",
24
26
  "PostingFBSListResult",
@@ -26,7 +28,6 @@ __all__ = [
26
28
  "PostingFBSUnfulfilledListRequest",
27
29
  "PostingFBSUnfulfilledListResponse",
28
30
  "PostingFBSUnfulfilledListRequestFilterLastChangedStatusDate",
29
- "PostingFBSUnfulfilledListFilterWith",
30
31
  "PostingFBSUnfulfilledListFilter",
31
32
  "PostingFBSUnfulfilledListResult",
32
33
  ]
@@ -34,14 +35,14 @@ __all__ = [
34
35
  from .entities import PostingFBSAddressee, PostingFBSAnalyticsData, PostingFBSBarcodes, PostingFBSCancellation, \
35
36
  PostingFBSCustomer, PostingFBSCustomerAddress, PostingFBSDeliveryMethod, PostingFBSFinancialData, \
36
37
  PostingFBSFinancialDataProducts, PostingFBSLegalInfo, PostingFBSOptional, PostingFBSPosting, PostingFBSProducts, \
37
- PostingFBSRequirements, PostingFBSTariffication
38
- from .v3__posting_fbs_list import PostingFBSListRequestFilterLastChangedStatusDate, PostingFBSListFilterWith, \
38
+ PostingFBSRequirements, PostingFBSTariffication, PostingFBSFilterWith
39
+ from .v3__posting_fbs_get import PostingFBSGetRequest, PostingFBSGetResponse
40
+ from .v3__posting_fbs_list import PostingFBSListRequestFilterLastChangedStatusDate, \
39
41
  PostingFBSListFilter, PostingFBSListRequest, PostingFBSListResult, PostingFBSListResponse
40
42
  from .v3__posting_fbs_unfulfilled_list import (
41
43
  PostingFBSUnfulfilledListRequest,
42
44
  PostingFBSUnfulfilledListResponse,
43
45
  PostingFBSUnfulfilledListRequestFilterLastChangedStatusDate,
44
- PostingFBSUnfulfilledListFilterWith,
45
46
  PostingFBSUnfulfilledListFilter,
46
47
  PostingFBSUnfulfilledListResult,
47
48
  )
@@ -14,34 +14,22 @@ __all__ = [
14
14
  "PostingFBSProducts",
15
15
  "PostingFBSRequirements",
16
16
  "PostingFBSTariffication",
17
+ "PostingFBSFilterWith",
17
18
  ]
18
19
 
19
20
  from .posting__analytics_data import PostingFBSAnalyticsData
20
-
21
21
  from .posting__barcodes import PostingFBSBarcodes
22
-
23
22
  from .posting__cancellation import PostingFBSCancellation
24
-
25
23
  from .posting__customer import PostingFBSCustomer
26
-
27
24
  from .posting__customer_address import PostingFBSCustomerAddress
28
-
29
25
  from .posting__delivery_method import PostingFBSDeliveryMethod
30
-
26
+ from .posting__filter_with import PostingFBSFilterWith
31
27
  from .posting__financial_data import PostingFBSFinancialData
32
-
33
28
  from .posting__financial_data_products import PostingFBSFinancialDataProducts
34
-
35
29
  from .posting__legal_info import PostingFBSLegalInfo
36
-
37
30
  from .posting__optional import PostingFBSOptional
38
-
39
31
  from .posting__posting import PostingFBSPosting
40
-
41
32
  from .posting__products import PostingFBSProducts
42
-
43
33
  from .posting__requirements import PostingFBSRequirements
44
-
45
34
  from .posting__tariffication import PostingFBSTariffication
46
-
47
35
  from .posting__addressee import PostingFBSAddressee
@@ -0,0 +1,30 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import Field, BaseModel
4
+
5
+
6
+ class PostingFBSFilterWith(BaseModel):
7
+ """Дополнительные поля, которые нужно добавить в ответ.
8
+
9
+ Attributes:
10
+ analytics_data: Добавить в ответ данные аналитики (опционально)
11
+ barcodes: Добавить в ответ штрихкоды отправления (опционально)
12
+ financial_data: Добавить в ответ финансовые данные (опционально)
13
+ legal_info: Добавить в ответ юридическую информацию (опционально)
14
+ translit: Выполнить транслитерацию возвращаемых значений (опционально)
15
+ """
16
+ analytics_data: Optional[bool] = Field(
17
+ False, description="Добавить в ответ данные аналитики."
18
+ )
19
+ barcodes: Optional[bool] = Field(
20
+ False, description="Добавить в ответ штрихкоды отправления."
21
+ )
22
+ financial_data: Optional[bool] = Field(
23
+ False, description="Добавить в ответ финансовые данные."
24
+ )
25
+ legal_info: Optional[bool] = Field(
26
+ False, description="Добавить в ответ юридическую информацию."
27
+ )
28
+ translit: Optional[bool] = Field(
29
+ False, description="Выполнить транслитерацию возвращаемых значений."
30
+ )
@@ -121,7 +121,7 @@ class PostingFBSPosting(BaseModel):
121
121
  None, description="Код услуги погрузочно-разгрузочных работ."
122
122
  )
123
123
  quantum_id: Optional[int] = Field(
124
- ..., description="Идентификатор эконом-товара."
124
+ None, description="Идентификатор эконом-товара."
125
125
  )
126
126
  requirements: PostingFBSRequirements = Field(
127
127
  ..., description="""
@@ -0,0 +1,264 @@
1
+ """https://docs.ozon.ru/api/seller/#operation/PostingAPI_GetFbsPostingV3"""
2
+ from typing import Optional
3
+
4
+ from pydantic import BaseModel, Field
5
+
6
+ from . import PostingFBSPosting
7
+ from .entities import PostingFBSFilterWith
8
+ from ...common.enumerations.localization import CurrencyCode
9
+ from ...common.enumerations.postings import PostingSubstatus, PrrOption
10
+
11
+
12
+ class PostingFBSGetRequestWith(PostingFBSFilterWith):
13
+ """Дополнительные поля, которые нужно добавить в ответ.
14
+
15
+ Attributes:
16
+ analytics_data: Добавить в ответ данные аналитики (опционально)
17
+ barcodes: Добавить в ответ штрихкоды отправления (опционально)
18
+ financial_data: Добавить в ответ финансовые данные (опционально)
19
+ legal_info: Добавить в ответ юридическую информацию (опционально)
20
+ product_exemplars: Добавить в ответ данные о продуктах и их экземплярах (опционально)
21
+ related_postings: Добавить в ответ номера связанных отправлений. Связанные отправления — те, на которое было разделено родительское отправление при сборке
22
+ translit: Выполнить транслитерацию возвращаемых значений (опционально)
23
+ """
24
+ product_exemplars: Optional[bool] = Field(
25
+ False, description="Добавить в ответ данные о продуктах и их экземплярах."
26
+ )
27
+ related_postings: Optional[bool] = Field(
28
+ False, description="Добавить в ответ номера связанных отправлений. Связанные отправления — те, на которое было разделено родительское отправление при сборке."
29
+ )
30
+
31
+
32
+ class PostingFBSGetRequest(BaseModel):
33
+ """Описывает схему запроса.
34
+
35
+ Attributes:
36
+ posting_number: Идентификатор отправления
37
+ with_: Дополнительные поля, которые нужно добавить в ответ
38
+ """
39
+ model_config = {'populate_by_name': True}
40
+
41
+ posting_number: str = Field(
42
+ ..., description="Идентификатор отправления."
43
+ )
44
+ with_: Optional[PostingFBSGetRequestWith] = Field(
45
+ None, description="Дополнительные поля, которые нужно добавить в ответ.",
46
+ alias="with",
47
+ )
48
+
49
+
50
+ class PostingFBSGetResultAdditionalData(BaseModel):
51
+ """Дополнительная информация об отправлении
52
+
53
+ Attributes:
54
+ key: ключ
55
+ value: значение
56
+ """
57
+ key: Optional[str] = Field(None)
58
+ value: Optional[str] = Field(None)
59
+
60
+
61
+ class PostingFBSGetResultCourier(BaseModel):
62
+ """Данные о курьере.
63
+ Attributes:
64
+ car_model: Модель автомобиля
65
+ car_number: Номер автомобиля
66
+ name: Полное имя курьера
67
+ phone: Телефон курьера (всегда возвращает пустую строку)
68
+ """
69
+ car_model: Optional[str] = Field(
70
+ None, description="Модель автомобиля."
71
+ )
72
+ car_number: Optional[str] = Field(
73
+ None, description="Номер автомобиля."
74
+ )
75
+ name: Optional[str] = Field(
76
+ None, description="Полное имя курьера."
77
+ )
78
+ phone: Optional[str] = Field(
79
+ None, description="Телефон курьера (всегда возвращает пустую строку)."
80
+ )
81
+
82
+
83
+ class PostingFBSGetResultProductExemplarsProductExemplar(BaseModel):
84
+ """Детализированная информация об экземпляре продукта.
85
+
86
+ Attributes:
87
+ exemplar_id: Идентификатор экземпляра
88
+ mandatory_mark: Обязательная маркировка «Честный ЗНАК»
89
+ gtd: Номер грузовой таможенной декларации (ГТД)
90
+ is_gtd_absent: Признак того, что не указан номер таможенной декларации
91
+ rnpt: Регистрационный номер партии товара (РНПТ)
92
+ is_rnpt_absent: Признак того, что не указан регистрационный номер партии товара (РНПТ)
93
+ weight: Фактический вес экземпляра
94
+ imei: Список IMEI мобильных устройств
95
+ """
96
+ exemplar_id: Optional[int] = Field(
97
+ None, description="Идентификатор экземпляра."
98
+ )
99
+ mandatory_mark: Optional[str] = Field(
100
+ None, description="Обязательная маркировка «Честный ЗНАК»."
101
+ )
102
+ gtd: Optional[str] = Field(
103
+ None, description="Номер грузовой таможенной декларации (ГТД)."
104
+ )
105
+ is_gtd_absent: Optional[bool] = Field(
106
+ None, description="Признак того, что не указан номер таможенной декларации."
107
+ )
108
+ rnpt: Optional[str] = Field(
109
+ None, description="Регистрационный номер партии товара (РНПТ)."
110
+ )
111
+ is_rnpt_absent: Optional[bool] = Field(
112
+ None, description="Признак того, что не указан регистрационный номер партии товара (РНПТ)."
113
+ )
114
+ weight: Optional[float] = Field(
115
+ None, description="Фактический вес экземпляра."
116
+ )
117
+ imei: Optional[list[str]] = Field(
118
+ None, description="Список IMEI мобильных устройств."
119
+ )
120
+
121
+
122
+ class PostingFBSGetResultProductExemplarsProduct(BaseModel):
123
+ """Информация об экземпляре продукта.
124
+
125
+ Attributes:
126
+ exemplars: Информация по экземплярам
127
+ sku: Идентификатор товара в системе Ozon — SKU
128
+ """
129
+ exemplars: Optional[list[PostingFBSGetResultProductExemplarsProductExemplar]] = Field(
130
+ default_factory=list, description="Информация по экземплярам."
131
+ )
132
+ sku: int = Field(
133
+ ..., description="Идентификатор товара в системе Ozon — SKU."
134
+ )
135
+
136
+
137
+ class PostingFBSGetResultProductExemplars(BaseModel):
138
+ """Информация по продуктам и их экземплярам.
139
+ Ответ содержит поле product_exemplars, если в запросе передан признак with.product_exemplars = true.
140
+
141
+ Attributes:
142
+ products: Информация по продуктам
143
+ """
144
+ products: Optional[list[PostingFBSGetResultProductExemplarsProduct]] = Field(
145
+ default_factory=list, description="Информация по продуктам."
146
+ )
147
+
148
+
149
+ class PostingFBSGetResultRelatedPostings(BaseModel):
150
+ """Связанные отправления.
151
+
152
+ Attributes:
153
+ related_posting_numbers: Список номеров связанных отправлений
154
+ """
155
+ related_posting_numbers: Optional[list[str]] = Field(
156
+ default_factory=list, description="Список номеров связанных отправлений."
157
+ )
158
+
159
+
160
+ class PostingFBSGetResultPrrOption(BaseModel):
161
+ """Информация об услуге погрузочно-разгрузочных работ.
162
+ Актуально для КГТ-отправлений с доставкой силами продавца или интегрированной службой.
163
+
164
+ Attributes:
165
+ code: Код услуги погрузочно-разгрузочных работ
166
+ price: Стоимость услуги, которую Ozon компенсирует продавцу
167
+ currency_code: Валюта
168
+ floor: Этаж, на который нужно поднять товар
169
+ """
170
+ code: Optional[PrrOption] = Field(
171
+ None, description="Код услуги погрузочно-разгрузочных работ."
172
+ )
173
+ price: Optional[str] = Field(
174
+ None, description="Стоимость услуги, которую Ozon компенсирует продавцу."
175
+ )
176
+ currency_code: Optional[CurrencyCode] = Field(
177
+ None, description="Валюта."
178
+ )
179
+ floor: Optional[str] = Field(
180
+ None, description="Этаж, на который нужно поднять товар."
181
+ )
182
+
183
+
184
+ class PostingFBSGetResult(PostingFBSPosting):
185
+ """Детализированная информация об отправлении.
186
+
187
+ Attributes:
188
+ additional_data: Дополнительная информация
189
+ addressee: Контактные данные получателя
190
+ analytics_data: Данные аналитики
191
+ available_actions: Доступные действия
192
+ barcodes: Штрихкоды отправления
193
+ cancellation: Информация об отмене
194
+ courier: Данные о курьере
195
+ customer: Данные о покупателе
196
+ delivering_date: Дата передачи отправления в доставку
197
+ delivery_method: Метод доставки
198
+ delivery_price: Стоимость доставки
199
+ financial_data: Данные о стоимости товара
200
+ in_process_at: Дата и время начала обработки отправления
201
+ is_express: Признак быстрой доставки Ozon Express
202
+ is_multibox: Признак многокоробочного товара
203
+ legal_info: Юридическая информация о покупателе
204
+ multi_box_qty: Количество коробок
205
+ optional: Список товаров с дополнительными характеристиками
206
+ order_id: Идентификатор заказа
207
+ order_number: Номер заказа
208
+ parent_posting_number: Номер родительского отправления
209
+ pickup_code_verified_at: Дата успешной валидации кода курьера
210
+ posting_number: Номер отправления
211
+ product_exemplars: Информация по продуктам и их экземплярам (ответ содержит поле product_exemplars, если в запросе передан признак with_.product_exemplars = true)
212
+ products: Список товаров в отправлении
213
+ provider_status: Статус службы доставки
214
+ prr_option: Информация об услуге погрузочно-разгрузочных работ
215
+ related_postings: Связанные отправления
216
+ related_weight_postings: Список номеров связанных весовых отправлений
217
+ quantum_id: Идентификатор эконом-товара
218
+ requirements: Требования к товарам
219
+ shipment_date: Дата сборки отправления
220
+ status: Статус отправления
221
+ substatus: Подстатус отправления
222
+ previous_substatus: Предыдущий подстатус отправления
223
+ tpl_integration_type: Тип интеграции со службой доставки
224
+ tracking_number: Трек-номер отправления
225
+ tariffication: Информация по тарификации отгрузки
226
+ """
227
+ additional_data: Optional[list[PostingFBSGetResultAdditionalData]] = Field(
228
+ default_factory=list, description="Дополнительная информация."
229
+ )
230
+ courier: Optional[PostingFBSGetResultCourier] = Field(
231
+ None, description="Данные о курьере."
232
+ )
233
+ delivery_price: Optional[str] = Field(
234
+ None, description="Стоимость доставки."
235
+ )
236
+ product_exemplars: Optional[PostingFBSGetResultProductExemplars] = Field(
237
+ None, description="Информация по продуктам и их экземплярам. Ответ содержит поле product_exemplars, если в запросе передан признак with.product_exemplars = true."
238
+ )
239
+ provider_status: Optional[str] = Field(
240
+ None, description="Статус службы доставки."
241
+ )
242
+ prr_option: Optional[PostingFBSGetResultPrrOption] = Field(
243
+ None, description="Информация об услуге погрузочно-разгрузочных работ. Актуально для КГТ-отправлений с доставкой силами продавца или интегрированной службой."
244
+ )
245
+ related_postings: Optional[PostingFBSGetResultRelatedPostings] = Field(
246
+ None, description="Связанные отправления."
247
+ )
248
+ related_weight_postings: Optional[list[str]] = Field(
249
+ default_factory=list, description="Список номеров связанных весовых отправлений."
250
+ )
251
+ previous_substatus: Optional[PostingSubstatus] = Field(
252
+ None, description="Предыдущий подстатус отправления."
253
+ )
254
+
255
+
256
+ class PostingFBSGetResponse(BaseModel):
257
+ """Информация об отправлении.
258
+
259
+ Attributes:
260
+ result: Информация об отправлении
261
+ """
262
+ result: PostingFBSGetResult = Field(
263
+ ..., description="Детализированная информация об отправлении."
264
+ )
@@ -4,6 +4,7 @@ from typing import Optional
4
4
 
5
5
  from pydantic import BaseModel, Field, model_validator
6
6
 
7
+ from .entities import PostingFBSFilterWith
7
8
  from .entities.posting__posting import PostingFBSPosting
8
9
  from ..mixins import DateTimeSerializationMixin
9
10
  from ...common.enumerations.postings import PostingStatus
@@ -36,33 +37,6 @@ class PostingFBSListRequestFilterLastChangedStatusDate(DateTimeSerializationMixi
36
37
  ])
37
38
 
38
39
 
39
- class PostingFBSListFilterWith(BaseModel):
40
- """Дополнительные поля, которые нужно добавить в ответ.
41
-
42
- Attributes:
43
- analytics_data: Добавить в ответ данные аналитики
44
- barcodes: Добавить в ответ штрихкоды отправления
45
- legal_info: Добавить в ответ юридическую информацию
46
- financial_data: Добавить в ответ финансовые данные
47
- translit: Выполнить транслитерацию возвращаемых значений
48
- """
49
- analytics_data: Optional[bool] = Field(
50
- False, description="Добавить в ответ данные аналитики."
51
- )
52
- barcodes: Optional[bool] = Field(
53
- False, description="Добавить в ответ штрихкоды отправления."
54
- )
55
- legal_info: Optional[bool] = Field(
56
- False, description="Добавить в ответ юридическую информацию."
57
- )
58
- financial_data: Optional[bool] = Field(
59
- False, description="Добавить в ответ финансовые данные."
60
- )
61
- translit: Optional[bool] = Field(
62
- False, description="Выполнить транслитерацию возвращаемых значений."
63
- )
64
-
65
-
66
40
  class PostingFBSListFilter(DateTimeSerializationMixin, BaseModel):
67
41
  """Фильтр запроса на получение информации об отправлениях FBS.
68
42
 
@@ -135,6 +109,8 @@ class PostingFBSListRequest(BaseRequestOffset):
135
109
  offset: Количество элементов, которое будет пропущено в ответе
136
110
  with_: Дополнительные поля, которые нужно добавить в ответ
137
111
  """
112
+ model_config = {'populate_by_name': True}
113
+
138
114
  dir: Optional[SortingDirection] = Field(
139
115
  SortingDirection.ASC, description="Направление сортировки."
140
116
  )
@@ -145,7 +121,7 @@ class PostingFBSListRequest(BaseRequestOffset):
145
121
  1000, description="Количество значений в ответе.",
146
122
  ge=1, le=1000,
147
123
  )
148
- with_: Optional[PostingFBSListFilterWith] = Field(
124
+ with_: Optional[PostingFBSFilterWith] = Field(
149
125
  None, description="Дополнительные поля, которые нужно добавить в ответ.",
150
126
  alias="with",
151
127
  )
@@ -4,6 +4,7 @@ from typing import Optional
4
4
 
5
5
  from pydantic import BaseModel, Field, model_validator
6
6
 
7
+ from .entities import PostingFBSFilterWith
7
8
  from .entities.posting__posting import PostingFBSPosting
8
9
  from ..mixins import DateTimeSerializationMixin
9
10
  from ...common.enumerations.postings import PostingStatus
@@ -32,33 +33,6 @@ class PostingFBSUnfulfilledListRequestFilterLastChangedStatusDate(BaseModel):
32
33
  )
33
34
 
34
35
 
35
- class PostingFBSUnfulfilledListFilterWith(BaseModel):
36
- """Дополнительные поля, которые нужно добавить в ответ.
37
-
38
- Attributes:
39
- analytics_data: Добавить в ответ данные аналитики (опционально)
40
- barcodes: Добавить в ответ штрихкоды отправления (опционально)
41
- financial_data: Добавить в ответ финансовые данные (опционально)
42
- legal_info: Добавить в ответ юридическую информацию (опционально)
43
- translit: Выполнить транслитерацию возвращаемых значений (опционально)
44
- """
45
- analytics_data: Optional[bool] = Field(
46
- False, description="Добавить в ответ данные аналитики."
47
- )
48
- barcodes: Optional[bool] = Field(
49
- False, description="Добавить в ответ штрихкоды отправления."
50
- )
51
- financial_data: Optional[bool] = Field(
52
- False, description="Добавить в ответ финансовые данные."
53
- )
54
- legal_info: Optional[bool] = Field(
55
- False, description="Добавить в ответ юридическую информацию."
56
- )
57
- translit: Optional[bool] = Field(
58
- False, description="Выполнить транслитерацию возвращаемых значений."
59
- )
60
-
61
-
62
36
  class PostingFBSUnfulfilledListFilter(DateTimeSerializationMixin, BaseModel):
63
37
  """Фильтр запроса на получение информации о необработанных отправлениях FBS и rFBS
64
38
  за указанный период времени (максимум 1 год).
@@ -158,7 +132,7 @@ class PostingFBSUnfulfilledListRequest(BaseRequestOffset):
158
132
  1000, description="Количество значений в ответе.",
159
133
  ge=1, le=1000,
160
134
  )
161
- with_: Optional[PostingFBSUnfulfilledListFilterWith] = Field(
135
+ with_: Optional[PostingFBSFilterWith] = Field(
162
136
  None, description="Дополнительные поля, которые нужно добавить в ответ.",
163
137
  alias="with",
164
138
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ozonapi-async
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  Summary: Асинхронный клиент для работы с API маркетплейса Ozon
5
5
  Author: Alexander Ulianov
6
6
  License: MIT
@@ -377,7 +377,7 @@ pytest --cov=ozonapi --cov-report=html
377
377
  |---|---|---|---|
378
378
  | ✓ | `/v3/posting/fbs/unfulfilled/list` | Список необработанных отправлений | `posting_fbs_unfulfilled_list()` |
379
379
  | ✓ | `/v3/posting/fbs/list` | Список отправлений | `posting_fbs_list()` |
380
- | | `/v3/posting/fbs/get` | Получить информацию об отправлении по идентификатору | `posting_fbs_get()` |
380
+ | | `/v3/posting/fbs/get` | Получить информацию об отправлении по идентификатору | `posting_fbs_get()` |
381
381
  | ☐ | `/v2/posting/fbs/get-by-barcode` | Получить информацию об отправлении по штрихкоду | `posting_fbs_get_by_barcode()` |
382
382
  | ☐ | `/v3/posting/multiboxqty/set` | Указать количество коробок для многокоробочных отправлений | `posting_multiboxqty_set()` |
383
383
  | ☐ | `/v2/posting/fbs/product/change` | Добавить вес для весовых товаров в отправлении | `posting_fbs_product_change()` |
@@ -42,6 +42,7 @@ src/ozonapi/seller/schemas/barcodes/v1__barcode_generate.py
42
42
  src/ozonapi/seller/schemas/beta/__init__.py
43
43
  src/ozonapi/seller/schemas/beta/v1__analytics_stocks.py
44
44
  src/ozonapi/seller/schemas/fbs/__init__.py
45
+ src/ozonapi/seller/schemas/fbs/v3__posting_fbs_get.py
45
46
  src/ozonapi/seller/schemas/fbs/v3__posting_fbs_list.py
46
47
  src/ozonapi/seller/schemas/fbs/v3__posting_fbs_unfulfilled_list.py
47
48
  src/ozonapi/seller/schemas/fbs/entities/__init__.py
@@ -52,6 +53,7 @@ src/ozonapi/seller/schemas/fbs/entities/posting__cancellation.py
52
53
  src/ozonapi/seller/schemas/fbs/entities/posting__customer.py
53
54
  src/ozonapi/seller/schemas/fbs/entities/posting__customer_address.py
54
55
  src/ozonapi/seller/schemas/fbs/entities/posting__delivery_method.py
56
+ src/ozonapi/seller/schemas/fbs/entities/posting__filter_with.py
55
57
  src/ozonapi/seller/schemas/fbs/entities/posting__financial_data.py
56
58
  src/ozonapi/seller/schemas/fbs/entities/posting__financial_data_products.py
57
59
  src/ozonapi/seller/schemas/fbs/entities/posting__legal_info.py
File without changes
File without changes