ozonapi-async 0.7.2__tar.gz → 0.7.3__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 (102) hide show
  1. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/PKG-INFO +1 -1
  2. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/pyproject.toml +1 -1
  3. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/__init__.py +1 -1
  4. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/core/config.py +1 -1
  5. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/core/core.py +17 -4
  6. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/core/exceptions.py +4 -0
  7. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/methods/fbs.py +2 -2
  8. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi_async.egg-info/PKG-INFO +1 -1
  9. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/LICENSE +0 -0
  10. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/readme.md +0 -0
  11. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/setup.cfg +0 -0
  12. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/__init__.py +0 -0
  13. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/common/__init__.py +0 -0
  14. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/common/enumerations/__init__.py +0 -0
  15. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/common/enumerations/delivery.py +0 -0
  16. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/common/enumerations/localization.py +0 -0
  17. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/common/enumerations/postings.py +0 -0
  18. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/common/enumerations/prices.py +0 -0
  19. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/common/enumerations/products.py +0 -0
  20. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/common/enumerations/requests.py +0 -0
  21. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/common/enumerations/warehouses.py +0 -0
  22. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/core/__init__.py +0 -0
  23. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/core/method_rate_limiter.py +0 -0
  24. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/core/rate_limiter.py +0 -0
  25. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/core/sessions.py +0 -0
  26. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/methods/__init__.py +0 -0
  27. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/methods/attributes_and_characteristics.py +0 -0
  28. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/methods/barcodes.py +0 -0
  29. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/methods/beta.py +0 -0
  30. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/methods/prices_and_stocks.py +0 -0
  31. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/methods/products.py +0 -0
  32. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/methods/warehouses.py +0 -0
  33. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/__init__.py +0 -0
  34. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/attributes_and_characteristics/__init__.py +0 -0
  35. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/attributes_and_characteristics/base.py +0 -0
  36. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute.py +0 -0
  37. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute_values.py +0 -0
  38. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_attribute_values_search.py +0 -0
  39. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/attributes_and_characteristics/v1__description_category_tree.py +0 -0
  40. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/barcodes/__init__.py +0 -0
  41. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/barcodes/v1__barcode_add.py +0 -0
  42. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/barcodes/v1__barcode_generate.py +0 -0
  43. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/base.py +0 -0
  44. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/beta/__init__.py +0 -0
  45. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/beta/v1__analytics_stocks.py +0 -0
  46. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/__init__.py +0 -0
  47. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/__init__.py +0 -0
  48. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__addressee.py +0 -0
  49. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__analytics_data.py +0 -0
  50. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__barcodes.py +0 -0
  51. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__cancellation.py +0 -0
  52. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__customer.py +0 -0
  53. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__customer_address.py +0 -0
  54. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__delivery_method.py +0 -0
  55. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__filter_with.py +0 -0
  56. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__financial_data.py +0 -0
  57. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__financial_data_products.py +0 -0
  58. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__legal_info.py +0 -0
  59. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__optional.py +0 -0
  60. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__posting.py +0 -0
  61. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__product.py +0 -0
  62. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__requirements.py +0 -0
  63. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/entities/posting__tariffication.py +0 -0
  64. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/v2__fbs_posting_delivering.py +0 -0
  65. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/v2__posting_fbs_get_by_barcode.py +0 -0
  66. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/v2__posting_fbs_product_change.py +0 -0
  67. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_get.py +0 -0
  68. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_list.py +0 -0
  69. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/v3__posting_fbs_unfulfilled_list.py +0 -0
  70. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/fbs/v3__posting_multiboxqty_set.py +0 -0
  71. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/mixins.py +0 -0
  72. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/prices_and_stocks/__init__.py +0 -0
  73. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/prices_and_stocks/base.py +0 -0
  74. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/prices_and_stocks/v1__product_import_prices.py +0 -0
  75. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/prices_and_stocks/v1__product_info_stocks_by_warehouse_fbs.py +0 -0
  76. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/prices_and_stocks/v2__products_stocks.py +0 -0
  77. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/prices_and_stocks/v4__product_info_stocks.py +0 -0
  78. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/prices_and_stocks/v5__product_info_prices.py +0 -0
  79. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/__init__.py +0 -0
  80. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/base.py +0 -0
  81. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v1__product_archive.py +0 -0
  82. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v1__product_attributes_update.py +0 -0
  83. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v1__product_import_by_sku.py +0 -0
  84. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v1__product_import_info.py +0 -0
  85. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v1__product_info_subscription.py +0 -0
  86. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v1__product_rating_by_sku.py +0 -0
  87. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v1__product_related_sku_get.py +0 -0
  88. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v1__product_unarchive.py +0 -0
  89. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v1__product_update_offer_id.py +0 -0
  90. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v2__product_pictures_info.py +0 -0
  91. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v2__products_delete.py +0 -0
  92. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v3__product_import.py +0 -0
  93. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v3__product_info_list.py +0 -0
  94. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v3__product_list.py +0 -0
  95. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/products/v4__product_info_attributes.py +0 -0
  96. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/warehouses/__init__.py +0 -0
  97. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/warehouses/v1__delivery_method_list.py +0 -0
  98. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi/seller/schemas/warehouses/v1__warehouse_list.py +0 -0
  99. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi_async.egg-info/SOURCES.txt +0 -0
  100. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi_async.egg-info/dependency_links.txt +0 -0
  101. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/src/ozonapi_async.egg-info/requires.txt +0 -0
  102. {ozonapi_async-0.7.2 → ozonapi_async-0.7.3}/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.7.2
3
+ Version: 0.7.3
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.7.2"
7
+ version = "0.7.3"
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.7.2"
5
+ __version__ = "0.7.3"
6
6
  __author__ = "Alexander Ulianov"
7
7
  __repository__ = "https://github.com/a-ulianov/OzonAPI"
8
8
  __docs__ = "https://github.com/a-ulianov/OzonAPI#readme"
@@ -36,7 +36,7 @@ class APIConfig(BaseSettings):
36
36
  description="Авторизационный ключ Ozon Seller API",
37
37
  )
38
38
  log_level: Optional[str] = Field(
39
- default="INFO",
39
+ default="DEBUG",
40
40
  description="Уровень логирования."
41
41
  )
42
42
  base_url: str = Field(
@@ -24,7 +24,7 @@ from .exceptions import (
24
24
  APIError,
25
25
  APIForbiddenError,
26
26
  APINotFoundError,
27
- APIServerError,
27
+ APIServerError, APITooManyRequestsError,
28
28
  )
29
29
 
30
30
  logger.remove()
@@ -64,7 +64,7 @@ class APIManager:
64
64
  api_key: Ключ API для аутентификации
65
65
  config: Конфигурация клиента
66
66
  """
67
- self._config = config or self.load_config()
67
+ self._config = self.load_config(config)
68
68
  self._client_id = client_id or self._config.client_id
69
69
  self._api_key = api_key or self._config.api_key
70
70
  self._instance_id = id(self)
@@ -95,10 +95,20 @@ class APIManager:
95
95
  logger.debug(f"API-клиент инициализирован для ClientID {self._client_id}")
96
96
 
97
97
  @classmethod
98
- def load_config(cls) -> APIConfig:
98
+ def load_config(cls, user_config: APIConfig | None = None) -> APIConfig:
99
99
  """Создает конфигурацию с загрузкой из .env файла."""
100
100
  load_dotenv()
101
- return APIConfig()
101
+ base_config = APIConfig()
102
+
103
+ if user_config is None:
104
+ return base_config
105
+ else:
106
+ return base_config.model_copy(
107
+ update=user_config.model_dump(
108
+ exclude_unset=True,
109
+ exclude_defaults=True
110
+ )
111
+ )
102
112
 
103
113
  @classmethod
104
114
  async def initialize(cls) -> None:
@@ -220,6 +230,7 @@ class APIManager:
220
230
  (
221
231
  # Обрабатываемые механизмом retry ошибки
222
232
  APIServerError,
233
+ APITooManyRequestsError,
223
234
  asyncio.TimeoutError
224
235
  )
225
236
  ),
@@ -264,6 +275,7 @@ class APIManager:
264
275
  403: APIForbiddenError,
265
276
  404: APINotFoundError,
266
277
  409: APIConflictError,
278
+ 429: APITooManyRequestsError,
267
279
  500: APIServerError,
268
280
  }
269
281
 
@@ -298,6 +310,7 @@ class APIManager:
298
310
  APIForbiddenError: При ошибках доступа (403)
299
311
  APINotFoundError: При отсутствии ресурса (404)
300
312
  APIConflictError: При конфликте данных (409)
313
+ APITooManyRequestsError: При превышении кол-ва запросов (429)
301
314
  APIServerError: При ошибках сервера (500)
302
315
  APIError: При прочих ошибках
303
316
  """
@@ -26,6 +26,10 @@ class APIConflictError(APIError):
26
26
  """Ошибка 409: Конфликт запроса."""
27
27
  pass
28
28
 
29
+ class APITooManyRequestsError(APIError):
30
+ """Ошибка 429: Слишком много запросов."""
31
+ pass
32
+
29
33
 
30
34
  class APIServerError(APIError):
31
35
  """Ошибка 500: Внутренняя ошибка сервера."""
@@ -164,7 +164,7 @@ class SellerFBSAPI(APIManager):
164
164
  )
165
165
  return PostingFBSListResponse(**response)
166
166
 
167
- @method_rate_limit(limit_requests=1, interval_seconds=1)
167
+ @method_rate_limit(limit_requests=2, interval_seconds=1)
168
168
  async def posting_fbs_get(
169
169
  self: "SellerFBSAPI",
170
170
  request: PostingFBSGetRequest
@@ -172,7 +172,7 @@ class SellerFBSAPI(APIManager):
172
172
  """Метод для получения информации об отправлении FBS по его номеру.
173
173
 
174
174
  Notes:
175
- Установлено ограничение 1 запрос в секунду (вычислено экспериментально)
175
+ Метод часто возвращает 429 (TooManyRequestsError), поэтому установлено ограничение 2 запроса в секунду (экспериментальное значение).
176
176
  • Чтобы получать актуальную дату отгрузки, регулярно обновляйте информацию об отправлениях или подключите пуш-уведомления.
177
177
  • Для получения дополнительных данных используйте параметр `with_` в запросе.
178
178
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ozonapi-async
3
- Version: 0.7.2
3
+ Version: 0.7.3
4
4
  Summary: Асинхронный клиент для работы с API маркетплейса Ozon
5
5
  Author: Alexander Ulianov
6
6
  License: MIT
File without changes
File without changes
File without changes