ozonapi-async 0.4.0__tar.gz → 0.6.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 (101) hide show
  1. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/PKG-INFO +4 -4
  2. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/pyproject.toml +1 -1
  3. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/readme.md +3 -3
  4. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/__init__.py +1 -1
  5. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/common/enumerations/postings.py +2 -0
  6. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/core/config.py +1 -1
  7. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/methods/fbs.py +136 -2
  8. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/__init__.py +16 -7
  9. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/__init__.py +5 -16
  10. ozonapi_async-0.6.0/src/ozonapi/seller/schemas/fbs/entities/posting__filter_with.py +30 -0
  11. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__posting.py +3 -3
  12. ozonapi_async-0.4.0/src/ozonapi/seller/schemas/fbs/entities/posting__products.py → ozonapi_async-0.6.0/src/ozonapi/seller/schemas/fbs/entities/posting__product.py +17 -6
  13. ozonapi_async-0.6.0/src/ozonapi/seller/schemas/fbs/v2__fbs_posting_delivering.py +2 -0
  14. ozonapi_async-0.6.0/src/ozonapi/seller/schemas/fbs/v2__posting_fbs_get_by_barcode.py +65 -0
  15. ozonapi_async-0.6.0/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_get.py +264 -0
  16. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_list.py +4 -28
  17. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_unfulfilled_list.py +2 -28
  18. ozonapi_async-0.6.0/src/ozonapi/seller/schemas/fbs/v3__posting_multiboxqty_set.py +40 -0
  19. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi_async.egg-info/PKG-INFO +4 -4
  20. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi_async.egg-info/SOURCES.txt +6 -1
  21. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/LICENSE +0 -0
  22. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/setup.cfg +0 -0
  23. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/__init__.py +0 -0
  24. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/common/__init__.py +0 -0
  25. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/common/enumerations/__init__.py +0 -0
  26. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/common/enumerations/delivery.py +0 -0
  27. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/common/enumerations/localization.py +0 -0
  28. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/common/enumerations/prices.py +0 -0
  29. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/common/enumerations/products.py +0 -0
  30. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/common/enumerations/requests.py +0 -0
  31. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/common/enumerations/warehouses.py +0 -0
  32. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/core/__init__.py +0 -0
  33. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/core/core.py +0 -0
  34. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/core/exceptions.py +0 -0
  35. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/core/method_rate_limiter.py +0 -0
  36. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/core/rate_limiter.py +0 -0
  37. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/core/sessions.py +0 -0
  38. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/methods/__init__.py +0 -0
  39. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/methods/attributes_and_characteristics.py +0 -0
  40. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/methods/barcodes.py +0 -0
  41. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/methods/beta.py +0 -0
  42. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/methods/prices_and_stocks.py +0 -0
  43. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/methods/products.py +0 -0
  44. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/methods/warehouses.py +0 -0
  45. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/__init__.py +0 -0
  46. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/__init__.py +0 -0
  47. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/base.py +0 -0
  48. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute.py +0 -0
  49. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute_values.py +0 -0
  50. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute_values_search.py +0 -0
  51. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_tree.py +0 -0
  52. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/barcodes/__init__.py +0 -0
  53. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/barcodes/v1__barcode_add.py +0 -0
  54. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/barcodes/v1__barcode_generate.py +0 -0
  55. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/base.py +0 -0
  56. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/beta/__init__.py +0 -0
  57. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/beta/v1__analytics_stocks.py +0 -0
  58. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__addressee.py +0 -0
  59. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__analytics_data.py +0 -0
  60. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__barcodes.py +0 -0
  61. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__cancellation.py +0 -0
  62. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__customer.py +0 -0
  63. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__customer_address.py +0 -0
  64. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__delivery_method.py +0 -0
  65. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__financial_data.py +0 -0
  66. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__financial_data_products.py +0 -0
  67. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__legal_info.py +0 -0
  68. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__optional.py +0 -0
  69. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__requirements.py +0 -0
  70. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/fbs/entities/posting__tariffication.py +0 -0
  71. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/mixins.py +0 -0
  72. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/prices_and_stocks/__init__.py +0 -0
  73. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/prices_and_stocks/base.py +0 -0
  74. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/prices_and_stocks/v1__product_import_prices.py +0 -0
  75. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/prices_and_stocks/v1__product_info_stocks_by_warehouse_fbs.py +0 -0
  76. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/prices_and_stocks/v2__products_stocks.py +0 -0
  77. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/prices_and_stocks/v4__product_info_stocks.py +0 -0
  78. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/prices_and_stocks/v5__product_info_prices.py +0 -0
  79. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/__init__.py +0 -0
  80. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/base.py +0 -0
  81. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v1__product_archive.py +0 -0
  82. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v1__product_attributes_update.py +0 -0
  83. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v1__product_import_by_sku.py +0 -0
  84. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v1__product_import_info.py +0 -0
  85. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v1__product_info_subscription.py +0 -0
  86. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v1__product_rating_by_sku.py +0 -0
  87. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v1__product_related_sku_get.py +0 -0
  88. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v1__product_unarchive.py +0 -0
  89. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v1__product_update_offer_id.py +0 -0
  90. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v2__product_pictures_info.py +0 -0
  91. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v2__products_delete.py +0 -0
  92. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v3__product_import.py +0 -0
  93. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v3__product_info_list.py +0 -0
  94. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v3__product_list.py +0 -0
  95. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/products/v4__product_info_attributes.py +0 -0
  96. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/warehouses/__init__.py +0 -0
  97. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/warehouses/v1__delivery_method_list.py +0 -0
  98. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi/seller/schemas/warehouses/v1__warehouse_list.py +0 -0
  99. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi_async.egg-info/dependency_links.txt +0 -0
  100. {ozonapi_async-0.4.0 → ozonapi_async-0.6.0}/src/ozonapi_async.egg-info/requires.txt +0 -0
  101. {ozonapi_async-0.4.0 → ozonapi_async-0.6.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.6.0
4
4
  Summary: Асинхронный клиент для работы с API маркетплейса Ozon
5
5
  Author: Alexander Ulianov
6
6
  License: MIT
@@ -377,9 +377,9 @@ 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()` |
381
- | | `/v2/posting/fbs/get-by-barcode` | Получить информацию об отправлении по штрихкоду | `posting_fbs_get_by_barcode()` |
382
- | | `/v3/posting/multiboxqty/set` | Указать количество коробок для многокоробочных отправлений | `posting_multiboxqty_set()` |
380
+ | | `/v3/posting/fbs/get` | Получить информацию об отправлении по идентификатору | `posting_fbs_get()` |
381
+ | | `/v2/posting/fbs/get-by-barcode` | Получить информацию об отправлении по штрихкоду | `posting_fbs_get_by_barcode()` |
382
+ | | `/v3/posting/multiboxqty/set` | Указать количество коробок для многокоробочных отправлений | `posting_multiboxqty_set()` |
383
383
  | ☐ | `/v2/posting/fbs/product/change` | Добавить вес для весовых товаров в отправлении | `posting_fbs_product_change()` |
384
384
  | ☐ | `/v2/posting/fbs/product/country/list` | Список доступных стран-изготовителей | `posting_fbs_product_country_list()` |
385
385
  | ☐ | `/v2/posting/fbs/product/country/set` | Добавить информацию о стране-изготовителе товара | `posting_fbs_product_country_set()` |
@@ -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.6.0"
8
8
  description = "Асинхронный клиент для работы с API маркетплейса Ozon"
9
9
  readme = "readme.md"
10
10
  keywords = ["ozon", "api", "async", "ecommerce", "seller", "client"]
@@ -335,9 +335,9 @@ 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()` |
339
- | | `/v2/posting/fbs/get-by-barcode` | Получить информацию об отправлении по штрихкоду | `posting_fbs_get_by_barcode()` |
340
- | | `/v3/posting/multiboxqty/set` | Указать количество коробок для многокоробочных отправлений | `posting_multiboxqty_set()` |
338
+ | | `/v3/posting/fbs/get` | Получить информацию об отправлении по идентификатору | `posting_fbs_get()` |
339
+ | | `/v2/posting/fbs/get-by-barcode` | Получить информацию об отправлении по штрихкоду | `posting_fbs_get_by_barcode()` |
340
+ | | `/v3/posting/multiboxqty/set` | Указать количество коробок для многокоробочных отправлений | `posting_multiboxqty_set()` |
341
341
  | ☐ | `/v2/posting/fbs/product/change` | Добавить вес для весовых товаров в отправлении | `posting_fbs_product_change()` |
342
342
  | ☐ | `/v2/posting/fbs/product/country/list` | Список доступных стран-изготовителей | `posting_fbs_product_country_list()` |
343
343
  | ☐ | `/v2/posting/fbs/product/country/set` | Добавить информацию о стране-изготовителе товара | `posting_fbs_product_country_set()` |
@@ -2,7 +2,7 @@
2
2
  Асинхронный интерфейс для взаимодействия с API маркетплейса Ozon.
3
3
  """
4
4
 
5
- __version__ = "0.4.0"
5
+ __version__ = "0.6.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,7 @@
1
1
  from ..core import APIManager
2
2
  from ..schemas.fbs import PostingFBSUnfulfilledListRequest, PostingFBSUnfulfilledListResponse, PostingFBSListResponse, \
3
- PostingFBSListRequest
3
+ PostingFBSListRequest, PostingFBSGetRequest, PostingFBSGetResponse, PostingFBSGetByBarcodeResponse, \
4
+ PostingFBSGetByBarcodeRequest, PostingFBSMultiBoxQtySetResponse, PostingFBSMultiBoxQtySetRequest
4
5
 
5
6
 
6
7
  class SellerFBSAPI(APIManager):
@@ -160,4 +161,137 @@ class SellerFBSAPI(APIManager):
160
161
  endpoint="posting/fbs/list",
161
162
  json=request.model_dump(by_alias=True)
162
163
  )
163
- return PostingFBSListResponse(**response)
164
+ return PostingFBSListResponse(**response)
165
+
166
+ async def posting_fbs_get(
167
+ self: "SellerFBSAPI",
168
+ request: PostingFBSGetRequest
169
+ ) -> PostingFBSGetResponse:
170
+ """Метод для получения информации об отправлении FBS по его номеру.
171
+
172
+ Notes:
173
+ • Чтобы получать актуальную дату отгрузки, регулярно обновляйте информацию об отправлениях или подключите пуш-уведомления.
174
+ • Для получения дополнительных данных используйте параметр `with_` в запросе.
175
+
176
+ References:
177
+ https://docs.ozon.ru/api/seller/#operation/PostingAPI_GetFbsPostingV3
178
+
179
+ Args:
180
+ request: Запрос на получение информации об отправлении FBS по схеме `PostingFBSGetRequest`
181
+
182
+ Returns:
183
+ Детализированная информация об отправлении по схеме `PostingFBSGetResponse`
184
+
185
+ Examples:
186
+ Базовое применение:
187
+ async with SellerAPI(client_id, api_key) as api:
188
+ result = await api.posting_fbs_get(
189
+ PostingFBSGetRequest(
190
+ posting_number="57195475-0050-3"
191
+ )
192
+ )
193
+
194
+ Пример с дополнительными полями:
195
+ async with SellerAPI(client_id, api_key) as api:
196
+ result = await api.posting_fbs_get(
197
+ PostingFBSGetRequest(
198
+ posting_number="57195475-0050-3",
199
+ with_=PostingFBSGetRequestWith(
200
+ analytics_data=True,
201
+ barcodes=True,
202
+ financial_data=True,
203
+ legal_info=False,
204
+ product_exemplars=True,
205
+ related_postings=True,
206
+ translit=False
207
+ )
208
+ )
209
+ )
210
+ """
211
+ response = await self._request(
212
+ method="post",
213
+ api_version="v3",
214
+ endpoint="posting/fbs/get",
215
+ json=request.model_dump(by_alias=True)
216
+ )
217
+ return PostingFBSGetResponse(**response)
218
+
219
+ async def posting_fbs_get_by_barcode(
220
+ self: "SellerFBSAPI",
221
+ request: PostingFBSGetByBarcodeRequest
222
+ ) -> PostingFBSGetByBarcodeResponse:
223
+ """Метод для получения информации об отправлении FBS по штрихкоду.
224
+
225
+ Notes:
226
+ • Штрихкод отправления можно получить с помощью методов posting_fbs_get(), posting_fbs_list(), posting_fbs_unfulfilled_list() в массиве barcodes
227
+ • Метод возвращает основную информацию об отправлении: статус, данные о заказе, товары и штрихкоды.
228
+ • Для получения дополнительных данных (финансовой информации, аналитики и т.д.) используйте метод posting_fbs_get().
229
+
230
+ References:
231
+ https://docs.ozon.ru/api/seller/?__rr=1#operation/PostingAPI_GetFbsPostingByBarcode
232
+
233
+ Args:
234
+ request: Запрос на получение информации об отправлении по штрихкоду по схеме `PostingFBSGetByBarcodeRequest`
235
+
236
+ Returns:
237
+ Информация об отправлении FBS по схеме `PostingFBSGetByBarcodeResponse`
238
+
239
+ Examples:
240
+ async with SellerAPI(client_id, api_key) as api:
241
+ result = await api.posting_fbs_get_by_barcode(
242
+ PostingFBSGetByBarcodeRequest(
243
+ barcode="20325804886000"
244
+ )
245
+ )
246
+ """
247
+ response = await self._request(
248
+ method="post",
249
+ api_version="v2",
250
+ endpoint="posting/fbs/get-by-barcode",
251
+ json=request.model_dump()
252
+ )
253
+ return PostingFBSGetByBarcodeResponse(**response["result"])
254
+
255
+ async def posting_fbs_multiboxqty_set(
256
+ self: "SellerFBSAPI",
257
+ request: PostingFBSMultiBoxQtySetRequest
258
+ ) -> PostingFBSMultiBoxQtySetResponse:
259
+ """Метод для передачи количества коробок для отправлений, в которых есть многокоробочные товары.
260
+
261
+ Notes:
262
+ • Метод используется при работе по схеме rFBS Агрегатор — с доставкой партнёрами Ozon.
263
+ • Используется только для многокоробочных отправлений, где товары упакованы в несколько коробок.
264
+ • Количество коробок должно быть целым положительным числом.
265
+ • После успешного выполнения метода система учитывает указанное количество коробок при дальнейшей обработке отправления.
266
+
267
+ References:
268
+ https://docs.ozon.ru/api/seller/?__rr=1#operation/PostingAPI_PostingMultiBoxQtySetV3
269
+
270
+ Args:
271
+ request: Запрос на указание количества коробок для многокоробочного отправления по схеме `PostingFBSMultiBoxQtySetRequest`
272
+
273
+ Returns:
274
+ Результат выполнения операции по схеме `PostingFBSMultiBoxQtySetResponse`
275
+
276
+ Examples:
277
+ Пример с проверкой результата:
278
+ async with SellerAPI(client_id, api_key) as api:
279
+ result = await api.posting_multiboxqty_set(
280
+ PostingFBSMultiBoxQtySetRequest(
281
+ posting_number="57195475-0050-3",
282
+ multi_box_qty=3
283
+ )
284
+ )
285
+
286
+ if result.result.result:
287
+ print("Количество коробок успешно передано")
288
+ else:
289
+ print("Произошла ошибка при указании количества коробок")
290
+ """
291
+ response = await self._request(
292
+ method="post",
293
+ api_version="v3",
294
+ endpoint="posting/fbs/multi-box-qty/set",
295
+ json=request.model_dump()
296
+ )
297
+ return PostingFBSMultiBoxQtySetResponse(**response)
@@ -9,39 +9,48 @@ __all__ = [
9
9
  "PostingFBSCustomer",
10
10
  "PostingFBSCustomerAddress",
11
11
  "PostingFBSDeliveryMethod",
12
+ "PostingFBSFilterWith",
12
13
  "PostingFBSFinancialData",
13
14
  "PostingFBSFinancialDataProducts",
15
+ "PostingFBSGetByBarcodeRequest",
16
+ "PostingFBSGetByBarcodeResponse",
17
+ "PostingFBSGetRequest",
18
+ "PostingFBSGetResponse",
14
19
  "PostingFBSLegalInfo",
15
20
  "PostingFBSOptional",
16
21
  "PostingFBSPosting",
17
- "PostingFBSProducts",
22
+ "PostingFBSProduct",
23
+ "PostingFBSProductDetailed",
18
24
  "PostingFBSRequirements",
19
25
  "PostingFBSTariffication",
20
26
  "PostingFBSListRequestFilterLastChangedStatusDate",
21
- "PostingFBSListFilterWith",
22
27
  "PostingFBSListFilter",
23
28
  "PostingFBSListRequest",
24
29
  "PostingFBSListResult",
25
30
  "PostingFBSListResponse",
31
+ "PostingFBSMultiBoxQtySetRequest",
32
+ "PostingFBSMultiBoxQtySetResponse",
26
33
  "PostingFBSUnfulfilledListRequest",
27
34
  "PostingFBSUnfulfilledListResponse",
28
35
  "PostingFBSUnfulfilledListRequestFilterLastChangedStatusDate",
29
- "PostingFBSUnfulfilledListFilterWith",
30
36
  "PostingFBSUnfulfilledListFilter",
31
37
  "PostingFBSUnfulfilledListResult",
32
38
  ]
33
39
 
34
40
  from .entities import PostingFBSAddressee, PostingFBSAnalyticsData, PostingFBSBarcodes, PostingFBSCancellation, \
35
41
  PostingFBSCustomer, PostingFBSCustomerAddress, PostingFBSDeliveryMethod, PostingFBSFinancialData, \
36
- PostingFBSFinancialDataProducts, PostingFBSLegalInfo, PostingFBSOptional, PostingFBSPosting, PostingFBSProducts, \
37
- PostingFBSRequirements, PostingFBSTariffication
38
- from .v3__posting_fbs_list import PostingFBSListRequestFilterLastChangedStatusDate, PostingFBSListFilterWith, \
42
+ PostingFBSFinancialDataProducts, PostingFBSLegalInfo, PostingFBSOptional, PostingFBSPosting, \
43
+ PostingFBSProductDetailed, \
44
+ PostingFBSRequirements, PostingFBSTariffication, PostingFBSFilterWith, PostingFBSProduct
45
+ from .v2__posting_fbs_get_by_barcode import PostingFBSGetByBarcodeRequest, PostingFBSGetByBarcodeResponse
46
+ from .v3__posting_fbs_get import PostingFBSGetRequest, PostingFBSGetResponse
47
+ from .v3__posting_fbs_list import PostingFBSListRequestFilterLastChangedStatusDate, \
39
48
  PostingFBSListFilter, PostingFBSListRequest, PostingFBSListResult, PostingFBSListResponse
49
+ from .v3__posting_multiboxqty_set import PostingFBSMultiBoxQtySetResponse, PostingFBSMultiBoxQtySetRequest
40
50
  from .v3__posting_fbs_unfulfilled_list import (
41
51
  PostingFBSUnfulfilledListRequest,
42
52
  PostingFBSUnfulfilledListResponse,
43
53
  PostingFBSUnfulfilledListRequestFilterLastChangedStatusDate,
44
- PostingFBSUnfulfilledListFilterWith,
45
54
  PostingFBSUnfulfilledListFilter,
46
55
  PostingFBSUnfulfilledListResult,
47
56
  )
@@ -11,37 +11,26 @@ __all__ = [
11
11
  "PostingFBSLegalInfo",
12
12
  "PostingFBSOptional",
13
13
  "PostingFBSPosting",
14
- "PostingFBSProducts",
14
+ "PostingFBSProduct",
15
+ "PostingFBSProductDetailed",
15
16
  "PostingFBSRequirements",
16
17
  "PostingFBSTariffication",
18
+ "PostingFBSFilterWith",
17
19
  ]
18
20
 
19
21
  from .posting__analytics_data import PostingFBSAnalyticsData
20
-
21
22
  from .posting__barcodes import PostingFBSBarcodes
22
-
23
23
  from .posting__cancellation import PostingFBSCancellation
24
-
25
24
  from .posting__customer import PostingFBSCustomer
26
-
27
25
  from .posting__customer_address import PostingFBSCustomerAddress
28
-
29
26
  from .posting__delivery_method import PostingFBSDeliveryMethod
30
-
27
+ from .posting__filter_with import PostingFBSFilterWith
31
28
  from .posting__financial_data import PostingFBSFinancialData
32
-
33
29
  from .posting__financial_data_products import PostingFBSFinancialDataProducts
34
-
35
30
  from .posting__legal_info import PostingFBSLegalInfo
36
-
37
31
  from .posting__optional import PostingFBSOptional
38
-
39
32
  from .posting__posting import PostingFBSPosting
40
-
41
- from .posting__products import PostingFBSProducts
42
-
33
+ from .posting__product import PostingFBSProductDetailed, PostingFBSProduct
43
34
  from .posting__requirements import PostingFBSRequirements
44
-
45
35
  from .posting__tariffication import PostingFBSTariffication
46
-
47
36
  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
+ )
@@ -14,7 +14,7 @@ from .posting__delivery_method import PostingFBSDeliveryMethod
14
14
  from .posting__financial_data import PostingFBSFinancialData
15
15
  from .posting__legal_info import PostingFBSLegalInfo
16
16
  from .posting__optional import PostingFBSOptional
17
- from .posting__products import PostingFBSProducts
17
+ from .posting__product import PostingFBSProductDetailed
18
18
  from .posting__requirements import PostingFBSRequirements
19
19
  from .posting__tariffication import PostingFBSTariffication
20
20
 
@@ -114,14 +114,14 @@ class PostingFBSPosting(BaseModel):
114
114
  posting_number: str = Field(
115
115
  ..., description="Номер отправления."
116
116
  )
117
- products: list[PostingFBSProducts] = Field(
117
+ products: list[PostingFBSProductDetailed] = Field(
118
118
  ..., description="Список товаров в отправлении."
119
119
  )
120
120
  prr_option: Optional[PrrOption] = Field(
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="""
@@ -5,8 +5,8 @@ from pydantic import Field, BaseModel
5
5
  from ....common.enumerations.localization import CurrencyCode
6
6
 
7
7
 
8
- class PostingFBSProducts(BaseModel):
9
- """Список товаров в отправлении.
8
+ class PostingFBSProduct(BaseModel):
9
+ """Информация о товаре в отправлении.
10
10
 
11
11
  Attributes:
12
12
  name: Название товара
@@ -14,10 +14,6 @@ class PostingFBSProducts(BaseModel):
14
14
  price: Цена товара
15
15
  quantity: Количество товара в отправлении
16
16
  sku: Идентификатор товара в системе Ozon
17
- currency_code: Валюта цен
18
- is_blr_traceable: Признак прослеживаемости товара
19
- is_marketplace_buyout: Признак выкупа товара в ЕАЭС и другие страны
20
- imei: Список IMEI мобильных устройств
21
17
  """
22
18
  name: str = Field(
23
19
  ..., description="Название товара."
@@ -34,6 +30,21 @@ class PostingFBSProducts(BaseModel):
34
30
  sku: int = Field(
35
31
  ..., description="Идентификатор товара в системе Ozon — SKU."
36
32
  )
33
+
34
+ class PostingFBSProductDetailed(PostingFBSProduct):
35
+ """Детализированная информация о товаре в отправлении.
36
+
37
+ Attributes:
38
+ name: Название товара
39
+ offer_id: Идентификатор товара в системе продавца
40
+ price: Цена товара
41
+ quantity: Количество товара в отправлении
42
+ sku: Идентификатор товара в системе Ozon
43
+ currency_code: Валюта цен
44
+ is_blr_traceable: Признак прослеживаемости товара
45
+ is_marketplace_buyout: Признак выкупа товара в ЕАЭС и другие страны
46
+ imei: Список IMEI мобильных устройств
47
+ """
37
48
  currency_code: CurrencyCode = Field(
38
49
  ..., description="Валюта ваших цен. Совпадает с валютой, которая установлена в настройках личного кабинета."
39
50
  )
@@ -0,0 +1,2 @@
1
+ """https://docs.ozon.com/api/seller/?__rr=1#operation/PostingAPI_FbsPostingDelivering"""
2
+
@@ -0,0 +1,65 @@
1
+ """https://docs.ozon.com/api/seller/?__rr=1#operation/PostingAPI_GetFbsPostingByBarcode"""
2
+ import datetime
3
+ from typing import Optional
4
+
5
+ from pydantic import BaseModel, Field
6
+
7
+ from .entities import PostingFBSBarcodes, PostingFBSProduct
8
+
9
+
10
+ class PostingFBSGetByBarcodeRequest(BaseModel):
11
+ """Запрос на получение информации об отправлении по штрихкоду.
12
+
13
+ Attributes:
14
+ barcode: Штрихкод отправления (можно получить с помощью методов posting_fbs_get(), posting_fbs_list() и posting_fbs_unfulfilled_list() в массиве barcodes)
15
+ """
16
+ barcode: str = Field(
17
+ ..., title="Штрихкод отправления (можно получить с помощью методов posting_fbs_get(), posting_fbs_list() и posting_fbs_unfulfilled_list() в массиве barcodes)."
18
+ )
19
+
20
+
21
+ class PostingFBSGetByBarcodeResponse(BaseModel):
22
+ """Описывает схему ответа на запрос на получение информации об отправлении по штрихкоду.
23
+
24
+ Attributes:
25
+ barcodes: Штрихкоды отправления
26
+ cancel_reason_id: Идентификатор причины отмены отправления
27
+ created_at: Дата и время создания отправления
28
+ in_process_at: Дата и время начала обработки отправления
29
+ order_id: Идентификатор заказа, к которому относится отправление
30
+ order_number: Номер заказа, к которому относится отправление
31
+ posting_number: Номер отправления
32
+ products: Список товаров в отправлении
33
+ shipment_date: Дата и время, до которой необходимо собрать отправление (если отправление не собрать к этой дате — оно автоматически отменится)
34
+ status: Статус отправления
35
+ """
36
+ barcodes: PostingFBSBarcodes = Field(
37
+ ..., description="Штрихкоды отправления"
38
+ )
39
+ cancel_reason_id: Optional[int] = Field(
40
+ None, description="Идентификатор причины отмены отправления"
41
+ )
42
+ created_at: datetime.datetime = Field(
43
+ ..., description="Дата и время создания отправления"
44
+ )
45
+ in_process_at: Optional[datetime.datetime] = Field(
46
+ None, description="Дата и время начала обработки отправления"
47
+ )
48
+ order_id: int = Field(
49
+ ..., description="Идентификатор заказа, к которому относится отправление"
50
+ )
51
+ order_number: str = Field(
52
+ ..., description="Номер заказа, к которому относится отправление"
53
+ )
54
+ posting_number: str = Field(
55
+ ..., description="Номер отправления"
56
+ )
57
+ products: list[PostingFBSProduct] = Field(
58
+ ..., description="Список товаров в отправлении"
59
+ )
60
+ shipment_date: datetime.datetime = Field(
61
+ ..., description="Дата и время, до которой необходимо собрать отправление (если отправление не собрать к этой дате — оно автоматически отменится)"
62
+ )
63
+ status: str = Field(
64
+ ..., description="Статус отправления"
65
+ )