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.
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/CHANGELOG.md +11 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/PKG-INFO +1 -1
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/aio/api.py +9 -2
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/aio/auth.py +28 -11
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/__init__.py +1 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/api/default_api.py +15 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/api_client.py +6 -3
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/auth/oauth2_config.py +20 -4
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/auth/oauth2_token_manager.py +29 -16
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/__init__.py +1 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/variation_summary.py +7 -1
- python_amazon_paapi-6.2.0/creatorsapi_python_sdk/models/variation_summary_price.py +101 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/conf.py +1 -1
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/pyproject.toml +1 -1
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/aio/api_test.py +87 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/aio/auth_test.py +63 -4
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.agent/rules/code-style-guide.md +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.env.template +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.github/ISSUE_TEMPLATE/---bug-report.md +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.github/ISSUE_TEMPLATE/---feature-request.md +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.github/workflows/check.yml +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.github/workflows/release.yml +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.gitignore +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.pre-commit-config.yaml +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/.readthedocs.yml +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/LICENSE +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/Makefile +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/README.md +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/aio/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/aio/client.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/api.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/constants.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/error_handling.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/marketplaces.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/parsers.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/resources.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/core/validation.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/errors.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_creatorsapi/models.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/api.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/errors/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/errors/exceptions.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/helpers/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/helpers/arguments.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/helpers/generators.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/helpers/items.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/helpers/requests.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/models/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/models/browse_nodes_result.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/models/item_result.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/models/regions.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/models/search_result.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/models/variations_result.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/COPYING.txt +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/LICENSE.txt +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/NOTICE.txt +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/api/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/api/default_api.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/api_client.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/auth/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/auth/sign_helper.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/configuration.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/availability.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/big_decimal.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/browse_node.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/browse_node_ancestor.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/browse_node_child.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/browse_node_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/browse_nodes_result.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/by_line_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/classifications.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/condition.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/content_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/content_rating.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/contributor.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/customer_reviews.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/deal_details.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/delivery_flag.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/dimension_based_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/duration_price.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/error_data.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/external_ids.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_browse_nodes_request.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_browse_nodes_resource.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_browse_nodes_response.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_items_request.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_items_resource.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_items_response.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_variations_request.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_variations_resource.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/get_variations_response.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/image_size.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/image_type.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/images.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/item.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/item_id_type.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/item_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/items_result.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/language_type.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/languages.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/manufacture_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/max_price.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/merchant.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/min_price.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/min_reviews_rating.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/min_saving_percent.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/money.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/multi_valued_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_availability.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_availability_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_condition.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_condition_note.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_condition_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_count.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_delivery_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_listing.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_listing_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_listings.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_listings_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_loyalty_points.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_loyalty_points_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_merchant_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_merchant_info_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_price.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_price_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_program_eligibility.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_promotion.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_saving_basis.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_savings.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_savings_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_shipping_charge.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_sub_condition.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_summary.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offer_type.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offers.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/offers_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/partner_type.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/price.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/price_type.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/product_advertising_api_client_exception.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/product_advertising_api_service_exception.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/product_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/properties.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/rating.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/refinement.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/refinement_bin.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/rental_offer_listing.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/rental_offers.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/saving_basis_type.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/search_index.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/search_items_request.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/search_items_resource.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/search_items_response.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/search_refinements.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/search_result.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/single_boolean_valued_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/single_integer_valued_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/single_string_valued_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/sort_by.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/technical_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/trade_in_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/trade_in_price.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/unit_based_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/variation_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/variation_dimension.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/variation_summary.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/variations_result.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/models/website_sales_rank.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/sdk/rest.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/tools/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/amazon_paapi/tools/asin.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/api/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/api_response.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/auth/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/configuration.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/exceptions.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/access_denied_exception_response_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/access_denied_reason.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/availability.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/browse_node.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/browse_node_ancestor.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/browse_node_child.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/browse_node_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/browse_nodes_result.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/by_line_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/classifications.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/condition.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/content_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/content_rating.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/contributor.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/customer_reviews.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/deal_details.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/delivery_flag.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/dimension_based_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/error_data.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/external_ids.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/feed.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_browse_nodes_request_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_browse_nodes_resource.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_browse_nodes_response_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_feed_request_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_feed_response_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_items_request_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_items_resource.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_items_response_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_report_request_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_report_response_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_variations_request_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_variations_resource.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/get_variations_response_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/image_size.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/image_type.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/images.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/internal_server_exception_response_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/item.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/item_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/items_result.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/language_type.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/languages.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/list_feeds_response_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/list_reports_response_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/manufacture_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/money.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/multi_valued_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_availability_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_condition_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_listing_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_loyalty_points_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_merchant_info_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_price_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_saving_basis.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_savings.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offer_type.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/offers_v2.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/product_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/rating.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/refinement.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/refinement_bin.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/report_metadata.py +0 -0
- {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
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/saving_basis_type.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/search_items_request_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/search_items_resource.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/search_items_response_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/search_refinements.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/search_result.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/single_boolean_valued_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/single_integer_valued_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/single_string_valued_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/sort_by.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/technical_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/throttle_exception_response_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/trade_in_info.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/trade_in_price.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/unauthorized_exception_reason.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/unauthorized_exception_response_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/unit_based_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/validation_exception_field.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/validation_exception_reason.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/validation_exception_response_content.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/variation_attribute.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/variation_dimension.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/variations_result.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/website_sales_rank.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/py.typed +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/rest.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/Makefile +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/_static/pa-paapi-icon.ico +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/_static/pa-paapi-logo.png +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/amazon_creatorsapi.aio.rst +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/amazon_creatorsapi.core.rst +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/amazon_creatorsapi.errors.rst +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/amazon_creatorsapi.models.rst +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/amazon_creatorsapi.rst +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/index.rst +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/make.bat +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/pages/migration-guide-6.md +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/pages/usage-guide.md +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/docs/requirements.txt +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/scripts/check_version.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/aio/__init__.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/aio/client_test.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/aio/integration_test.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/api_test.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/integration_test.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/tools_test.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/api_test.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/errors_test.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/helpers_arguments_test.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/helpers_generators_test.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/helpers_items_test.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/helpers_requests_test.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/integration_test.py +0 -0
- {python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/offersv2_test.py +0 -0
- {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.
|
|
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":
|
|
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
|
-
|
|
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":
|
|
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
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
{python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/api/default_api.py
RENAMED
|
@@ -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(
|
{python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/api_client.py
RENAMED
|
@@ -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.
|
|
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
|
-
|
|
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
|
|
{python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/auth/oauth2_config.py
RENAMED
|
@@ -24,7 +24,8 @@ class OAuth2Config:
|
|
|
24
24
|
"""OAuth2 configuration class that manages version-specific cognito endpoints"""
|
|
25
25
|
|
|
26
26
|
# Constants
|
|
27
|
-
|
|
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
|
-
#
|
|
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.
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
'Content-Type': 'application/
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
|
{python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/creatorsapi_python_sdk/models/__init__.py
RENAMED
|
@@ -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
|
+
|
{python_amazon_paapi-6.1.0 → python_amazon_paapi-6.2.0}/tests/amazon_creatorsapi/aio/api_test.py
RENAMED
|
@@ -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()
|