peddler 4.0.0 → 4.1.1
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.
- checksums.yaml +4 -4
- data/README.md +20 -6
- data/lib/peddler/api.rb +15 -7
- data/lib/peddler/apis/catalog_items_v0.rb +2 -4
- data/lib/peddler/apis/fba_inventory_v1.rb +3 -6
- data/lib/peddler/apis/fulfillment_outbound_2020_07_01.rb +1 -2
- data/lib/peddler/apis/messaging_v1.rb +1 -2
- data/lib/peddler/apis/supply_sources_2020_07_01.rb +6 -12
- data/lib/peddler/apis/vendor_direct_fulfillment_sandbox_test_data_2021_10_28.rb +2 -4
- data/lib/peddler/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7677959689b208211817ca535b18ec25d495df736d1e502e8b758cdb2c826603
|
4
|
+
data.tar.gz: c4c4f26d97ab8bcbb18e2ee0bbac890e7e2284b475a0d19286ea1c15e456b942
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc020ae6bda468c2d82044b8a7b226f6101ea141b63d3cd8731ae1c58507b93f11c9e8e18040cb8a31ff0c8dcef40617bdc080f76346f029ddab1b35076027e3
|
7
|
+
data.tar.gz: 9e8d25fbdfe70c203331fa4ffda8147000b59e66b0ec0658b99d17a25342e975706d9366d6b7c2d6d9314593cfc6a4fbd7e4bc50b4ff5613aaf452337b7b1061
|
data/README.md
CHANGED
@@ -22,7 +22,7 @@ To begin using the Amazon SP-API, you must [register as a developer][register-as
|
|
22
22
|
Add this line to your Gemfile.
|
23
23
|
|
24
24
|
```ruby
|
25
|
-
gem "peddler", "~>
|
25
|
+
gem "peddler", "~> 4.0"
|
26
26
|
```
|
27
27
|
|
28
28
|
And then execute:
|
@@ -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
|
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.
|
@@ -493,10 +507,10 @@ response.parse
|
|
493
507
|
|
494
508
|
## TODO
|
495
509
|
|
496
|
-
- Code generate
|
497
|
-
- Code generate the APIs section—descriptions and code examples—in this README here.
|
498
|
-
- Schedule code generation with GitHub Actions. Push new gem when models change.
|
499
|
-
- Review and consider applying [these patches][patches].
|
510
|
+
- [ ] Code generate payload parsers.
|
511
|
+
- [ ] Code generate the APIs section—descriptions and code examples—in this README here.
|
512
|
+
- [ ] Schedule code generation with GitHub Actions. Push new gem when models change.
|
513
|
+
- [ ] Review and consider applying [these patches][patches].
|
500
514
|
|
501
515
|
[build]: https://github.com/hakanensari/peddler/actions
|
502
516
|
[maintainability]: https://codeclimate.com/github/hakanensari/peddler/maintainability
|
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
|
|
@@ -66,13 +72,15 @@ module Peddler
|
|
66
72
|
|
67
73
|
# Throttles with a rate limit and retries when the API returns a 429
|
68
74
|
#
|
69
|
-
# @param [Float]
|
75
|
+
# @param [Float] requests_per_second
|
70
76
|
# @return [self]
|
71
|
-
def meter(
|
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
|
-
delay = sandbox? ? 0.2 : 1.0 /
|
75
|
-
retriable(delay:
|
82
|
+
delay = sandbox? ? 0.2 : 1.0 / requests_per_second
|
83
|
+
retriable(delay:, tries: retries + 1, retry_statuses: [429])
|
76
84
|
|
77
85
|
self
|
78
86
|
end
|
@@ -96,8 +104,8 @@ module Peddler
|
|
96
104
|
# @param (see Performer#initialize)
|
97
105
|
# @return [self]
|
98
106
|
[:via, :use, :retriable].each do |method|
|
99
|
-
define_method(method) do |*args, &block|
|
100
|
-
@http = http.send(method, *args, &block) if http.respond_to?(method)
|
107
|
+
define_method(method) do |*args, **kwargs, &block|
|
108
|
+
@http = http.send(method, *args, **kwargs, &block) if http.respond_to?(method)
|
101
109
|
self
|
102
110
|
end
|
103
111
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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)
|
data/lib/peddler/version.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2024-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|