peddler 4.0.1 → 4.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b77e82d88e0346785039821e8aef1e5dc14719e36ac939b817903802fc675a6
4
- data.tar.gz: db657904ecc6bfaf47702c09500028d0e1ed9ebca2c7b6aa482069523dade394
3
+ metadata.gz: 7677959689b208211817ca535b18ec25d495df736d1e502e8b758cdb2c826603
4
+ data.tar.gz: c4c4f26d97ab8bcbb18e2ee0bbac890e7e2284b475a0d19286ea1c15e456b942
5
5
  SHA512:
6
- metadata.gz: b6cb81b4ea08ef72b5b4e30dc331872b011688c6af694b4fad67df00cc3076c9832fbc8a57382c07d2adde0669b604f3ef0a8b33cad73a63c87377f061f0e309
7
- data.tar.gz: 04e7f28ce2915d764181b5deccfdf9830113ee386adee0dcdef1b7c1c617c2f6f5d85dffef708346b5e3add2907debc3c83fb65a82ed11d581cffc2fe28afe28
6
+ metadata.gz: cc020ae6bda468c2d82044b8a7b226f6101ea141b63d3cd8731ae1c58507b93f11c9e8e18040cb8a31ff0c8dcef40617bdc080f76346f029ddab1b35076027e3
7
+ data.tar.gz: 9e8d25fbdfe70c203331fa4ffda8147000b59e66b0ec0658b99d17a25342e975706d9366d6b7c2d6d9314593cfc6a4fbd7e4bc50b4ff5613aaf452337b7b1061
data/README.md CHANGED
@@ -102,10 +102,24 @@ end
102
102
 
103
103
  ### Rate limiting
104
104
 
105
- Amazon’s Selling Partner API (SP-API) imposes [rate limits][rate-limits] on most operations. Peddler respects these limits and automatically backs off when throttled. To override the default rate limit, pass a `:rate_limit` argument when running an operation.
105
+ Amazon’s Selling Partner API (SP-API) imposes [rate limits][rate-limits] on most operations. Peddler respects these limits and will automatically back off when throttled. You can override the default rate limit by passing a `:rate_limit` to the operation.
106
+
107
+ You can also provide an optional `:retries` argument when initializing an API to specify the number of retries if throttled. By default, this is set to 0, meaning no retries will be attempted. If set to a positive value, Peddler will retry the request that many times if throttled, backing off based on the specified rate limit.
106
108
 
107
109
  **Note:** This functionality requires version 6 of the underlying [HTTP library][httprb]. As of writing, this is not released yet. To use rate limiting, point to their main branch on GitHub.
108
110
 
111
+ Example usage:
112
+
113
+ ```ruby
114
+ api = Peddler.orders_v0(aws_region, access_token, retries: 3)
115
+ api.get_orders(
116
+ marketplaceIds: ["ATVPDKIKX0DER"],
117
+ createdAfter: "2023-01-01T00:00:00Z"
118
+ )
119
+ ```
120
+
121
+ In this example, if the request to `get_orders` is throttled, Peddler will retry the request up to 3 times, backing off according to the rate limit specified by Amazon.
122
+
109
123
  ### The APIs
110
124
 
111
125
  Peddler provides a class for each API version under an eponymous namespace. Below is a list of the more important APIs, along with brief descriptions and code examples to help you get started.
data/lib/peddler/api.rb CHANGED
@@ -25,11 +25,17 @@ module Peddler
25
25
  # @return [String]
26
26
  attr_reader :access_token
27
27
 
28
+ # Number of retries if throttled (default: 0)
29
+ #
30
+ # @return [Integer]
31
+ attr_reader :retries
32
+
28
33
  # @param [String] aws_region
29
34
  # @param [String] access_token
30
- def initialize(aws_region, access_token)
35
+ def initialize(aws_region, access_token, retries: 0)
31
36
  @endpoint = Endpoint.find(aws_region)
32
37
  @access_token = access_token
38
+ @retries = retries
33
39
  @sandbox = false
34
40
  end
35
41
 
@@ -69,10 +75,12 @@ module Peddler
69
75
  # @param [Float] requests_per_second
70
76
  # @return [self]
71
77
  def meter(requests_per_second)
78
+ return self if retries.zero?
79
+
72
80
  # HTTP v6.0 will implement retriable. Until then, point to their GitHub repo, or it's a no-op.
73
81
  # https://github.com/httprb/http/pull/790
74
82
  delay = sandbox? ? 0.2 : 1.0 / requests_per_second
75
- retriable(delay: delay, tries: 3, retry_statuses: [429])
83
+ retriable(delay:, tries: retries + 1, retry_statuses: [429])
76
84
 
77
85
  self
78
86
  end
@@ -39,10 +39,9 @@ module Peddler
39
39
  # @param isbn [String] The unique commercial book identifier used to identify books internationally.
40
40
  # @param jan [String] A Japanese article number that uniquely identifies the product, manufacturer, and its
41
41
  # attributes.
42
- # @param rate_limit [Float] Requests per second
43
42
  # @return [Peddler::Response] The API response
44
43
  def list_catalog_items(marketplace_id, query: nil, query_context_id: nil, seller_sku: nil, upc: nil, ean: nil,
45
- isbn: nil, jan: nil, rate_limit: nil)
44
+ isbn: nil, jan: nil)
46
45
  path = "/catalog/v0/items"
47
46
  params = {
48
47
  "MarketplaceId" => marketplace_id,
@@ -68,9 +67,8 @@ module Peddler
68
67
  # @note This operation can make a static sandbox call.
69
68
  # @param marketplace_id [String] A marketplace identifier. Specifies the marketplace for the item.
70
69
  # @param asin [String] The Amazon Standard Identification Number (ASIN) of the item.
71
- # @param rate_limit [Float] Requests per second
72
70
  # @return [Peddler::Response] The API response
73
- def get_catalog_item(marketplace_id, asin, rate_limit: nil)
71
+ def get_catalog_item(marketplace_id, asin)
74
72
  path = "/catalog/v0/items/#{asin}"
75
73
  params = {
76
74
  "MarketplaceId" => marketplace_id,
@@ -68,9 +68,8 @@ module Peddler
68
68
  #
69
69
  # @note This operation can make a dynamic sandbox call.
70
70
  # @param create_inventory_item_request_body [Hash] CreateInventoryItem Request Body Parameter.
71
- # @param rate_limit [Float] Requests per second
72
71
  # @return [Peddler::Response] The API response
73
- def create_inventory_item(create_inventory_item_request_body, rate_limit: nil)
72
+ def create_inventory_item(create_inventory_item_request_body)
74
73
  must_sandbox!
75
74
 
76
75
  path = "/fba/inventory/v1/items"
@@ -86,9 +85,8 @@ module Peddler
86
85
  # @note This operation can make a dynamic sandbox call.
87
86
  # @param seller_sku [String] A single seller SKU used for querying the specified seller SKU inventory summaries.
88
87
  # @param marketplace_id [String] The marketplace ID for the marketplace for which the sellerSku is to be deleted.
89
- # @param rate_limit [Float] Requests per second
90
88
  # @return [Peddler::Response] The API response
91
- def delete_inventory_item(seller_sku, marketplace_id, rate_limit: nil)
89
+ def delete_inventory_item(seller_sku, marketplace_id)
92
90
  must_sandbox!
93
91
 
94
92
  path = "/fba/inventory/v1/items/#{seller_sku}"
@@ -107,9 +105,8 @@ module Peddler
107
105
  # @note This operation can make a dynamic sandbox call.
108
106
  # @param x_amzn_idempotency_token [String] A unique token/requestId provided with each call to ensure idempotency.
109
107
  # @param add_inventory_request_body [Hash] List of items to add to Sandbox inventory.
110
- # @param rate_limit [Float] Requests per second
111
108
  # @return [Peddler::Response] The API response
112
- def add_inventory(x_amzn_idempotency_token, add_inventory_request_body, rate_limit: nil)
109
+ def add_inventory(x_amzn_idempotency_token, add_inventory_request_body)
113
110
  must_sandbox!
114
111
 
115
112
  path = "/fba/inventory/v1/items/inventory"
@@ -184,9 +184,8 @@ module Peddler
184
184
  # @param seller_fulfillment_order_id [String] The identifier assigned to the item by the seller when the
185
185
  # fulfillment order was created.
186
186
  # @param body [Hash] The identifier assigned to the item by the seller when the fulfillment order was created.
187
- # @param rate_limit [Float] Requests per second
188
187
  # @return [Peddler::Response] The API response
189
- def submit_fulfillment_order_status_update(seller_fulfillment_order_id, body, rate_limit: nil)
188
+ def submit_fulfillment_order_status_update(seller_fulfillment_order_id, body)
190
189
  must_sandbox!
191
190
 
192
191
  path = "/fba/outbound/2020-07-01/fulfillmentOrders/#{seller_fulfillment_order_id}/status"
@@ -258,9 +258,8 @@ module Peddler
258
258
  # @param marketplace_ids [Array<String>] A marketplace identifier. This specifies the marketplace in which the
259
259
  # order was placed. Only one marketplace can be specified.
260
260
  # @param body [Hash]
261
- # @param rate_limit [Float] Requests per second
262
261
  # @return [Peddler::Response] The API response
263
- def send_invoice(amazon_order_id, marketplace_ids, body, rate_limit: nil)
262
+ def send_invoice(amazon_order_id, marketplace_ids, body)
264
263
  path = "/messaging/v1/orders/#{amazon_order_id}/messages/invoice"
265
264
  params = {
266
265
  "marketplaceIds" => marketplace_ids,
@@ -19,9 +19,8 @@ module Peddler
19
19
  # @note This operation can make a static sandbox call.
20
20
  # @param next_page_token [String] The pagination token to retrieve a specific page of results.
21
21
  # @param page_size [Number] The number of supply sources to return per paginated request.
22
- # @param rate_limit [Float] Requests per second
23
22
  # @return [Peddler::Response] The API response
24
- def get_supply_sources(next_page_token: nil, page_size: 10, rate_limit: nil)
23
+ def get_supply_sources(next_page_token: nil, page_size: 10)
25
24
  path = "/supplySources/2020-07-01/supplySources"
26
25
  params = {
27
26
  "nextPageToken" => next_page_token,
@@ -35,9 +34,8 @@ module Peddler
35
34
  #
36
35
  # @note This operation can make a static sandbox call.
37
36
  # @param payload [Hash] A request to create a supply source.
38
- # @param rate_limit [Float] Requests per second
39
37
  # @return [Peddler::Response] The API response
40
- def create_supply_source(payload, rate_limit: nil)
38
+ def create_supply_source(payload)
41
39
  path = "/supplySources/2020-07-01/supplySources"
42
40
  body = payload
43
41
 
@@ -48,9 +46,8 @@ module Peddler
48
46
  #
49
47
  # @note This operation can make a static sandbox call.
50
48
  # @param supply_source_id [String] The unique identifier of a supply source.
51
- # @param rate_limit [Float] Requests per second
52
49
  # @return [Peddler::Response] The API response
53
- def get_supply_source(supply_source_id, rate_limit: nil)
50
+ def get_supply_source(supply_source_id)
54
51
  path = "/supplySources/2020-07-01/supplySources/#{supply_source_id}"
55
52
 
56
53
  get(path)
@@ -61,9 +58,8 @@ module Peddler
61
58
  # @note This operation can make a static sandbox call.
62
59
  # @param supply_source_id [String] The unique identitier of a supply source.
63
60
  # @param payload [Hash]
64
- # @param rate_limit [Float] Requests per second
65
61
  # @return [Peddler::Response] The API response
66
- def update_supply_source(supply_source_id, payload: nil, rate_limit: nil)
62
+ def update_supply_source(supply_source_id, payload: nil)
67
63
  path = "/supplySources/2020-07-01/supplySources/#{supply_source_id}"
68
64
  body = payload
69
65
 
@@ -74,9 +70,8 @@ module Peddler
74
70
  #
75
71
  # @note This operation can make a static sandbox call.
76
72
  # @param supply_source_id [String] The unique identifier of a supply source.
77
- # @param rate_limit [Float] Requests per second
78
73
  # @return [Peddler::Response] The API response
79
- def archive_supply_source(supply_source_id, rate_limit: nil)
74
+ def archive_supply_source(supply_source_id)
80
75
  path = "/supplySources/2020-07-01/supplySources/#{supply_source_id}"
81
76
 
82
77
  delete(path)
@@ -87,9 +82,8 @@ module Peddler
87
82
  # @note This operation can make a static sandbox call.
88
83
  # @param supply_source_id [String] The unique identifier of a supply source.
89
84
  # @param payload [Hash]
90
- # @param rate_limit [Float] Requests per second
91
85
  # @return [Peddler::Response] The API response
92
- def update_supply_source_status(supply_source_id, payload: nil, rate_limit: nil)
86
+ def update_supply_source_status(supply_source_id, payload: nil)
93
87
  path = "/supplySources/2020-07-01/supplySources/#{supply_source_id}/status"
94
88
  body = payload
95
89
 
@@ -19,9 +19,8 @@ module Peddler
19
19
  #
20
20
  # @note This operation can make a dynamic sandbox call.
21
21
  # @param body [Hash] The request payload containing parameters for generating test order data scenarios.
22
- # @param rate_limit [Float] Requests per second
23
22
  # @return [Peddler::Response] The API response
24
- def generate_order_scenarios(body, rate_limit: nil)
23
+ def generate_order_scenarios(body)
25
24
  path = "/vendor/directFulfillment/sandbox/2021-10-28/orders"
26
25
 
27
26
  post(path, body:)
@@ -33,9 +32,8 @@ module Peddler
33
32
  # @note This operation can make a dynamic sandbox call.
34
33
  # @param transaction_id [String] The transaction identifier returned in the response to the generateOrderScenarios
35
34
  # operation.
36
- # @param rate_limit [Float] Requests per second
37
35
  # @return [Peddler::Response] The API response
38
- def get_order_scenarios(transaction_id, rate_limit: nil)
36
+ def get_order_scenarios(transaction_id)
39
37
  path = "/vendor/directFulfillment/sandbox/2021-10-28/transactions/#{transaction_id}"
40
38
 
41
39
  get(path)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Peddler
4
- VERSION = "4.0.1"
4
+ VERSION = "4.1.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: peddler
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.1
4
+ version: 4.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hakan Ensari
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-12-13 00:00:00.000000000 Z
11
+ date: 2024-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http