python-amazon-paapi 6.1.0__tar.gz → 6.2.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 (303) hide show
  1. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/CHANGELOG.md +11 -0
  2. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/PKG-INFO +1 -1
  3. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/aio/api.py +9 -2
  4. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/aio/auth.py +28 -11
  5. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/__init__.py +1 -0
  6. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/api/default_api.py +15 -0
  7. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/api_client.py +6 -3
  8. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/auth/oauth2_config.py +20 -4
  9. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/auth/oauth2_token_manager.py +29 -16
  10. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/__init__.py +1 -0
  11. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/variation_summary.py +7 -1
  12. python_amazon_paapi-6.2.0/creatorsapi_python_sdk/models/variation_summary_price.py +101 -0
  13. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/conf.py +1 -1
  14. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/pyproject.toml +1 -1
  15. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/aio/api_test.py +87 -0
  16. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/aio/auth_test.py +63 -4
  17. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.agent/rules/code-style-guide.md +0 -0
  18. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.env.template +0 -0
  19. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.github/ISSUE_TEMPLATE/---bug-report.md +0 -0
  20. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.github/ISSUE_TEMPLATE/---feature-request.md +0 -0
  21. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  22. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.github/workflows/check.yml +0 -0
  23. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.github/workflows/release.yml +0 -0
  24. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.gitignore +0 -0
  25. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.pre-commit-config.yaml +0 -0
  26. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.readthedocs.yml +0 -0
  27. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/LICENSE +0 -0
  28. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/Makefile +0 -0
  29. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/README.md +0 -0
  30. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/__init__.py +0 -0
  31. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/aio/__init__.py +0 -0
  32. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/aio/client.py +0 -0
  33. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/api.py +0 -0
  34. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/__init__.py +0 -0
  35. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/constants.py +0 -0
  36. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/error_handling.py +0 -0
  37. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/marketplaces.py +0 -0
  38. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/parsers.py +0 -0
  39. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/resources.py +0 -0
  40. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/validation.py +0 -0
  41. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/errors.py +0 -0
  42. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/models.py +0 -0
  43. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/__init__.py +0 -0
  44. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/api.py +0 -0
  45. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/errors/__init__.py +0 -0
  46. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/errors/exceptions.py +0 -0
  47. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/helpers/__init__.py +0 -0
  48. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/helpers/arguments.py +0 -0
  49. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/helpers/generators.py +0 -0
  50. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/helpers/items.py +0 -0
  51. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/helpers/requests.py +0 -0
  52. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/models/__init__.py +0 -0
  53. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/models/browse_nodes_result.py +0 -0
  54. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/models/item_result.py +0 -0
  55. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/models/regions.py +0 -0
  56. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/models/search_result.py +0 -0
  57. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/models/variations_result.py +0 -0
  58. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/COPYING.txt +0 -0
  59. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/LICENSE.txt +0 -0
  60. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/NOTICE.txt +0 -0
  61. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/__init__.py +0 -0
  62. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/api/__init__.py +0 -0
  63. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/api/default_api.py +0 -0
  64. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/api_client.py +0 -0
  65. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/auth/__init__.py +0 -0
  66. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/auth/sign_helper.py +0 -0
  67. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/configuration.py +0 -0
  68. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/__init__.py +0 -0
  69. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/availability.py +0 -0
  70. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/big_decimal.py +0 -0
  71. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/browse_node.py +0 -0
  72. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/browse_node_ancestor.py +0 -0
  73. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/browse_node_child.py +0 -0
  74. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/browse_node_info.py +0 -0
  75. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/browse_nodes_result.py +0 -0
  76. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/by_line_info.py +0 -0
  77. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/classifications.py +0 -0
  78. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/condition.py +0 -0
  79. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/content_info.py +0 -0
  80. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/content_rating.py +0 -0
  81. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/contributor.py +0 -0
  82. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/customer_reviews.py +0 -0
  83. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/deal_details.py +0 -0
  84. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/delivery_flag.py +0 -0
  85. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/dimension_based_attribute.py +0 -0
  86. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/duration_price.py +0 -0
  87. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/error_data.py +0 -0
  88. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/external_ids.py +0 -0
  89. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_browse_nodes_request.py +0 -0
  90. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_browse_nodes_resource.py +0 -0
  91. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_browse_nodes_response.py +0 -0
  92. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_items_request.py +0 -0
  93. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_items_resource.py +0 -0
  94. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_items_response.py +0 -0
  95. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_variations_request.py +0 -0
  96. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_variations_resource.py +0 -0
  97. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_variations_response.py +0 -0
  98. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/image_size.py +0 -0
  99. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/image_type.py +0 -0
  100. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/images.py +0 -0
  101. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/item.py +0 -0
  102. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/item_id_type.py +0 -0
  103. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/item_info.py +0 -0
  104. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/items_result.py +0 -0
  105. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/language_type.py +0 -0
  106. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/languages.py +0 -0
  107. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/manufacture_info.py +0 -0
  108. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/max_price.py +0 -0
  109. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/merchant.py +0 -0
  110. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/min_price.py +0 -0
  111. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/min_reviews_rating.py +0 -0
  112. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/min_saving_percent.py +0 -0
  113. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/money.py +0 -0
  114. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/multi_valued_attribute.py +0 -0
  115. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_availability.py +0 -0
  116. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_availability_v2.py +0 -0
  117. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_condition.py +0 -0
  118. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_condition_note.py +0 -0
  119. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_condition_v2.py +0 -0
  120. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_count.py +0 -0
  121. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_delivery_info.py +0 -0
  122. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_listing.py +0 -0
  123. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_listing_v2.py +0 -0
  124. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_listings.py +0 -0
  125. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_listings_v2.py +0 -0
  126. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_loyalty_points.py +0 -0
  127. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_loyalty_points_v2.py +0 -0
  128. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_merchant_info.py +0 -0
  129. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_merchant_info_v2.py +0 -0
  130. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_price.py +0 -0
  131. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_price_v2.py +0 -0
  132. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_program_eligibility.py +0 -0
  133. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_promotion.py +0 -0
  134. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_saving_basis.py +0 -0
  135. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_savings.py +0 -0
  136. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_savings_v2.py +0 -0
  137. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_shipping_charge.py +0 -0
  138. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_sub_condition.py +0 -0
  139. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_summary.py +0 -0
  140. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_type.py +0 -0
  141. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offers.py +0 -0
  142. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offers_v2.py +0 -0
  143. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/partner_type.py +0 -0
  144. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/price.py +0 -0
  145. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/price_type.py +0 -0
  146. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/product_advertising_api_client_exception.py +0 -0
  147. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/product_advertising_api_service_exception.py +0 -0
  148. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/product_info.py +0 -0
  149. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/properties.py +0 -0
  150. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/rating.py +0 -0
  151. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/refinement.py +0 -0
  152. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/refinement_bin.py +0 -0
  153. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/rental_offer_listing.py +0 -0
  154. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/rental_offers.py +0 -0
  155. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/saving_basis_type.py +0 -0
  156. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/search_index.py +0 -0
  157. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/search_items_request.py +0 -0
  158. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/search_items_resource.py +0 -0
  159. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/search_items_response.py +0 -0
  160. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/search_refinements.py +0 -0
  161. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/search_result.py +0 -0
  162. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/single_boolean_valued_attribute.py +0 -0
  163. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/single_integer_valued_attribute.py +0 -0
  164. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/single_string_valued_attribute.py +0 -0
  165. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/sort_by.py +0 -0
  166. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/technical_info.py +0 -0
  167. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/trade_in_info.py +0 -0
  168. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/trade_in_price.py +0 -0
  169. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/unit_based_attribute.py +0 -0
  170. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/variation_attribute.py +0 -0
  171. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/variation_dimension.py +0 -0
  172. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/variation_summary.py +0 -0
  173. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/variations_result.py +0 -0
  174. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/website_sales_rank.py +0 -0
  175. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/rest.py +0 -0
  176. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/tools/__init__.py +0 -0
  177. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/tools/asin.py +0 -0
  178. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/api/__init__.py +0 -0
  179. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/api_response.py +0 -0
  180. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/auth/__init__.py +0 -0
  181. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/configuration.py +0 -0
  182. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/exceptions.py +0 -0
  183. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/access_denied_exception_response_content.py +0 -0
  184. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/access_denied_reason.py +0 -0
  185. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/availability.py +0 -0
  186. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/browse_node.py +0 -0
  187. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/browse_node_ancestor.py +0 -0
  188. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/browse_node_child.py +0 -0
  189. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/browse_node_info.py +0 -0
  190. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/browse_nodes_result.py +0 -0
  191. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/by_line_info.py +0 -0
  192. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/classifications.py +0 -0
  193. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/condition.py +0 -0
  194. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/content_info.py +0 -0
  195. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/content_rating.py +0 -0
  196. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/contributor.py +0 -0
  197. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/customer_reviews.py +0 -0
  198. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/deal_details.py +0 -0
  199. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/delivery_flag.py +0 -0
  200. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/dimension_based_attribute.py +0 -0
  201. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/error_data.py +0 -0
  202. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/external_ids.py +0 -0
  203. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/feed.py +0 -0
  204. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_browse_nodes_request_content.py +0 -0
  205. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_browse_nodes_resource.py +0 -0
  206. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_browse_nodes_response_content.py +0 -0
  207. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_feed_request_content.py +0 -0
  208. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_feed_response_content.py +0 -0
  209. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_items_request_content.py +0 -0
  210. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_items_resource.py +0 -0
  211. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_items_response_content.py +0 -0
  212. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_report_request_content.py +0 -0
  213. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_report_response_content.py +0 -0
  214. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_variations_request_content.py +0 -0
  215. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_variations_resource.py +0 -0
  216. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_variations_response_content.py +0 -0
  217. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/image_size.py +0 -0
  218. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/image_type.py +0 -0
  219. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/images.py +0 -0
  220. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/internal_server_exception_response_content.py +0 -0
  221. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/item.py +0 -0
  222. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/item_info.py +0 -0
  223. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/items_result.py +0 -0
  224. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/language_type.py +0 -0
  225. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/languages.py +0 -0
  226. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/list_feeds_response_content.py +0 -0
  227. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/list_reports_response_content.py +0 -0
  228. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/manufacture_info.py +0 -0
  229. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/money.py +0 -0
  230. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/multi_valued_attribute.py +0 -0
  231. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_availability_v2.py +0 -0
  232. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_condition_v2.py +0 -0
  233. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_listing_v2.py +0 -0
  234. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_loyalty_points_v2.py +0 -0
  235. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_merchant_info_v2.py +0 -0
  236. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_price_v2.py +0 -0
  237. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_saving_basis.py +0 -0
  238. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_savings.py +0 -0
  239. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_type.py +0 -0
  240. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offers_v2.py +0 -0
  241. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/product_info.py +0 -0
  242. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/rating.py +0 -0
  243. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/refinement.py +0 -0
  244. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/refinement_bin.py +0 -0
  245. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/report_metadata.py +0 -0
  246. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/resource_not_found_exception_response_content.py +0 -0
  247. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/saving_basis_type.py +0 -0
  248. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/search_items_request_content.py +0 -0
  249. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/search_items_resource.py +0 -0
  250. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/search_items_response_content.py +0 -0
  251. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/search_refinements.py +0 -0
  252. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/search_result.py +0 -0
  253. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/single_boolean_valued_attribute.py +0 -0
  254. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/single_integer_valued_attribute.py +0 -0
  255. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/single_string_valued_attribute.py +0 -0
  256. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/sort_by.py +0 -0
  257. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/technical_info.py +0 -0
  258. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/throttle_exception_response_content.py +0 -0
  259. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/trade_in_info.py +0 -0
  260. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/trade_in_price.py +0 -0
  261. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/unauthorized_exception_reason.py +0 -0
  262. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/unauthorized_exception_response_content.py +0 -0
  263. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/unit_based_attribute.py +0 -0
  264. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/validation_exception_field.py +0 -0
  265. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/validation_exception_reason.py +0 -0
  266. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/validation_exception_response_content.py +0 -0
  267. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/variation_attribute.py +0 -0
  268. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/variation_dimension.py +0 -0
  269. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/variations_result.py +0 -0
  270. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/website_sales_rank.py +0 -0
  271. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/py.typed +0 -0
  272. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/rest.py +0 -0
  273. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/Makefile +0 -0
  274. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/_static/pa-paapi-icon.ico +0 -0
  275. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/_static/pa-paapi-logo.png +0 -0
  276. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/amazon_creatorsapi.aio.rst +0 -0
  277. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/amazon_creatorsapi.core.rst +0 -0
  278. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/amazon_creatorsapi.errors.rst +0 -0
  279. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/amazon_creatorsapi.models.rst +0 -0
  280. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/amazon_creatorsapi.rst +0 -0
  281. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/index.rst +0 -0
  282. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/make.bat +0 -0
  283. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/pages/migration-guide-6.md +0 -0
  284. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/pages/usage-guide.md +0 -0
  285. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/requirements.txt +0 -0
  286. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/scripts/check_version.py +0 -0
  287. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/__init__.py +0 -0
  288. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/__init__.py +0 -0
  289. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/aio/__init__.py +0 -0
  290. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/aio/client_test.py +0 -0
  291. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/aio/integration_test.py +0 -0
  292. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/api_test.py +0 -0
  293. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/integration_test.py +0 -0
  294. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/tools_test.py +0 -0
  295. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/api_test.py +0 -0
  296. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/errors_test.py +0 -0
  297. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/helpers_arguments_test.py +0 -0
  298. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/helpers_generators_test.py +0 -0
  299. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/helpers_items_test.py +0 -0
  300. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/helpers_requests_test.py +0 -0
  301. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/integration_test.py +0 -0
  302. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/offersv2_test.py +0 -0
  303. {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/tools_test.py +0 -0
@@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [6.2.0] - 2026-03-12
9
+
10
+ ### Added
11
+
12
+ - LWA support in the `amazon_creatorsapi.aio` API layer
13
+
14
+ ### Changed
15
+
16
+ - Bumped `creatorsapi-python-sdk` from `1.1.2` to `1.2.0`
17
+ - Updated bundled SDK support to include LWA endpoints for v3.x
18
+
8
19
  ## [6.1.0] - 2026-02-09
9
20
 
10
21
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-amazon-paapi
3
- Version: 6.1.0
3
+ Version: 6.2.0
4
4
  Summary: Amazon Product Advertising API 5.0 wrapper for Python
5
5
  Project-URL: Homepage, https://github.com/sergioteula/python-amazon-paapi
6
6
  Project-URL: Repository, https://github.com/sergioteula/python-amazon-paapi
@@ -106,7 +106,8 @@ class AsyncAmazonCreatorsApi:
106
106
 
107
107
  Raises:
108
108
  InvalidArgumentError: If neither country nor marketplace is provided.
109
- ValueError: If version is not supported (valid versions: 2.1, 2.2, 2.3).
109
+ ValueError: If version is not supported (valid versions: 2.1, 2.2, 2.3,
110
+ 3.1, 3.2, 3.3).
110
111
 
111
112
  """
112
113
 
@@ -483,7 +484,7 @@ class AsyncAmazonCreatorsApi:
483
484
  token = await self._token_manager.get_token()
484
485
 
485
486
  headers = {
486
- "Authorization": f"Bearer {token}, Version {self._version}",
487
+ "Authorization": self._build_authorization_header(token),
487
488
  "Content-Type": "application/json; charset=utf-8",
488
489
  "x-marketplace": self.marketplace,
489
490
  }
@@ -501,6 +502,12 @@ class AsyncAmazonCreatorsApi:
501
502
 
502
503
  return response.json()
503
504
 
505
+ def _build_authorization_header(self, token: str) -> str:
506
+ """Build the version-appropriate Authorization header."""
507
+ if self._version.startswith("3."):
508
+ return f"Bearer {token}"
509
+ return f"Bearer {token}, Version {self._version}"
510
+
504
511
  def _handle_error_response(self, status_code: int, body: str) -> None:
505
512
  """Handle API error responses and raise appropriate exceptions.
506
513
 
@@ -21,7 +21,10 @@ except ImportError as exc: # pragma: no cover
21
21
 
22
22
 
23
23
  # OAuth2 constants
24
- SCOPE = "creatorsapi/default"
24
+ COGNITO_SCOPE = "creatorsapi/default"
25
+ LWA_SCOPE = "creatorsapi::default"
26
+ # Backward-compatible alias for existing v2.x users.
27
+ SCOPE = COGNITO_SCOPE
25
28
  GRANT_TYPE = "client_credentials"
26
29
 
27
30
  # Token expiration buffer in seconds (refresh 30s before actual expiration)
@@ -32,6 +35,9 @@ VERSION_ENDPOINTS = {
32
35
  "2.1": "https://creatorsapi.auth.us-east-1.amazoncognito.com/oauth2/token",
33
36
  "2.2": "https://creatorsapi.auth.eu-south-2.amazoncognito.com/oauth2/token",
34
37
  "2.3": "https://creatorsapi.auth.us-west-2.amazoncognito.com/oauth2/token",
38
+ "3.1": "https://api.amazon.com/auth/o2/token",
39
+ "3.2": "https://api.amazon.co.uk/auth/o2/token",
40
+ "3.3": "https://api.amazon.co.jp/auth/o2/token",
35
41
  }
36
42
 
37
43
 
@@ -97,6 +103,14 @@ class AsyncOAuth2TokenManager:
97
103
 
98
104
  return VERSION_ENDPOINTS[version]
99
105
 
106
+ def is_lwa(self) -> bool:
107
+ """Return whether this token manager uses the LWA auth flow."""
108
+ return self._version.startswith("3.")
109
+
110
+ def get_scope(self) -> str:
111
+ """Return the version-appropriate OAuth2 scope."""
112
+ return LWA_SCOPE if self.is_lwa() else COGNITO_SCOPE
113
+
100
114
  @property
101
115
  def lock(self) -> asyncio.Lock:
102
116
  """Lazy initialization of the asyncio.Lock.
@@ -168,20 +182,23 @@ class AsyncOAuth2TokenManager:
168
182
  "grant_type": GRANT_TYPE,
169
183
  "client_id": self._credential_id,
170
184
  "client_secret": self._credential_secret,
171
- "scope": SCOPE,
172
- }
173
-
174
- headers = {
175
- "Content-Type": "application/x-www-form-urlencoded",
185
+ "scope": self.get_scope(),
176
186
  }
177
187
 
178
188
  try:
179
189
  async with httpx.AsyncClient() as client:
180
- response = await client.post(
181
- self._auth_endpoint,
182
- data=request_data,
183
- headers=headers,
184
- )
190
+ if self.is_lwa():
191
+ response = await client.post(
192
+ self._auth_endpoint,
193
+ json=request_data,
194
+ headers={"Content-Type": "application/json"},
195
+ )
196
+ else:
197
+ response = await client.post(
198
+ self._auth_endpoint,
199
+ data=request_data,
200
+ headers={"Content-Type": "application/x-www-form-urlencoded"},
201
+ )
185
202
 
186
203
  if response.status_code != 200: # noqa: PLR2004
187
204
  self.clear_token()
@@ -123,5 +123,6 @@ from creatorsapi_python_sdk.models.validation_exception_response_content import
123
123
  from creatorsapi_python_sdk.models.variation_attribute import VariationAttribute
124
124
  from creatorsapi_python_sdk.models.variation_dimension import VariationDimension
125
125
  from creatorsapi_python_sdk.models.variation_summary import VariationSummary
126
+ from creatorsapi_python_sdk.models.variation_summary_price import VariationSummaryPrice
126
127
  from creatorsapi_python_sdk.models.variations_result import VariationsResult
127
128
  from creatorsapi_python_sdk.models.website_sales_rank import WebsiteSalesRank
@@ -424,6 +424,7 @@ class DefaultApi:
424
424
  '401': "UnauthorizedExceptionResponseContent",
425
425
  '403': "AccessDeniedExceptionResponseContent",
426
426
  '404': "ResourceNotFoundExceptionResponseContent",
427
+ '429': "ThrottleExceptionResponseContent",
427
428
  '500': "InternalServerExceptionResponseContent",
428
429
  }
429
430
  response_data = self.api_client.call_api(
@@ -500,6 +501,7 @@ class DefaultApi:
500
501
  '401': "UnauthorizedExceptionResponseContent",
501
502
  '403': "AccessDeniedExceptionResponseContent",
502
503
  '404': "ResourceNotFoundExceptionResponseContent",
504
+ '429': "ThrottleExceptionResponseContent",
503
505
  '500': "InternalServerExceptionResponseContent",
504
506
  }
505
507
  response_data = self.api_client.call_api(
@@ -576,6 +578,7 @@ class DefaultApi:
576
578
  '401': "UnauthorizedExceptionResponseContent",
577
579
  '403': "AccessDeniedExceptionResponseContent",
578
580
  '404': "ResourceNotFoundExceptionResponseContent",
581
+ '429': "ThrottleExceptionResponseContent",
579
582
  '500': "InternalServerExceptionResponseContent",
580
583
  }
581
584
  response_data = self.api_client.call_api(
@@ -1026,6 +1029,7 @@ class DefaultApi:
1026
1029
  '401': "UnauthorizedExceptionResponseContent",
1027
1030
  '403': "AccessDeniedExceptionResponseContent",
1028
1031
  '404': "ResourceNotFoundExceptionResponseContent",
1032
+ '429': "ThrottleExceptionResponseContent",
1029
1033
  '500': "InternalServerExceptionResponseContent",
1030
1034
  }
1031
1035
  response_data = self.api_client.call_api(
@@ -1102,6 +1106,7 @@ class DefaultApi:
1102
1106
  '401': "UnauthorizedExceptionResponseContent",
1103
1107
  '403': "AccessDeniedExceptionResponseContent",
1104
1108
  '404': "ResourceNotFoundExceptionResponseContent",
1109
+ '429': "ThrottleExceptionResponseContent",
1105
1110
  '500': "InternalServerExceptionResponseContent",
1106
1111
  }
1107
1112
  response_data = self.api_client.call_api(
@@ -1178,6 +1183,7 @@ class DefaultApi:
1178
1183
  '401': "UnauthorizedExceptionResponseContent",
1179
1184
  '403': "AccessDeniedExceptionResponseContent",
1180
1185
  '404': "ResourceNotFoundExceptionResponseContent",
1186
+ '429': "ThrottleExceptionResponseContent",
1181
1187
  '500': "InternalServerExceptionResponseContent",
1182
1188
  }
1183
1189
  response_data = self.api_client.call_api(
@@ -1627,6 +1633,7 @@ class DefaultApi:
1627
1633
  '401': "UnauthorizedExceptionResponseContent",
1628
1634
  '403': "AccessDeniedExceptionResponseContent",
1629
1635
  '404': "ResourceNotFoundExceptionResponseContent",
1636
+ '429': "ThrottleExceptionResponseContent",
1630
1637
  '500': "InternalServerExceptionResponseContent",
1631
1638
  }
1632
1639
  response_data = self.api_client.call_api(
@@ -1699,6 +1706,7 @@ class DefaultApi:
1699
1706
  '401': "UnauthorizedExceptionResponseContent",
1700
1707
  '403': "AccessDeniedExceptionResponseContent",
1701
1708
  '404': "ResourceNotFoundExceptionResponseContent",
1709
+ '429': "ThrottleExceptionResponseContent",
1702
1710
  '500': "InternalServerExceptionResponseContent",
1703
1711
  }
1704
1712
  response_data = self.api_client.call_api(
@@ -1771,6 +1779,7 @@ class DefaultApi:
1771
1779
  '401': "UnauthorizedExceptionResponseContent",
1772
1780
  '403': "AccessDeniedExceptionResponseContent",
1773
1781
  '404': "ResourceNotFoundExceptionResponseContent",
1782
+ '429': "ThrottleExceptionResponseContent",
1774
1783
  '500': "InternalServerExceptionResponseContent",
1775
1784
  }
1776
1785
  response_data = self.api_client.call_api(
@@ -1899,6 +1908,8 @@ class DefaultApi:
1899
1908
  '400': "ValidationExceptionResponseContent",
1900
1909
  '401': "UnauthorizedExceptionResponseContent",
1901
1910
  '403': "AccessDeniedExceptionResponseContent",
1911
+ '404': "ResourceNotFoundExceptionResponseContent",
1912
+ '429': "ThrottleExceptionResponseContent",
1902
1913
  '500': "InternalServerExceptionResponseContent",
1903
1914
  }
1904
1915
  response_data = self.api_client.call_api(
@@ -1970,6 +1981,8 @@ class DefaultApi:
1970
1981
  '400': "ValidationExceptionResponseContent",
1971
1982
  '401': "UnauthorizedExceptionResponseContent",
1972
1983
  '403': "AccessDeniedExceptionResponseContent",
1984
+ '404': "ResourceNotFoundExceptionResponseContent",
1985
+ '429': "ThrottleExceptionResponseContent",
1973
1986
  '500': "InternalServerExceptionResponseContent",
1974
1987
  }
1975
1988
  response_data = self.api_client.call_api(
@@ -2041,6 +2054,8 @@ class DefaultApi:
2041
2054
  '400': "ValidationExceptionResponseContent",
2042
2055
  '401': "UnauthorizedExceptionResponseContent",
2043
2056
  '403': "AccessDeniedExceptionResponseContent",
2057
+ '404': "ResourceNotFoundExceptionResponseContent",
2058
+ '429': "ThrottleExceptionResponseContent",
2044
2059
  '500': "InternalServerExceptionResponseContent",
2045
2060
  }
2046
2061
  response_data = self.api_client.call_api(
@@ -107,7 +107,7 @@ class ApiClient:
107
107
  self.default_headers[header_name] = header_value
108
108
  self.cookie = cookie
109
109
  # Set default User-Agent.
110
- self.user_agent = 'creatorsapi-python-sdk/1.1.2'
110
+ self.user_agent = 'creatorsapi-python-sdk/1.2.0'
111
111
  self.client_side_validation = configuration.client_side_validation
112
112
 
113
113
  # OAuth2 properties
@@ -387,8 +387,11 @@ class ApiClient:
387
387
  self._token_manager = OAuth2TokenManager(config)
388
388
  # Get token (will use cached token if valid)
389
389
  token = self._token_manager.get_token()
390
- # Add Authorization headers
391
- header_params['Authorization'] = 'Bearer {}, Version {}'.format(token, self.version)
390
+ # Add Authorization headers - Version only for v2.x
391
+ if self.version.startswith("3."):
392
+ header_params['Authorization'] = 'Bearer {}'.format(token)
393
+ else:
394
+ header_params['Authorization'] = 'Bearer {}, Version {}'.format(token, self.version)
392
395
  except Exception as error:
393
396
  raise error
394
397
 
@@ -24,7 +24,8 @@ class OAuth2Config:
24
24
  """OAuth2 configuration class that manages version-specific cognito endpoints"""
25
25
 
26
26
  # Constants
27
- SCOPE = "creatorsapi/default"
27
+ COGNITO_SCOPE = "creatorsapi/default"
28
+ LWA_SCOPE = "creatorsapi::default"
28
29
  GRANT_TYPE = "client_credentials"
29
30
 
30
31
  def __init__(self, credential_id, credential_secret, version, auth_endpoint):
@@ -54,15 +55,30 @@ class OAuth2Config:
54
55
  if auth_endpoint and auth_endpoint.strip():
55
56
  return auth_endpoint
56
57
 
57
- # Fall back to version-based defaults
58
+ # Cognito endpoints (v2.x)
58
59
  if version == "2.1":
59
60
  return "https://creatorsapi.auth.us-east-1.amazoncognito.com/oauth2/token"
60
61
  elif version == "2.2":
61
62
  return "https://creatorsapi.auth.eu-south-2.amazoncognito.com/oauth2/token"
62
63
  elif version == "2.3":
63
64
  return "https://creatorsapi.auth.us-west-2.amazoncognito.com/oauth2/token"
65
+ # LWA endpoints (v3.x)
66
+ elif version == "3.1":
67
+ return "https://api.amazon.com/auth/o2/token"
68
+ elif version == "3.2":
69
+ return "https://api.amazon.co.uk/auth/o2/token"
70
+ elif version == "3.3":
71
+ return "https://api.amazon.co.jp/auth/o2/token"
64
72
  else:
65
- raise ValueError("Unsupported version: {}. Supported versions are: 2.1, 2.2, 2.3".format(version))
73
+ raise ValueError("Unsupported version: {}. Supported versions are: 2.1, 2.2, 2.3, 3.1, 3.2, 3.3".format(version))
74
+
75
+ def is_lwa(self):
76
+ """
77
+ Checks if this is an LWA (v3.x) configuration
78
+
79
+ :return: True if using LWA authentication
80
+ """
81
+ return self.version.startswith("3.")
66
82
 
67
83
  def get_token_endpoint(self, version):
68
84
  """
@@ -112,7 +128,7 @@ class OAuth2Config:
112
128
 
113
129
  :return: The OAuth2 scope
114
130
  """
115
- return OAuth2Config.SCOPE
131
+ return OAuth2Config.LWA_SCOPE if self.is_lwa() else OAuth2Config.COGNITO_SCOPE
116
132
 
117
133
  def get_grant_type(self):
118
134
  """
@@ -67,22 +67,35 @@ class OAuth2TokenManager:
67
67
  :raises Exception: If token refresh fails
68
68
  """
69
69
  try:
70
- request_data = {
71
- 'grant_type': self.config.get_grant_type(),
72
- 'client_id': self.config.get_credential_id(),
73
- 'client_secret': self.config.get_credential_secret(),
74
- 'scope': self.config.get_scope()
75
- }
76
-
77
- headers = {
78
- 'Content-Type': 'application/x-www-form-urlencoded'
79
- }
80
-
81
- response = requests.post(
82
- self.config.get_cognito_endpoint(),
83
- data=request_data,
84
- headers=headers
85
- )
70
+ if self.config.is_lwa():
71
+ # LWA (v3.x) uses JSON body
72
+ request_data = {
73
+ 'grant_type': self.config.get_grant_type(),
74
+ 'client_id': self.config.get_credential_id(),
75
+ 'client_secret': self.config.get_credential_secret(),
76
+ 'scope': self.config.get_scope()
77
+ }
78
+ headers = {'Content-Type': 'application/json'}
79
+ response = requests.post(
80
+ self.config.get_cognito_endpoint(),
81
+ json=request_data,
82
+ headers=headers
83
+ )
84
+ else:
85
+ # Cognito (v2.x) uses form-encoded
86
+ request_data = {
87
+ 'grant_type': self.config.get_grant_type(),
88
+ 'client_id': self.config.get_credential_id(),
89
+ 'client_secret': self.config.get_credential_secret(),
90
+ 'scope': self.config.get_scope()
91
+ }
92
+ headers = {'Content-Type': 'application/x-www-form-urlencoded'}
93
+ response = requests.post(
94
+ self.config.get_cognito_endpoint(),
95
+ data=request_data,
96
+ headers=headers
97
+ )
98
+
86
99
  if response.status_code != 200:
87
100
  raise Exception("OAuth2 token request failed with status {}: {}".format(response.status_code, response.text))
88
101
 
@@ -106,5 +106,6 @@ from creatorsapi_python_sdk.models.validation_exception_response_content import
106
106
  from creatorsapi_python_sdk.models.variation_attribute import VariationAttribute
107
107
  from creatorsapi_python_sdk.models.variation_dimension import VariationDimension
108
108
  from creatorsapi_python_sdk.models.variation_summary import VariationSummary
109
+ from creatorsapi_python_sdk.models.variation_summary_price import VariationSummaryPrice
109
110
  from creatorsapi_python_sdk.models.variations_result import VariationsResult
110
111
  from creatorsapi_python_sdk.models.website_sales_rank import WebsiteSalesRank
@@ -26,6 +26,7 @@ import json
26
26
  from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt
27
27
  from typing import Any, ClassVar, Dict, List, Optional, Union
28
28
  from creatorsapi_python_sdk.models.variation_dimension import VariationDimension
29
+ from creatorsapi_python_sdk.models.variation_summary_price import VariationSummaryPrice
29
30
  from typing import Optional, Set
30
31
  from typing_extensions import Self
31
32
 
@@ -34,9 +35,10 @@ class VariationSummary(BaseModel):
34
35
  The container for Variations Summary response. It consists of metadata of variations response like page numbers, number of variations, Price range and Variation Dimensions.
35
36
  """ # noqa: E501
36
37
  page_count: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Number of pages in the variation result set.", alias="pageCount")
38
+ price: Optional[VariationSummaryPrice] = None
37
39
  variation_count: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Total number of variations available for the product. This represents the complete count of all child ASINs across all pages. Use this value along with pageCount to understand the full scope of available variations.", alias="variationCount")
38
40
  variation_dimensions: Optional[List[VariationDimension]] = Field(default=None, description="List of variation dimensions associated with the product. Variation dimensions define the attributes on which products vary (e.g., size, color). Each dimension includes: - Display name and locale for presentation - Dimension name (internal identifier) - List of all possible values for that dimension For example, a clothing item might have two dimensions: 'Size' with values ['S', 'M', 'L'] and 'Color' with values ['Red', 'Blue', 'Green']. These dimensions help users understand how variations differ from each other.", alias="variationDimensions")
39
- __properties: ClassVar[List[str]] = ["pageCount", "variationCount", "variationDimensions"]
41
+ __properties: ClassVar[List[str]] = ["pageCount", "price", "variationCount", "variationDimensions"]
40
42
 
41
43
  model_config = ConfigDict(
42
44
  populate_by_name=True,
@@ -76,6 +78,9 @@ class VariationSummary(BaseModel):
76
78
  exclude=excluded_fields,
77
79
  exclude_none=True,
78
80
  )
81
+ # override the default output from pydantic by calling `to_dict()` of price
82
+ if self.price:
83
+ _dict['price'] = self.price.to_dict()
79
84
  # override the default output from pydantic by calling `to_dict()` of each item in variation_dimensions (list)
80
85
  _items = []
81
86
  if self.variation_dimensions:
@@ -96,6 +101,7 @@ class VariationSummary(BaseModel):
96
101
 
97
102
  _obj = cls.model_validate({
98
103
  "pageCount": obj.get("pageCount"),
104
+ "price": VariationSummaryPrice.from_dict(obj["price"]) if obj.get("price") is not None else None,
99
105
  "variationCount": obj.get("variationCount"),
100
106
  "variationDimensions": [VariationDimension.from_dict(_item) for _item in obj["variationDimensions"]] if obj.get("variationDimensions") is not None else None
101
107
  })
@@ -0,0 +1,101 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License").
7
+ You may not use this file except in compliance with the License.
8
+ A copy of the License is located at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ or in the "license" file accompanying this file. This file is distributed
13
+ on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
14
+ express or implied. See the License for the specific language governing
15
+ permissions and limitations under the License.
16
+
17
+ """ # noqa: E501
18
+
19
+
20
+
21
+ from __future__ import annotations
22
+ import pprint
23
+ import re # noqa: F401
24
+ import json
25
+
26
+ from pydantic import BaseModel, ConfigDict, Field
27
+ from typing import Any, ClassVar, Dict, List, Optional
28
+ from creatorsapi_python_sdk.models.money import Money
29
+ from typing import Optional, Set
30
+ from typing_extensions import Self
31
+
32
+ class VariationSummaryPrice(BaseModel):
33
+ """
34
+ The container for highest and lowest price for variations.
35
+ """ # noqa: E501
36
+ highest_price: Optional[Money] = Field(default=None, alias="highestPrice")
37
+ lowest_price: Optional[Money] = Field(default=None, alias="lowestPrice")
38
+ __properties: ClassVar[List[str]] = ["highestPrice", "lowestPrice"]
39
+
40
+ model_config = ConfigDict(
41
+ populate_by_name=True,
42
+ validate_assignment=True,
43
+ protected_namespaces=(),
44
+ )
45
+
46
+
47
+ def to_str(self) -> str:
48
+ """Returns the string representation of the model using alias"""
49
+ return pprint.pformat(self.model_dump(by_alias=True))
50
+
51
+ def to_json(self) -> str:
52
+ """Returns the JSON representation of the model using alias"""
53
+ return self.model_dump_json(by_alias=True, exclude_unset=True)
54
+
55
+ @classmethod
56
+ def from_json(cls, json_str: str) -> Optional[Self]:
57
+ """Create an instance of VariationSummaryPrice from a JSON string"""
58
+ return cls.from_dict(json.loads(json_str))
59
+
60
+ def to_dict(self) -> Dict[str, Any]:
61
+ """Return the dictionary representation of the model using alias.
62
+
63
+ This has the following differences from calling pydantic's
64
+ `self.model_dump(by_alias=True)`:
65
+
66
+ * `None` is only added to the output dict for nullable fields that
67
+ were set at model initialization. Other fields with value `None`
68
+ are ignored.
69
+ """
70
+ excluded_fields: Set[str] = set([
71
+ ])
72
+
73
+ _dict = self.model_dump(
74
+ by_alias=True,
75
+ exclude=excluded_fields,
76
+ exclude_none=True,
77
+ )
78
+ # override the default output from pydantic by calling `to_dict()` of highest_price
79
+ if self.highest_price:
80
+ _dict['highestPrice'] = self.highest_price.to_dict()
81
+ # override the default output from pydantic by calling `to_dict()` of lowest_price
82
+ if self.lowest_price:
83
+ _dict['lowestPrice'] = self.lowest_price.to_dict()
84
+ return _dict
85
+
86
+ @classmethod
87
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
88
+ """Create an instance of VariationSummaryPrice from a dict"""
89
+ if obj is None:
90
+ return None
91
+
92
+ if not isinstance(obj, dict):
93
+ return cls.model_validate(obj)
94
+
95
+ _obj = cls.model_validate({
96
+ "highestPrice": Money.from_dict(obj["highestPrice"]) if obj.get("highestPrice") is not None else None,
97
+ "lowestPrice": Money.from_dict(obj["lowestPrice"]) if obj.get("lowestPrice") is not None else None
98
+ })
99
+ return _obj
100
+
101
+
@@ -23,7 +23,7 @@ copyright = "2026, Sergio Abad"
23
23
  author = "Sergio Abad"
24
24
 
25
25
  # The full version, including alpha/beta/rc tags
26
- release = "6.1.0"
26
+ release = "6.2.0"
27
27
 
28
28
 
29
29
  # -- General configuration ---------------------------------------------------
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-amazon-paapi"
3
- version = "6.1.0"
3
+ version = "6.2.0"
4
4
  description = "Amazon Product Advertising API 5.0 wrapper for Python"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -68,6 +68,19 @@ class TestAsyncAmazonCreatorsApiInit(unittest.TestCase):
68
68
 
69
69
  self.assertEqual(api.throttling, 2.5)
70
70
 
71
+ @patch("amazon_creatorsapi.aio.api.AsyncOAuth2TokenManager")
72
+ def test_accepts_lwa_version(self, mock_token_manager: MagicMock) -> None:
73
+ """Test initialization accepts an LWA-backed 3.x version."""
74
+ api = AsyncAmazonCreatorsApi(
75
+ credential_id="test_id",
76
+ credential_secret="test_secret",
77
+ version="3.1",
78
+ tag="test-tag",
79
+ country="US",
80
+ )
81
+
82
+ self.assertEqual(api.marketplace, "www.amazon.com")
83
+
71
84
  @patch("amazon_creatorsapi.aio.api.AsyncOAuth2TokenManager")
72
85
  def test_raises_error_when_no_country_or_marketplace(
73
86
  self, mock_token_manager: MagicMock
@@ -1204,6 +1217,80 @@ class TestAsyncAmazonCreatorsApiWithoutContextManager(unittest.IsolatedAsyncioTe
1204
1217
 
1205
1218
  self.assertEqual(len(items), 1)
1206
1219
 
1220
+ @patch("amazon_creatorsapi.aio.api.AsyncOAuth2TokenManager")
1221
+ @patch("amazon_creatorsapi.aio.api.AsyncHttpClient")
1222
+ async def test_request_uses_v2_authorization_header(
1223
+ self,
1224
+ mock_http_client_class: MagicMock,
1225
+ mock_token_manager_class: MagicMock,
1226
+ ) -> None:
1227
+ """Test v2 requests include the version suffix in Authorization."""
1228
+ mock_response = MagicMock()
1229
+ mock_response.status_code = 200
1230
+ mock_response.json.return_value = {
1231
+ "itemsResult": {"items": [{"ASIN": "B0DLFMFBJW"}]}
1232
+ }
1233
+
1234
+ mock_client = AsyncMock()
1235
+ mock_client.post.return_value = mock_response
1236
+ mock_client.__aenter__.return_value = mock_client
1237
+ mock_http_client_class.return_value = mock_client
1238
+
1239
+ mock_token_manager = AsyncMock()
1240
+ mock_token_manager.get_token.return_value = "test_token"
1241
+ mock_token_manager_class.return_value = mock_token_manager
1242
+
1243
+ api = AsyncAmazonCreatorsApi(
1244
+ credential_id="test_id",
1245
+ credential_secret="test_secret",
1246
+ version="2.2",
1247
+ tag="test-tag",
1248
+ country="ES",
1249
+ throttling=0,
1250
+ )
1251
+
1252
+ await api.get_items(["B0DLFMFBJW"])
1253
+
1254
+ headers = mock_client.post.call_args.args[1]
1255
+ self.assertEqual(headers["Authorization"], "Bearer test_token, Version 2.2")
1256
+
1257
+ @patch("amazon_creatorsapi.aio.api.AsyncOAuth2TokenManager")
1258
+ @patch("amazon_creatorsapi.aio.api.AsyncHttpClient")
1259
+ async def test_request_uses_lwa_authorization_header(
1260
+ self,
1261
+ mock_http_client_class: MagicMock,
1262
+ mock_token_manager_class: MagicMock,
1263
+ ) -> None:
1264
+ """Test v3 requests omit the version suffix in Authorization."""
1265
+ mock_response = MagicMock()
1266
+ mock_response.status_code = 200
1267
+ mock_response.json.return_value = {
1268
+ "itemsResult": {"items": [{"ASIN": "B0DLFMFBJW"}]}
1269
+ }
1270
+
1271
+ mock_client = AsyncMock()
1272
+ mock_client.post.return_value = mock_response
1273
+ mock_client.__aenter__.return_value = mock_client
1274
+ mock_http_client_class.return_value = mock_client
1275
+
1276
+ mock_token_manager = AsyncMock()
1277
+ mock_token_manager.get_token.return_value = "test_token"
1278
+ mock_token_manager_class.return_value = mock_token_manager
1279
+
1280
+ api = AsyncAmazonCreatorsApi(
1281
+ credential_id="test_id",
1282
+ credential_secret="test_secret",
1283
+ version="3.1",
1284
+ tag="test-tag",
1285
+ country="US",
1286
+ throttling=0,
1287
+ )
1288
+
1289
+ await api.get_items(["B0DLFMFBJW"])
1290
+
1291
+ headers = mock_client.post.call_args.args[1]
1292
+ self.assertEqual(headers["Authorization"], "Bearer test_token")
1293
+
1207
1294
 
1208
1295
  if __name__ == "__main__":
1209
1296
  unittest.main()