ordercloud-python 2026.4.1__py3-none-any.whl
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.
- ordercloud/__init__.py +37 -0
- ordercloud/auth.py +136 -0
- ordercloud/client.py +211 -0
- ordercloud/config.py +42 -0
- ordercloud/errors.py +47 -0
- ordercloud/http.py +218 -0
- ordercloud/middleware.py +66 -0
- ordercloud/models/__init__.py +271 -0
- ordercloud/models/address.py +47 -0
- ordercloud/models/api_client.py +116 -0
- ordercloud/models/approval.py +73 -0
- ordercloud/models/assignments.py +402 -0
- ordercloud/models/auth_models.py +114 -0
- ordercloud/models/bundle.py +31 -0
- ordercloud/models/buyer.py +271 -0
- ordercloud/models/catalog.py +33 -0
- ordercloud/models/category.py +35 -0
- ordercloud/models/cost_center.py +27 -0
- ordercloud/models/credit_card.py +35 -0
- ordercloud/models/delivery.py +277 -0
- ordercloud/models/discount.py +63 -0
- ordercloud/models/integration.py +76 -0
- ordercloud/models/inventory_record.py +53 -0
- ordercloud/models/line_item.py +95 -0
- ordercloud/models/line_item_types.py +89 -0
- ordercloud/models/message_sender.py +80 -0
- ordercloud/models/misc.py +280 -0
- ordercloud/models/open_id_connect.py +47 -0
- ordercloud/models/order.py +477 -0
- ordercloud/models/order_return.py +92 -0
- ordercloud/models/payment.py +77 -0
- ordercloud/models/price_schedule.py +76 -0
- ordercloud/models/product.py +227 -0
- ordercloud/models/product_collection.py +186 -0
- ordercloud/models/promotion.py +297 -0
- ordercloud/models/security.py +89 -0
- ordercloud/models/shared.py +131 -0
- ordercloud/models/shipment.py +150 -0
- ordercloud/models/spec.py +67 -0
- ordercloud/models/spending_account.py +33 -0
- ordercloud/models/subscription.py +125 -0
- ordercloud/models/supplier.py +43 -0
- ordercloud/models/sync.py +172 -0
- ordercloud/models/user.py +207 -0
- ordercloud/models/user_group.py +27 -0
- ordercloud/models/webhook.py +58 -0
- ordercloud/py.typed +0 -0
- ordercloud/resources/__init__.py +65 -0
- ordercloud/resources/addresses.py +228 -0
- ordercloud/resources/admin_addresses.py +128 -0
- ordercloud/resources/admin_user_groups.py +185 -0
- ordercloud/resources/admin_users.py +150 -0
- ordercloud/resources/api_clients.py +308 -0
- ordercloud/resources/approval_rules.py +144 -0
- ordercloud/resources/base.py +145 -0
- ordercloud/resources/bundle_line_items.py +59 -0
- ordercloud/resources/bundle_subscription_items.py +54 -0
- ordercloud/resources/bundles.py +278 -0
- ordercloud/resources/buyer_groups.py +128 -0
- ordercloud/resources/buyers.py +164 -0
- ordercloud/resources/cart.py +613 -0
- ordercloud/resources/catalogs.py +311 -0
- ordercloud/resources/categories.py +392 -0
- ordercloud/resources/cost_centers.py +222 -0
- ordercloud/resources/credit_cards.py +227 -0
- ordercloud/resources/delivery_configurations.py +132 -0
- ordercloud/resources/discounts.py +201 -0
- ordercloud/resources/entity_syncs.py +534 -0
- ordercloud/resources/error_configs.py +71 -0
- ordercloud/resources/forgotten_credentials.py +74 -0
- ordercloud/resources/group_orders.py +28 -0
- ordercloud/resources/impersonation_configs.py +132 -0
- ordercloud/resources/incrementors.py +128 -0
- ordercloud/resources/integration_events.py +203 -0
- ordercloud/resources/inventory_integrations.py +65 -0
- ordercloud/resources/inventory_records.py +484 -0
- ordercloud/resources/line_items.py +262 -0
- ordercloud/resources/locales.py +203 -0
- ordercloud/resources/me.py +1882 -0
- ordercloud/resources/message_senders.py +261 -0
- ordercloud/resources/open_id_connects.py +128 -0
- ordercloud/resources/order_returns.py +306 -0
- ordercloud/resources/order_syncs.py +65 -0
- ordercloud/resources/orders.py +689 -0
- ordercloud/resources/payments.py +176 -0
- ordercloud/resources/price_schedules.py +164 -0
- ordercloud/resources/product_collections.py +116 -0
- ordercloud/resources/product_facets.py +128 -0
- ordercloud/resources/product_syncs.py +76 -0
- ordercloud/resources/products.py +454 -0
- ordercloud/resources/promotion_integrations.py +65 -0
- ordercloud/resources/promotions.py +203 -0
- ordercloud/resources/security_profiles.py +222 -0
- ordercloud/resources/seller_approval_rules.py +128 -0
- ordercloud/resources/shipments.py +256 -0
- ordercloud/resources/specs.py +313 -0
- ordercloud/resources/spending_accounts.py +227 -0
- ordercloud/resources/subscription_integrations.py +65 -0
- ordercloud/resources/subscription_items.py +146 -0
- ordercloud/resources/subscriptions.py +128 -0
- ordercloud/resources/supplier_addresses.py +144 -0
- ordercloud/resources/supplier_user_groups.py +210 -0
- ordercloud/resources/supplier_users.py +170 -0
- ordercloud/resources/suppliers.py +190 -0
- ordercloud/resources/tracking_events.py +130 -0
- ordercloud/resources/user_groups.py +210 -0
- ordercloud/resources/users.py +254 -0
- ordercloud/resources/webhooks.py +128 -0
- ordercloud/resources/xp_indices.py +77 -0
- ordercloud/sync_client.py +170 -0
- ordercloud_python-2026.4.1.dist-info/METADATA +552 -0
- ordercloud_python-2026.4.1.dist-info/RECORD +114 -0
- ordercloud_python-2026.4.1.dist-info/WHEEL +4 -0
- ordercloud_python-2026.4.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,613 @@
|
|
|
1
|
+
# GENERATED by tools/codegen — DO NOT EDIT
|
|
2
|
+
# Source: ordercloud-openapi-v3.json
|
|
3
|
+
"""OrderCloud Cart API resource."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
from typing import Any, Optional, Union
|
|
7
|
+
|
|
8
|
+
from ..models.address import Address
|
|
9
|
+
from ..models.line_item import BundleItems, LineItem
|
|
10
|
+
from ..models.order import Order, OrderPromotion, OrderShipMethodSelection, OrderWorksheet
|
|
11
|
+
from ..models.payment import Payment, PaymentTransaction
|
|
12
|
+
from ..models.promotion import EligiblePromotion, RefreshPromosResponse
|
|
13
|
+
from ..models.shared import ListPage
|
|
14
|
+
from .base import BaseResource
|
|
15
|
+
|
|
16
|
+
__all__ = ["CartResource"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class CartResource(BaseResource):
|
|
20
|
+
"""Operations on OrderCloud Cart."""
|
|
21
|
+
|
|
22
|
+
async def get(
|
|
23
|
+
self,
|
|
24
|
+
) -> Order:
|
|
25
|
+
"""Retrieve a cart
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
The Order object.
|
|
29
|
+
"""
|
|
30
|
+
resp = await self._http.get("/cart")
|
|
31
|
+
return Order(**resp.json())
|
|
32
|
+
|
|
33
|
+
async def save(
|
|
34
|
+
self,
|
|
35
|
+
order: Union[Order, dict[str, Any]],
|
|
36
|
+
) -> Order:
|
|
37
|
+
"""Create or update a cart
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
order: A ``Order`` model or dict.
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
The Order object.
|
|
44
|
+
"""
|
|
45
|
+
resp = await self._http.put(
|
|
46
|
+
"/cart",
|
|
47
|
+
json=self._serialize(order),
|
|
48
|
+
)
|
|
49
|
+
return Order(**resp.json())
|
|
50
|
+
|
|
51
|
+
async def delete(
|
|
52
|
+
self,
|
|
53
|
+
) -> None:
|
|
54
|
+
"""Delete a cart"""
|
|
55
|
+
await self._http.delete("/cart")
|
|
56
|
+
|
|
57
|
+
async def patch(
|
|
58
|
+
self,
|
|
59
|
+
partial: dict[str, Any],
|
|
60
|
+
) -> Order:
|
|
61
|
+
"""Partially update a cart
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
partial: A dict of fields to update.
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
The Order object.
|
|
68
|
+
"""
|
|
69
|
+
resp = await self._http.patch("/cart", json=partial)
|
|
70
|
+
return Order(**resp.json())
|
|
71
|
+
|
|
72
|
+
async def set_active_cart(
|
|
73
|
+
self,
|
|
74
|
+
order_id: str,
|
|
75
|
+
) -> None:
|
|
76
|
+
"""Set an active cart
|
|
77
|
+
|
|
78
|
+
Args:
|
|
79
|
+
order_id: ID of the order.
|
|
80
|
+
"""
|
|
81
|
+
await self._http.put(f"/cart/{order_id}")
|
|
82
|
+
|
|
83
|
+
async def apply_promotions(
|
|
84
|
+
self,
|
|
85
|
+
) -> Order:
|
|
86
|
+
"""Auto-apply promotions to the cart
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
The Order object.
|
|
90
|
+
"""
|
|
91
|
+
resp = await self._http.post("/cart/applypromotions")
|
|
92
|
+
return Order(**resp.json())
|
|
93
|
+
|
|
94
|
+
async def set_billing_address(
|
|
95
|
+
self,
|
|
96
|
+
address: Union[Address, dict[str, Any]],
|
|
97
|
+
) -> Order:
|
|
98
|
+
"""Set a billing address
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
address: A ``Address`` model or dict. Required fields: Street1, City, Country.
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
The Order object.
|
|
105
|
+
"""
|
|
106
|
+
resp = await self._http.put(
|
|
107
|
+
"/cart/billto",
|
|
108
|
+
json=self._serialize(address),
|
|
109
|
+
)
|
|
110
|
+
return Order(**resp.json())
|
|
111
|
+
|
|
112
|
+
async def patch_billing_address(
|
|
113
|
+
self,
|
|
114
|
+
partial: dict[str, Any],
|
|
115
|
+
) -> Order:
|
|
116
|
+
"""Partially update a cart billing address
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
partial: A dict of fields to update.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
The Order object.
|
|
123
|
+
"""
|
|
124
|
+
resp = await self._http.patch("/cart/billto", json=partial)
|
|
125
|
+
return Order(**resp.json())
|
|
126
|
+
|
|
127
|
+
async def create_bundle_item(
|
|
128
|
+
self,
|
|
129
|
+
bundle_id: str,
|
|
130
|
+
bundle_items: Union[BundleItems, dict[str, Any]],
|
|
131
|
+
) -> LineItem:
|
|
132
|
+
"""Create a cart bundle item
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
bundle_id: ID of the bundle.
|
|
136
|
+
bundle_items: A ``BundleItems`` model or dict.
|
|
137
|
+
|
|
138
|
+
Returns:
|
|
139
|
+
The LineItem object.
|
|
140
|
+
"""
|
|
141
|
+
resp = await self._http.post(
|
|
142
|
+
f"/cart/bundles/{bundle_id}", json=self._serialize(bundle_items)
|
|
143
|
+
)
|
|
144
|
+
return LineItem(**resp.json())
|
|
145
|
+
|
|
146
|
+
async def delete_bundle_item(
|
|
147
|
+
self,
|
|
148
|
+
bundle_id: str,
|
|
149
|
+
bundle_item_id: str,
|
|
150
|
+
) -> None:
|
|
151
|
+
"""Delete a cart bundle item
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
bundle_id: ID of the bundle.
|
|
155
|
+
bundle_item_id: ID of the bundle item.
|
|
156
|
+
"""
|
|
157
|
+
await self._http.delete(f"/cart/bundles/{bundle_id}/{bundle_item_id}")
|
|
158
|
+
|
|
159
|
+
async def calculate(
|
|
160
|
+
self,
|
|
161
|
+
) -> OrderWorksheet:
|
|
162
|
+
"""Calculate the cart
|
|
163
|
+
|
|
164
|
+
Returns:
|
|
165
|
+
The OrderWorksheet object.
|
|
166
|
+
"""
|
|
167
|
+
resp = await self._http.post("/cart/calculate")
|
|
168
|
+
return OrderWorksheet(**resp.json())
|
|
169
|
+
|
|
170
|
+
async def list_eligible_promotions(
|
|
171
|
+
self,
|
|
172
|
+
*,
|
|
173
|
+
search: Optional[str] = None,
|
|
174
|
+
search_on: Optional[str] = None,
|
|
175
|
+
sort_by: Optional[str] = None,
|
|
176
|
+
page: Optional[int] = None,
|
|
177
|
+
page_size: Optional[int] = None,
|
|
178
|
+
filters: Optional[dict[str, Any]] = None,
|
|
179
|
+
) -> ListPage[EligiblePromotion]:
|
|
180
|
+
"""List eligible promotions for the cart
|
|
181
|
+
|
|
182
|
+
Args:
|
|
183
|
+
search: Word or phrase to search for.
|
|
184
|
+
search_on: Comma-delimited list of fields to search on.
|
|
185
|
+
sort_by: Comma-delimited list of fields to sort by.
|
|
186
|
+
page: Page of results to return. When paginating through many items (> page 30), we recommend the "Last ID" method, as outlined in the Advanced Querying documentation.
|
|
187
|
+
page_size: Number of results to return per page.
|
|
188
|
+
filters: An object or dictionary representing key/value pairs to apply as filters. Valid keys are top-level properties of the returned model or 'xp.???'
|
|
189
|
+
|
|
190
|
+
Returns:
|
|
191
|
+
A paginated list of EligiblePromotion objects.
|
|
192
|
+
"""
|
|
193
|
+
params = self._build_list_params(
|
|
194
|
+
search=search,
|
|
195
|
+
search_on=search_on,
|
|
196
|
+
sort_by=sort_by,
|
|
197
|
+
page=page,
|
|
198
|
+
page_size=page_size,
|
|
199
|
+
filters=filters,
|
|
200
|
+
)
|
|
201
|
+
resp = await self._http.get("/cart/eligiblepromotions", **params)
|
|
202
|
+
return self._parse_list(resp.json(), EligiblePromotion)
|
|
203
|
+
|
|
204
|
+
async def estimate_shipping(
|
|
205
|
+
self,
|
|
206
|
+
) -> OrderWorksheet:
|
|
207
|
+
"""Estimate shipping cost
|
|
208
|
+
|
|
209
|
+
Returns:
|
|
210
|
+
The OrderWorksheet object.
|
|
211
|
+
"""
|
|
212
|
+
resp = await self._http.post("/cart/estimateshipping")
|
|
213
|
+
return OrderWorksheet(**resp.json())
|
|
214
|
+
|
|
215
|
+
async def patch_from_user(
|
|
216
|
+
self,
|
|
217
|
+
partial: dict[str, Any],
|
|
218
|
+
) -> Order:
|
|
219
|
+
"""Partially update a cart from user
|
|
220
|
+
|
|
221
|
+
Args:
|
|
222
|
+
partial: A dict of fields to update.
|
|
223
|
+
|
|
224
|
+
Returns:
|
|
225
|
+
The Order object.
|
|
226
|
+
"""
|
|
227
|
+
resp = await self._http.patch("/cart/fromuser", json=partial)
|
|
228
|
+
return Order(**resp.json())
|
|
229
|
+
|
|
230
|
+
async def list_line_items(
|
|
231
|
+
self,
|
|
232
|
+
*,
|
|
233
|
+
search: Optional[str] = None,
|
|
234
|
+
search_on: Optional[str] = None,
|
|
235
|
+
sort_by: Optional[str] = None,
|
|
236
|
+
page: Optional[int] = None,
|
|
237
|
+
page_size: Optional[int] = None,
|
|
238
|
+
filters: Optional[dict[str, Any]] = None,
|
|
239
|
+
) -> ListPage[LineItem]:
|
|
240
|
+
"""List cart line items
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
search: Word or phrase to search for.
|
|
244
|
+
search_on: Comma-delimited list of fields to search on.
|
|
245
|
+
sort_by: Comma-delimited list of fields to sort by.
|
|
246
|
+
page: Page of results to return. When paginating through many items (> page 30), we recommend the "Last ID" method, as outlined in the Advanced Querying documentation.
|
|
247
|
+
page_size: Number of results to return per page.
|
|
248
|
+
filters: An object or dictionary representing key/value pairs to apply as filters. Valid keys are top-level properties of the returned model or 'xp.???'
|
|
249
|
+
|
|
250
|
+
Returns:
|
|
251
|
+
A paginated list of LineItem objects.
|
|
252
|
+
"""
|
|
253
|
+
params = self._build_list_params(
|
|
254
|
+
search=search,
|
|
255
|
+
search_on=search_on,
|
|
256
|
+
sort_by=sort_by,
|
|
257
|
+
page=page,
|
|
258
|
+
page_size=page_size,
|
|
259
|
+
filters=filters,
|
|
260
|
+
)
|
|
261
|
+
resp = await self._http.get("/cart/lineitems", **params)
|
|
262
|
+
return self._parse_list(resp.json(), LineItem)
|
|
263
|
+
|
|
264
|
+
async def create_line_item(
|
|
265
|
+
self,
|
|
266
|
+
line_item: Union[LineItem, dict[str, Any]],
|
|
267
|
+
) -> LineItem:
|
|
268
|
+
"""Create a cart line item
|
|
269
|
+
|
|
270
|
+
Args:
|
|
271
|
+
line_item: A ``LineItem`` model or dict. Required fields: ProductID.
|
|
272
|
+
|
|
273
|
+
Returns:
|
|
274
|
+
The LineItem object.
|
|
275
|
+
"""
|
|
276
|
+
resp = await self._http.post("/cart/lineitems", json=self._serialize(line_item))
|
|
277
|
+
return LineItem(**resp.json())
|
|
278
|
+
|
|
279
|
+
async def get_line_item(
|
|
280
|
+
self,
|
|
281
|
+
line_item_id: str,
|
|
282
|
+
) -> LineItem:
|
|
283
|
+
"""Retrieve a cart line item
|
|
284
|
+
|
|
285
|
+
Args:
|
|
286
|
+
line_item_id: ID of the line item.
|
|
287
|
+
|
|
288
|
+
Returns:
|
|
289
|
+
The LineItem object.
|
|
290
|
+
"""
|
|
291
|
+
resp = await self._http.get(f"/cart/lineitems/{line_item_id}")
|
|
292
|
+
return LineItem(**resp.json())
|
|
293
|
+
|
|
294
|
+
async def save_line_item(
|
|
295
|
+
self,
|
|
296
|
+
line_item_id: str,
|
|
297
|
+
line_item: Union[LineItem, dict[str, Any]],
|
|
298
|
+
) -> LineItem:
|
|
299
|
+
"""Create or update a cart line item
|
|
300
|
+
|
|
301
|
+
Args:
|
|
302
|
+
line_item_id: ID of the line item.
|
|
303
|
+
line_item: A ``LineItem`` model or dict. Required fields: ProductID.
|
|
304
|
+
|
|
305
|
+
Returns:
|
|
306
|
+
The LineItem object.
|
|
307
|
+
"""
|
|
308
|
+
resp = await self._http.put(
|
|
309
|
+
f"/cart/lineitems/{line_item_id}",
|
|
310
|
+
json=self._serialize(line_item),
|
|
311
|
+
)
|
|
312
|
+
return LineItem(**resp.json())
|
|
313
|
+
|
|
314
|
+
async def delete_line_item(
|
|
315
|
+
self,
|
|
316
|
+
line_item_id: str,
|
|
317
|
+
) -> None:
|
|
318
|
+
"""Delete a cart line item
|
|
319
|
+
|
|
320
|
+
Args:
|
|
321
|
+
line_item_id: ID of the line item.
|
|
322
|
+
"""
|
|
323
|
+
await self._http.delete(f"/cart/lineitems/{line_item_id}")
|
|
324
|
+
|
|
325
|
+
async def patch_line_item(
|
|
326
|
+
self,
|
|
327
|
+
line_item_id: str,
|
|
328
|
+
partial: dict[str, Any],
|
|
329
|
+
) -> LineItem:
|
|
330
|
+
"""Partially update a cart line item
|
|
331
|
+
|
|
332
|
+
Args:
|
|
333
|
+
line_item_id: ID of the line item.
|
|
334
|
+
partial: A dict of fields to update.
|
|
335
|
+
|
|
336
|
+
Returns:
|
|
337
|
+
The LineItem object.
|
|
338
|
+
"""
|
|
339
|
+
resp = await self._http.patch(f"/cart/lineitems/{line_item_id}", json=partial)
|
|
340
|
+
return LineItem(**resp.json())
|
|
341
|
+
|
|
342
|
+
async def list_payments(
|
|
343
|
+
self,
|
|
344
|
+
*,
|
|
345
|
+
search: Optional[str] = None,
|
|
346
|
+
search_on: Optional[str] = None,
|
|
347
|
+
sort_by: Optional[str] = None,
|
|
348
|
+
page: Optional[int] = None,
|
|
349
|
+
page_size: Optional[int] = None,
|
|
350
|
+
filters: Optional[dict[str, Any]] = None,
|
|
351
|
+
) -> ListPage[Payment]:
|
|
352
|
+
"""List cart payments
|
|
353
|
+
|
|
354
|
+
Args:
|
|
355
|
+
search: Word or phrase to search for.
|
|
356
|
+
search_on: Comma-delimited list of fields to search on.
|
|
357
|
+
sort_by: Comma-delimited list of fields to sort by.
|
|
358
|
+
page: Page of results to return. When paginating through many items (> page 30), we recommend the "Last ID" method, as outlined in the Advanced Querying documentation.
|
|
359
|
+
page_size: Number of results to return per page.
|
|
360
|
+
filters: An object or dictionary representing key/value pairs to apply as filters. Valid keys are top-level properties of the returned model or 'xp.???'
|
|
361
|
+
|
|
362
|
+
Returns:
|
|
363
|
+
A paginated list of Payment objects.
|
|
364
|
+
"""
|
|
365
|
+
params = self._build_list_params(
|
|
366
|
+
search=search,
|
|
367
|
+
search_on=search_on,
|
|
368
|
+
sort_by=sort_by,
|
|
369
|
+
page=page,
|
|
370
|
+
page_size=page_size,
|
|
371
|
+
filters=filters,
|
|
372
|
+
)
|
|
373
|
+
resp = await self._http.get("/cart/payments", **params)
|
|
374
|
+
return self._parse_list(resp.json(), Payment)
|
|
375
|
+
|
|
376
|
+
async def create_payment(
|
|
377
|
+
self,
|
|
378
|
+
payment: Union[Payment, dict[str, Any]],
|
|
379
|
+
) -> Payment:
|
|
380
|
+
"""Create a cart payment
|
|
381
|
+
|
|
382
|
+
Args:
|
|
383
|
+
payment: A ``Payment`` model or dict.
|
|
384
|
+
|
|
385
|
+
Returns:
|
|
386
|
+
The Payment object.
|
|
387
|
+
"""
|
|
388
|
+
resp = await self._http.post("/cart/payments", json=self._serialize(payment))
|
|
389
|
+
return Payment(**resp.json())
|
|
390
|
+
|
|
391
|
+
async def get_payment(
|
|
392
|
+
self,
|
|
393
|
+
payment_id: str,
|
|
394
|
+
) -> Payment:
|
|
395
|
+
"""Retrieve a cart payment
|
|
396
|
+
|
|
397
|
+
Args:
|
|
398
|
+
payment_id: ID of the payment.
|
|
399
|
+
|
|
400
|
+
Returns:
|
|
401
|
+
The Payment object.
|
|
402
|
+
"""
|
|
403
|
+
resp = await self._http.get(f"/cart/payments/{payment_id}")
|
|
404
|
+
return Payment(**resp.json())
|
|
405
|
+
|
|
406
|
+
async def delete_payment(
|
|
407
|
+
self,
|
|
408
|
+
payment_id: str,
|
|
409
|
+
) -> None:
|
|
410
|
+
"""Delete a cart payment
|
|
411
|
+
|
|
412
|
+
Args:
|
|
413
|
+
payment_id: ID of the payment.
|
|
414
|
+
"""
|
|
415
|
+
await self._http.delete(f"/cart/payments/{payment_id}")
|
|
416
|
+
|
|
417
|
+
async def patch_payment(
|
|
418
|
+
self,
|
|
419
|
+
payment_id: str,
|
|
420
|
+
partial: dict[str, Any],
|
|
421
|
+
) -> Payment:
|
|
422
|
+
"""Partially update a cart payment
|
|
423
|
+
|
|
424
|
+
Args:
|
|
425
|
+
payment_id: ID of the payment.
|
|
426
|
+
partial: A dict of fields to update.
|
|
427
|
+
|
|
428
|
+
Returns:
|
|
429
|
+
The Payment object.
|
|
430
|
+
"""
|
|
431
|
+
resp = await self._http.patch(f"/cart/payments/{payment_id}", json=partial)
|
|
432
|
+
return Payment(**resp.json())
|
|
433
|
+
|
|
434
|
+
async def create_payment_transaction(
|
|
435
|
+
self,
|
|
436
|
+
payment_id: str,
|
|
437
|
+
payment_transaction: Union[PaymentTransaction, dict[str, Any]],
|
|
438
|
+
) -> Payment:
|
|
439
|
+
"""Create a cart payment transaction
|
|
440
|
+
|
|
441
|
+
Args:
|
|
442
|
+
payment_id: ID of the payment.
|
|
443
|
+
payment_transaction: A ``PaymentTransaction`` model or dict. Required fields: Type, DateExecuted.
|
|
444
|
+
|
|
445
|
+
Returns:
|
|
446
|
+
The Payment object.
|
|
447
|
+
"""
|
|
448
|
+
resp = await self._http.post(
|
|
449
|
+
f"/cart/payments/{payment_id}/transactions", json=self._serialize(payment_transaction)
|
|
450
|
+
)
|
|
451
|
+
return Payment(**resp.json())
|
|
452
|
+
|
|
453
|
+
async def delete_payment_transaction(
|
|
454
|
+
self,
|
|
455
|
+
payment_id: str,
|
|
456
|
+
transaction_id: str,
|
|
457
|
+
) -> None:
|
|
458
|
+
"""Delete a cart payment transaction
|
|
459
|
+
|
|
460
|
+
Args:
|
|
461
|
+
payment_id: ID of the payment.
|
|
462
|
+
transaction_id: ID of the transaction.
|
|
463
|
+
"""
|
|
464
|
+
await self._http.delete(f"/cart/payments/{payment_id}/transactions/{transaction_id}")
|
|
465
|
+
|
|
466
|
+
async def list_promotions(
|
|
467
|
+
self,
|
|
468
|
+
*,
|
|
469
|
+
search: Optional[str] = None,
|
|
470
|
+
search_on: Optional[str] = None,
|
|
471
|
+
sort_by: Optional[str] = None,
|
|
472
|
+
page: Optional[int] = None,
|
|
473
|
+
page_size: Optional[int] = None,
|
|
474
|
+
filters: Optional[dict[str, Any]] = None,
|
|
475
|
+
) -> ListPage[OrderPromotion]:
|
|
476
|
+
"""List cart promotions
|
|
477
|
+
|
|
478
|
+
Args:
|
|
479
|
+
search: Word or phrase to search for.
|
|
480
|
+
search_on: Comma-delimited list of fields to search on.
|
|
481
|
+
sort_by: Comma-delimited list of fields to sort by.
|
|
482
|
+
page: Page of results to return. When paginating through many items (> page 30), we recommend the "Last ID" method, as outlined in the Advanced Querying documentation.
|
|
483
|
+
page_size: Number of results to return per page.
|
|
484
|
+
filters: An object or dictionary representing key/value pairs to apply as filters. Valid keys are top-level properties of the returned model or 'xp.???'
|
|
485
|
+
|
|
486
|
+
Returns:
|
|
487
|
+
A paginated list of OrderPromotion objects.
|
|
488
|
+
"""
|
|
489
|
+
params = self._build_list_params(
|
|
490
|
+
search=search,
|
|
491
|
+
search_on=search_on,
|
|
492
|
+
sort_by=sort_by,
|
|
493
|
+
page=page,
|
|
494
|
+
page_size=page_size,
|
|
495
|
+
filters=filters,
|
|
496
|
+
)
|
|
497
|
+
resp = await self._http.get("/cart/promotions", **params)
|
|
498
|
+
return self._parse_list(resp.json(), OrderPromotion)
|
|
499
|
+
|
|
500
|
+
async def add_promotion(
|
|
501
|
+
self,
|
|
502
|
+
promo_code: str,
|
|
503
|
+
) -> OrderPromotion:
|
|
504
|
+
"""Add a promotion
|
|
505
|
+
|
|
506
|
+
Args:
|
|
507
|
+
promo_code: Promo code of the order promotion.
|
|
508
|
+
|
|
509
|
+
Returns:
|
|
510
|
+
The OrderPromotion object.
|
|
511
|
+
"""
|
|
512
|
+
resp = await self._http.post(f"/cart/promotions/{promo_code}")
|
|
513
|
+
return OrderPromotion(**resp.json())
|
|
514
|
+
|
|
515
|
+
async def delete_promotion(
|
|
516
|
+
self,
|
|
517
|
+
promo_code: str,
|
|
518
|
+
) -> None:
|
|
519
|
+
"""Delete a cart promotion
|
|
520
|
+
|
|
521
|
+
Args:
|
|
522
|
+
promo_code: Promo code of the cart.
|
|
523
|
+
"""
|
|
524
|
+
await self._http.delete(f"/cart/promotions/{promo_code}")
|
|
525
|
+
|
|
526
|
+
async def refresh_promotions(
|
|
527
|
+
self,
|
|
528
|
+
) -> RefreshPromosResponse:
|
|
529
|
+
"""Refresh promotions on the cart
|
|
530
|
+
|
|
531
|
+
Returns:
|
|
532
|
+
The RefreshPromosResponse object.
|
|
533
|
+
"""
|
|
534
|
+
resp = await self._http.post("/cart/refreshpromotions")
|
|
535
|
+
return RefreshPromosResponse(**resp.json())
|
|
536
|
+
|
|
537
|
+
async def select_ship_methods(
|
|
538
|
+
self,
|
|
539
|
+
order_ship_method_selection: Union[OrderShipMethodSelection, dict[str, Any]],
|
|
540
|
+
) -> OrderWorksheet:
|
|
541
|
+
"""Select a ship method
|
|
542
|
+
|
|
543
|
+
Args:
|
|
544
|
+
order_ship_method_selection: A ``OrderShipMethodSelection`` model or dict.
|
|
545
|
+
|
|
546
|
+
Returns:
|
|
547
|
+
The OrderWorksheet object.
|
|
548
|
+
"""
|
|
549
|
+
resp = await self._http.post(
|
|
550
|
+
"/cart/shipmethods", json=self._serialize(order_ship_method_selection)
|
|
551
|
+
)
|
|
552
|
+
return OrderWorksheet(**resp.json())
|
|
553
|
+
|
|
554
|
+
async def set_shipping_address(
|
|
555
|
+
self,
|
|
556
|
+
address: Union[Address, dict[str, Any]],
|
|
557
|
+
) -> Order:
|
|
558
|
+
"""Set a shipping address
|
|
559
|
+
|
|
560
|
+
Args:
|
|
561
|
+
address: A ``Address`` model or dict. Required fields: Street1, City, Country.
|
|
562
|
+
|
|
563
|
+
Returns:
|
|
564
|
+
The Order object.
|
|
565
|
+
"""
|
|
566
|
+
resp = await self._http.put(
|
|
567
|
+
"/cart/shipto",
|
|
568
|
+
json=self._serialize(address),
|
|
569
|
+
)
|
|
570
|
+
return Order(**resp.json())
|
|
571
|
+
|
|
572
|
+
async def patch_shipping_address(
|
|
573
|
+
self,
|
|
574
|
+
partial: dict[str, Any],
|
|
575
|
+
) -> Order:
|
|
576
|
+
"""Partially update a cart shipping address
|
|
577
|
+
|
|
578
|
+
Args:
|
|
579
|
+
partial: A dict of fields to update.
|
|
580
|
+
|
|
581
|
+
Returns:
|
|
582
|
+
The Order object.
|
|
583
|
+
"""
|
|
584
|
+
resp = await self._http.patch("/cart/shipto", json=partial)
|
|
585
|
+
return Order(**resp.json())
|
|
586
|
+
|
|
587
|
+
async def submit(
|
|
588
|
+
self,
|
|
589
|
+
) -> Order:
|
|
590
|
+
"""Submit the cart
|
|
591
|
+
|
|
592
|
+
Returns:
|
|
593
|
+
The Order object.
|
|
594
|
+
"""
|
|
595
|
+
resp = await self._http.post("/cart/submit")
|
|
596
|
+
return Order(**resp.json())
|
|
597
|
+
|
|
598
|
+
async def validate(
|
|
599
|
+
self,
|
|
600
|
+
) -> None:
|
|
601
|
+
"""Validate the cart in it's current state"""
|
|
602
|
+
await self._http.post("/cart/validate")
|
|
603
|
+
|
|
604
|
+
async def get_order_worksheet(
|
|
605
|
+
self,
|
|
606
|
+
) -> OrderWorksheet:
|
|
607
|
+
"""Retrieve a cart order worksheet
|
|
608
|
+
|
|
609
|
+
Returns:
|
|
610
|
+
The OrderWorksheet object.
|
|
611
|
+
"""
|
|
612
|
+
resp = await self._http.get("/cart/worksheet")
|
|
613
|
+
return OrderWorksheet(**resp.json())
|