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,58 @@
|
|
|
1
|
+
# GENERATED by tools/codegen — DO NOT EDIT
|
|
2
|
+
# Source: ordercloud-openapi-v3.json
|
|
3
|
+
"""OrderCloud WebhookRoute, Webhook models."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
from typing import Any, Optional
|
|
7
|
+
from pydantic import Field
|
|
8
|
+
|
|
9
|
+
from .shared import OrderCloudModel
|
|
10
|
+
from .misc import ApiRole
|
|
11
|
+
|
|
12
|
+
__all__ = ["WebhookRoute", "Webhook"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class WebhookRoute(OrderCloudModel):
|
|
16
|
+
"""An OrderCloud WebhookRoute.
|
|
17
|
+
|
|
18
|
+
Attributes:
|
|
19
|
+
route:
|
|
20
|
+
verb:
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
route: Optional[str] = Field(None, alias="Route")
|
|
24
|
+
verb: Optional[str] = Field(None, alias="Verb")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class Webhook(OrderCloudModel):
|
|
28
|
+
"""An OrderCloud Webhook.
|
|
29
|
+
|
|
30
|
+
Attributes:
|
|
31
|
+
id:
|
|
32
|
+
name:
|
|
33
|
+
description:
|
|
34
|
+
url: URL the webhook will POST data to, likely a route within your middleware. Required unless there is a valid DeliveryConfig.
|
|
35
|
+
hash_key: Security feature that allows your middleware to verify the digital signature in the request header to ensure you only accept trusted data.
|
|
36
|
+
elevated_roles: If you need additional data not provided by the webhook payload, you can request any elevated roles needed to make additional calls.
|
|
37
|
+
config_data:
|
|
38
|
+
before_process_request: If true, the webhook is processed prior to the call being made and OrderCloud waits for a response before proceeding.
|
|
39
|
+
api_client_i_ds: List of API client IDs the webhook will be triggered for.
|
|
40
|
+
webhook_routes: List of routes the webhook will be triggered for.
|
|
41
|
+
delivery_config_id:
|
|
42
|
+
custom_auth_header_name: The header name that can be passed to your middleware.
|
|
43
|
+
custom_auth_header_value: The header value that can be passed to your middleware.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
id: Optional[str] = Field(None, alias="ID")
|
|
47
|
+
name: Optional[str] = Field(None, alias="Name")
|
|
48
|
+
description: Optional[str] = Field(None, alias="Description")
|
|
49
|
+
url: Optional[str] = Field(None, alias="Url")
|
|
50
|
+
hash_key: Optional[str] = Field(None, alias="HashKey")
|
|
51
|
+
elevated_roles: Optional[list[ApiRole]] = Field(None, alias="ElevatedRoles")
|
|
52
|
+
config_data: Optional[dict[str, Any]] = Field(None, alias="ConfigData")
|
|
53
|
+
before_process_request: Optional[bool] = Field(None, alias="BeforeProcessRequest")
|
|
54
|
+
api_client_i_ds: Optional[list[str]] = Field(None, alias="ApiClientIDs")
|
|
55
|
+
webhook_routes: Optional[list[WebhookRoute]] = Field(None, alias="WebhookRoutes")
|
|
56
|
+
delivery_config_id: Optional[str] = Field(None, alias="DeliveryConfigID")
|
|
57
|
+
custom_auth_header_name: Optional[str] = Field(None, alias="CustomAuthHeaderName")
|
|
58
|
+
custom_auth_header_value: Optional[str] = Field(None, alias="CustomAuthHeaderValue")
|
ordercloud/py.typed
ADDED
|
File without changes
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# GENERATED by tools/codegen — DO NOT EDIT
|
|
2
|
+
# Source: ordercloud-openapi-v3.json
|
|
3
|
+
"""OrderCloud API resource clients."""
|
|
4
|
+
|
|
5
|
+
from .base import BaseResource # noqa: F401
|
|
6
|
+
from .addresses import AddressesResource # noqa: F401
|
|
7
|
+
from .admin_addresses import AdminAddressesResource # noqa: F401
|
|
8
|
+
from .admin_user_groups import AdminUserGroupsResource # noqa: F401
|
|
9
|
+
from .admin_users import AdminUsersResource # noqa: F401
|
|
10
|
+
from .api_clients import ApiClientsResource # noqa: F401
|
|
11
|
+
from .approval_rules import ApprovalRulesResource # noqa: F401
|
|
12
|
+
from .bundle_line_items import BundleLineItemsResource # noqa: F401
|
|
13
|
+
from .bundle_subscription_items import BundleSubscriptionItemsResource # noqa: F401
|
|
14
|
+
from .bundles import BundlesResource # noqa: F401
|
|
15
|
+
from .buyer_groups import BuyerGroupsResource # noqa: F401
|
|
16
|
+
from .buyers import BuyersResource # noqa: F401
|
|
17
|
+
from .cart import CartResource # noqa: F401
|
|
18
|
+
from .catalogs import CatalogsResource # noqa: F401
|
|
19
|
+
from .categories import CategoriesResource # noqa: F401
|
|
20
|
+
from .cost_centers import CostCentersResource # noqa: F401
|
|
21
|
+
from .credit_cards import CreditCardsResource # noqa: F401
|
|
22
|
+
from .delivery_configurations import DeliveryConfigurationsResource # noqa: F401
|
|
23
|
+
from .discounts import DiscountsResource # noqa: F401
|
|
24
|
+
from .entity_syncs import EntitySyncsResource # noqa: F401
|
|
25
|
+
from .error_configs import ErrorConfigsResource # noqa: F401
|
|
26
|
+
from .forgotten_credentials import ForgottenCredentialsResource # noqa: F401
|
|
27
|
+
from .group_orders import GroupOrdersResource # noqa: F401
|
|
28
|
+
from .impersonation_configs import ImpersonationConfigsResource # noqa: F401
|
|
29
|
+
from .incrementors import IncrementorsResource # noqa: F401
|
|
30
|
+
from .integration_events import IntegrationEventsResource # noqa: F401
|
|
31
|
+
from .inventory_integrations import InventoryIntegrationsResource # noqa: F401
|
|
32
|
+
from .inventory_records import InventoryRecordsResource # noqa: F401
|
|
33
|
+
from .line_items import LineItemsResource # noqa: F401
|
|
34
|
+
from .locales import LocalesResource # noqa: F401
|
|
35
|
+
from .me import MeResource # noqa: F401
|
|
36
|
+
from .message_senders import MessageSendersResource # noqa: F401
|
|
37
|
+
from .open_id_connects import OpenIdConnectsResource # noqa: F401
|
|
38
|
+
from .order_returns import OrderReturnsResource # noqa: F401
|
|
39
|
+
from .order_syncs import OrderSyncsResource # noqa: F401
|
|
40
|
+
from .orders import OrdersResource # noqa: F401
|
|
41
|
+
from .payments import PaymentsResource # noqa: F401
|
|
42
|
+
from .price_schedules import PriceSchedulesResource # noqa: F401
|
|
43
|
+
from .product_collections import ProductCollectionsResource # noqa: F401
|
|
44
|
+
from .product_facets import ProductFacetsResource # noqa: F401
|
|
45
|
+
from .product_syncs import ProductSyncsResource # noqa: F401
|
|
46
|
+
from .products import ProductsResource # noqa: F401
|
|
47
|
+
from .promotion_integrations import PromotionIntegrationsResource # noqa: F401
|
|
48
|
+
from .promotions import PromotionsResource # noqa: F401
|
|
49
|
+
from .security_profiles import SecurityProfilesResource # noqa: F401
|
|
50
|
+
from .seller_approval_rules import SellerApprovalRulesResource # noqa: F401
|
|
51
|
+
from .shipments import ShipmentsResource # noqa: F401
|
|
52
|
+
from .specs import SpecsResource # noqa: F401
|
|
53
|
+
from .spending_accounts import SpendingAccountsResource # noqa: F401
|
|
54
|
+
from .subscription_integrations import SubscriptionIntegrationsResource # noqa: F401
|
|
55
|
+
from .subscription_items import SubscriptionItemsResource # noqa: F401
|
|
56
|
+
from .subscriptions import SubscriptionsResource # noqa: F401
|
|
57
|
+
from .supplier_addresses import SupplierAddressesResource # noqa: F401
|
|
58
|
+
from .supplier_user_groups import SupplierUserGroupsResource # noqa: F401
|
|
59
|
+
from .supplier_users import SupplierUsersResource # noqa: F401
|
|
60
|
+
from .suppliers import SuppliersResource # noqa: F401
|
|
61
|
+
from .tracking_events import TrackingEventsResource # noqa: F401
|
|
62
|
+
from .user_groups import UserGroupsResource # noqa: F401
|
|
63
|
+
from .users import UsersResource # noqa: F401
|
|
64
|
+
from .webhooks import WebhooksResource # noqa: F401
|
|
65
|
+
from .xp_indices import XpIndicesResource # noqa: F401
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# GENERATED by tools/codegen — DO NOT EDIT
|
|
2
|
+
# Source: ordercloud-openapi-v3.json
|
|
3
|
+
"""OrderCloud Addresses 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.assignments import AddressAssignment
|
|
10
|
+
from ..models.misc import PartyType
|
|
11
|
+
from ..models.shared import ListPage
|
|
12
|
+
from .base import BaseResource
|
|
13
|
+
|
|
14
|
+
__all__ = ["AddressesResource"]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class AddressesResource(BaseResource):
|
|
18
|
+
"""Operations on OrderCloud Addresses."""
|
|
19
|
+
|
|
20
|
+
async def list(
|
|
21
|
+
self,
|
|
22
|
+
buyer_id: str,
|
|
23
|
+
*,
|
|
24
|
+
search: Optional[str] = None,
|
|
25
|
+
search_on: Optional[str] = None,
|
|
26
|
+
sort_by: Optional[str] = None,
|
|
27
|
+
page: Optional[int] = None,
|
|
28
|
+
page_size: Optional[int] = None,
|
|
29
|
+
filters: Optional[dict[str, Any]] = None,
|
|
30
|
+
) -> ListPage[Address]:
|
|
31
|
+
"""List addresses
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
buyer_id: ID of the buyer.
|
|
35
|
+
search: Word or phrase to search for.
|
|
36
|
+
search_on: Comma-delimited list of fields to search on.
|
|
37
|
+
sort_by: Comma-delimited list of fields to sort by.
|
|
38
|
+
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.
|
|
39
|
+
page_size: Number of results to return per page.
|
|
40
|
+
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.???'
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
A paginated list of Address objects.
|
|
44
|
+
"""
|
|
45
|
+
params = self._build_list_params(
|
|
46
|
+
search=search,
|
|
47
|
+
search_on=search_on,
|
|
48
|
+
sort_by=sort_by,
|
|
49
|
+
page=page,
|
|
50
|
+
page_size=page_size,
|
|
51
|
+
filters=filters,
|
|
52
|
+
)
|
|
53
|
+
resp = await self._http.get(f"/buyers/{buyer_id}/addresses", **params)
|
|
54
|
+
return self._parse_list(resp.json(), Address)
|
|
55
|
+
|
|
56
|
+
async def create(
|
|
57
|
+
self,
|
|
58
|
+
buyer_id: str,
|
|
59
|
+
address: Union[Address, dict[str, Any]],
|
|
60
|
+
) -> Address:
|
|
61
|
+
"""Create an address
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
buyer_id: ID of the buyer.
|
|
65
|
+
address: A ``Address`` model or dict. Required fields: Street1, City, Country.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
The Address object.
|
|
69
|
+
"""
|
|
70
|
+
resp = await self._http.post(f"/buyers/{buyer_id}/addresses", json=self._serialize(address))
|
|
71
|
+
return Address(**resp.json())
|
|
72
|
+
|
|
73
|
+
async def get(
|
|
74
|
+
self,
|
|
75
|
+
buyer_id: str,
|
|
76
|
+
address_id: str,
|
|
77
|
+
) -> Address:
|
|
78
|
+
"""Retrieve an address
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
buyer_id: ID of the buyer.
|
|
82
|
+
address_id: ID of the address.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
The Address object.
|
|
86
|
+
"""
|
|
87
|
+
resp = await self._http.get(f"/buyers/{buyer_id}/addresses/{address_id}")
|
|
88
|
+
return Address(**resp.json())
|
|
89
|
+
|
|
90
|
+
async def save(
|
|
91
|
+
self,
|
|
92
|
+
buyer_id: str,
|
|
93
|
+
address_id: str,
|
|
94
|
+
address: Union[Address, dict[str, Any]],
|
|
95
|
+
) -> Address:
|
|
96
|
+
"""Create or update an address
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
buyer_id: ID of the buyer.
|
|
100
|
+
address_id: ID of the address.
|
|
101
|
+
address: A ``Address`` model or dict. Required fields: Street1, City, Country.
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
The Address object.
|
|
105
|
+
"""
|
|
106
|
+
resp = await self._http.put(
|
|
107
|
+
f"/buyers/{buyer_id}/addresses/{address_id}",
|
|
108
|
+
json=self._serialize(address),
|
|
109
|
+
)
|
|
110
|
+
return Address(**resp.json())
|
|
111
|
+
|
|
112
|
+
async def delete(
|
|
113
|
+
self,
|
|
114
|
+
buyer_id: str,
|
|
115
|
+
address_id: str,
|
|
116
|
+
) -> None:
|
|
117
|
+
"""Delete an address
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
buyer_id: ID of the buyer.
|
|
121
|
+
address_id: ID of the address.
|
|
122
|
+
"""
|
|
123
|
+
await self._http.delete(f"/buyers/{buyer_id}/addresses/{address_id}")
|
|
124
|
+
|
|
125
|
+
async def patch(
|
|
126
|
+
self,
|
|
127
|
+
buyer_id: str,
|
|
128
|
+
address_id: str,
|
|
129
|
+
partial: dict[str, Any],
|
|
130
|
+
) -> Address:
|
|
131
|
+
"""Partially update an address
|
|
132
|
+
|
|
133
|
+
Args:
|
|
134
|
+
buyer_id: ID of the buyer.
|
|
135
|
+
address_id: ID of the address.
|
|
136
|
+
partial: A dict of fields to update.
|
|
137
|
+
|
|
138
|
+
Returns:
|
|
139
|
+
The Address object.
|
|
140
|
+
"""
|
|
141
|
+
resp = await self._http.patch(f"/buyers/{buyer_id}/addresses/{address_id}", json=partial)
|
|
142
|
+
return Address(**resp.json())
|
|
143
|
+
|
|
144
|
+
async def delete_assignment(
|
|
145
|
+
self,
|
|
146
|
+
buyer_id: str,
|
|
147
|
+
address_id: str,
|
|
148
|
+
*,
|
|
149
|
+
user_id: Optional[str] = None,
|
|
150
|
+
user_group_id: Optional[str] = None,
|
|
151
|
+
) -> None:
|
|
152
|
+
"""Delete an address assignment
|
|
153
|
+
|
|
154
|
+
Args:
|
|
155
|
+
buyer_id: ID of the buyer.
|
|
156
|
+
address_id: ID of the address.
|
|
157
|
+
user_id: ID of the user.
|
|
158
|
+
user_group_id: ID of the user group.
|
|
159
|
+
"""
|
|
160
|
+
_params: dict[str, Any] = {}
|
|
161
|
+
if user_id is not None:
|
|
162
|
+
_params["userID"] = user_id
|
|
163
|
+
if user_group_id is not None:
|
|
164
|
+
_params["userGroupID"] = user_group_id
|
|
165
|
+
await self._http.delete(f"/buyers/{buyer_id}/addresses/{address_id}/assignments", **_params)
|
|
166
|
+
|
|
167
|
+
async def list_assignments(
|
|
168
|
+
self,
|
|
169
|
+
buyer_id: str,
|
|
170
|
+
*,
|
|
171
|
+
address_id: Optional[str] = None,
|
|
172
|
+
user_id: Optional[str] = None,
|
|
173
|
+
user_group_id: Optional[str] = None,
|
|
174
|
+
level: Optional[PartyType] = None,
|
|
175
|
+
is_shipping: Optional[bool] = None,
|
|
176
|
+
is_billing: Optional[bool] = None,
|
|
177
|
+
page: Optional[int] = None,
|
|
178
|
+
page_size: Optional[int] = None,
|
|
179
|
+
) -> ListPage[AddressAssignment]:
|
|
180
|
+
"""List address assignments
|
|
181
|
+
|
|
182
|
+
Args:
|
|
183
|
+
buyer_id: ID of the buyer.
|
|
184
|
+
address_id: ID of the address.
|
|
185
|
+
user_id: ID of the user.
|
|
186
|
+
user_group_id: ID of the user group.
|
|
187
|
+
level: Level of the address assignment. Possible values: User, Group, Company, BuyerGroup.
|
|
188
|
+
is_shipping: Is shipping of the address assignment.
|
|
189
|
+
is_billing: Is billing of the address assignment.
|
|
190
|
+
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.
|
|
191
|
+
page_size: Number of results to return per page.
|
|
192
|
+
|
|
193
|
+
Returns:
|
|
194
|
+
A paginated list of AddressAssignment objects.
|
|
195
|
+
"""
|
|
196
|
+
params = self._build_list_params(
|
|
197
|
+
page=page,
|
|
198
|
+
page_size=page_size,
|
|
199
|
+
)
|
|
200
|
+
if address_id is not None:
|
|
201
|
+
params["addressID"] = address_id
|
|
202
|
+
if user_id is not None:
|
|
203
|
+
params["userID"] = user_id
|
|
204
|
+
if user_group_id is not None:
|
|
205
|
+
params["userGroupID"] = user_group_id
|
|
206
|
+
if level is not None:
|
|
207
|
+
params["level"] = level
|
|
208
|
+
if is_shipping is not None:
|
|
209
|
+
params["isShipping"] = is_shipping
|
|
210
|
+
if is_billing is not None:
|
|
211
|
+
params["isBilling"] = is_billing
|
|
212
|
+
resp = await self._http.get(f"/buyers/{buyer_id}/addresses/assignments", **params)
|
|
213
|
+
return self._parse_list(resp.json(), AddressAssignment)
|
|
214
|
+
|
|
215
|
+
async def save_assignment(
|
|
216
|
+
self,
|
|
217
|
+
buyer_id: str,
|
|
218
|
+
address_assignment: Union[AddressAssignment, dict[str, Any]],
|
|
219
|
+
) -> None:
|
|
220
|
+
"""Create or update an address assignment
|
|
221
|
+
|
|
222
|
+
Args:
|
|
223
|
+
buyer_id: ID of the buyer.
|
|
224
|
+
address_assignment: A ``AddressAssignment`` model or dict. Required fields: AddressID.
|
|
225
|
+
"""
|
|
226
|
+
await self._http.post(
|
|
227
|
+
f"/buyers/{buyer_id}/addresses/assignments", json=self._serialize(address_assignment)
|
|
228
|
+
)
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# GENERATED by tools/codegen — DO NOT EDIT
|
|
2
|
+
# Source: ordercloud-openapi-v3.json
|
|
3
|
+
"""OrderCloud AdminAddresses 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.shared import ListPage
|
|
10
|
+
from .base import BaseResource
|
|
11
|
+
|
|
12
|
+
__all__ = ["AdminAddressesResource"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class AdminAddressesResource(BaseResource):
|
|
16
|
+
"""Operations on OrderCloud AdminAddresses."""
|
|
17
|
+
|
|
18
|
+
async def list(
|
|
19
|
+
self,
|
|
20
|
+
*,
|
|
21
|
+
search: Optional[str] = None,
|
|
22
|
+
search_on: Optional[str] = None,
|
|
23
|
+
sort_by: Optional[str] = None,
|
|
24
|
+
page: Optional[int] = None,
|
|
25
|
+
page_size: Optional[int] = None,
|
|
26
|
+
filters: Optional[dict[str, Any]] = None,
|
|
27
|
+
) -> ListPage[Address]:
|
|
28
|
+
"""List admin addresses
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
search: Word or phrase to search for.
|
|
32
|
+
search_on: Comma-delimited list of fields to search on.
|
|
33
|
+
sort_by: Comma-delimited list of fields to sort by.
|
|
34
|
+
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.
|
|
35
|
+
page_size: Number of results to return per page.
|
|
36
|
+
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.???'
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
A paginated list of Address objects.
|
|
40
|
+
"""
|
|
41
|
+
params = self._build_list_params(
|
|
42
|
+
search=search,
|
|
43
|
+
search_on=search_on,
|
|
44
|
+
sort_by=sort_by,
|
|
45
|
+
page=page,
|
|
46
|
+
page_size=page_size,
|
|
47
|
+
filters=filters,
|
|
48
|
+
)
|
|
49
|
+
resp = await self._http.get("/addresses", **params)
|
|
50
|
+
return self._parse_list(resp.json(), Address)
|
|
51
|
+
|
|
52
|
+
async def create(
|
|
53
|
+
self,
|
|
54
|
+
address: Union[Address, dict[str, Any]],
|
|
55
|
+
) -> Address:
|
|
56
|
+
"""Create an admin address
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
address: A ``Address`` model or dict. Required fields: Street1, City, Country.
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
The Address object.
|
|
63
|
+
"""
|
|
64
|
+
resp = await self._http.post("/addresses", json=self._serialize(address))
|
|
65
|
+
return Address(**resp.json())
|
|
66
|
+
|
|
67
|
+
async def get(
|
|
68
|
+
self,
|
|
69
|
+
address_id: str,
|
|
70
|
+
) -> Address:
|
|
71
|
+
"""Retrieve an admin address
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
address_id: ID of the address.
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
The Address object.
|
|
78
|
+
"""
|
|
79
|
+
resp = await self._http.get(f"/addresses/{address_id}")
|
|
80
|
+
return Address(**resp.json())
|
|
81
|
+
|
|
82
|
+
async def save(
|
|
83
|
+
self,
|
|
84
|
+
address_id: str,
|
|
85
|
+
address: Union[Address, dict[str, Any]],
|
|
86
|
+
) -> Address:
|
|
87
|
+
"""Create or update an admin address
|
|
88
|
+
|
|
89
|
+
Args:
|
|
90
|
+
address_id: ID of the address.
|
|
91
|
+
address: A ``Address`` model or dict. Required fields: Street1, City, Country.
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
The Address object.
|
|
95
|
+
"""
|
|
96
|
+
resp = await self._http.put(
|
|
97
|
+
f"/addresses/{address_id}",
|
|
98
|
+
json=self._serialize(address),
|
|
99
|
+
)
|
|
100
|
+
return Address(**resp.json())
|
|
101
|
+
|
|
102
|
+
async def delete(
|
|
103
|
+
self,
|
|
104
|
+
address_id: str,
|
|
105
|
+
) -> None:
|
|
106
|
+
"""Delete an admin address
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
address_id: ID of the address.
|
|
110
|
+
"""
|
|
111
|
+
await self._http.delete(f"/addresses/{address_id}")
|
|
112
|
+
|
|
113
|
+
async def patch(
|
|
114
|
+
self,
|
|
115
|
+
address_id: str,
|
|
116
|
+
partial: dict[str, Any],
|
|
117
|
+
) -> Address:
|
|
118
|
+
"""Partially update an admin address
|
|
119
|
+
|
|
120
|
+
Args:
|
|
121
|
+
address_id: ID of the address.
|
|
122
|
+
partial: A dict of fields to update.
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
The Address object.
|
|
126
|
+
"""
|
|
127
|
+
resp = await self._http.patch(f"/addresses/{address_id}", json=partial)
|
|
128
|
+
return Address(**resp.json())
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# GENERATED by tools/codegen — DO NOT EDIT
|
|
2
|
+
# Source: ordercloud-openapi-v3.json
|
|
3
|
+
"""OrderCloud AdminUserGroups API resource."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
from typing import Any, Optional, Union
|
|
7
|
+
|
|
8
|
+
from ..models.assignments import UserGroupAssignment
|
|
9
|
+
from ..models.user_group import UserGroup
|
|
10
|
+
from ..models.shared import ListPage
|
|
11
|
+
from .base import BaseResource
|
|
12
|
+
|
|
13
|
+
__all__ = ["AdminUserGroupsResource"]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class AdminUserGroupsResource(BaseResource):
|
|
17
|
+
"""Operations on OrderCloud AdminUserGroups."""
|
|
18
|
+
|
|
19
|
+
async def list(
|
|
20
|
+
self,
|
|
21
|
+
*,
|
|
22
|
+
search: Optional[str] = None,
|
|
23
|
+
search_on: Optional[str] = None,
|
|
24
|
+
sort_by: Optional[str] = None,
|
|
25
|
+
page: Optional[int] = None,
|
|
26
|
+
page_size: Optional[int] = None,
|
|
27
|
+
filters: Optional[dict[str, Any]] = None,
|
|
28
|
+
) -> ListPage[UserGroup]:
|
|
29
|
+
"""List admin user groups
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
search: Word or phrase to search for.
|
|
33
|
+
search_on: Comma-delimited list of fields to search on.
|
|
34
|
+
sort_by: Comma-delimited list of fields to sort by.
|
|
35
|
+
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.
|
|
36
|
+
page_size: Number of results to return per page.
|
|
37
|
+
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.???'
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
A paginated list of UserGroup objects.
|
|
41
|
+
"""
|
|
42
|
+
params = self._build_list_params(
|
|
43
|
+
search=search,
|
|
44
|
+
search_on=search_on,
|
|
45
|
+
sort_by=sort_by,
|
|
46
|
+
page=page,
|
|
47
|
+
page_size=page_size,
|
|
48
|
+
filters=filters,
|
|
49
|
+
)
|
|
50
|
+
resp = await self._http.get("/usergroups", **params)
|
|
51
|
+
return self._parse_list(resp.json(), UserGroup)
|
|
52
|
+
|
|
53
|
+
async def create(
|
|
54
|
+
self,
|
|
55
|
+
user_group: Union[UserGroup, dict[str, Any]],
|
|
56
|
+
) -> UserGroup:
|
|
57
|
+
"""Create an admin user group
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
user_group: A ``UserGroup`` model or dict. Required fields: Name.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
The UserGroup object.
|
|
64
|
+
"""
|
|
65
|
+
resp = await self._http.post("/usergroups", json=self._serialize(user_group))
|
|
66
|
+
return UserGroup(**resp.json())
|
|
67
|
+
|
|
68
|
+
async def get(
|
|
69
|
+
self,
|
|
70
|
+
user_group_id: str,
|
|
71
|
+
) -> UserGroup:
|
|
72
|
+
"""Retrieve an admin user group
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
user_group_id: ID of the user group.
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
The UserGroup object.
|
|
79
|
+
"""
|
|
80
|
+
resp = await self._http.get(f"/usergroups/{user_group_id}")
|
|
81
|
+
return UserGroup(**resp.json())
|
|
82
|
+
|
|
83
|
+
async def save(
|
|
84
|
+
self,
|
|
85
|
+
user_group_id: str,
|
|
86
|
+
user_group: Union[UserGroup, dict[str, Any]],
|
|
87
|
+
) -> UserGroup:
|
|
88
|
+
"""Create or update an admin user group
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
user_group_id: ID of the user group.
|
|
92
|
+
user_group: A ``UserGroup`` model or dict. Required fields: Name.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
The UserGroup object.
|
|
96
|
+
"""
|
|
97
|
+
resp = await self._http.put(
|
|
98
|
+
f"/usergroups/{user_group_id}",
|
|
99
|
+
json=self._serialize(user_group),
|
|
100
|
+
)
|
|
101
|
+
return UserGroup(**resp.json())
|
|
102
|
+
|
|
103
|
+
async def delete(
|
|
104
|
+
self,
|
|
105
|
+
user_group_id: str,
|
|
106
|
+
) -> None:
|
|
107
|
+
"""Delete an admin user group
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
user_group_id: ID of the user group.
|
|
111
|
+
"""
|
|
112
|
+
await self._http.delete(f"/usergroups/{user_group_id}")
|
|
113
|
+
|
|
114
|
+
async def patch(
|
|
115
|
+
self,
|
|
116
|
+
user_group_id: str,
|
|
117
|
+
partial: dict[str, Any],
|
|
118
|
+
) -> UserGroup:
|
|
119
|
+
"""Partially update an admin user group
|
|
120
|
+
|
|
121
|
+
Args:
|
|
122
|
+
user_group_id: ID of the user group.
|
|
123
|
+
partial: A dict of fields to update.
|
|
124
|
+
|
|
125
|
+
Returns:
|
|
126
|
+
The UserGroup object.
|
|
127
|
+
"""
|
|
128
|
+
resp = await self._http.patch(f"/usergroups/{user_group_id}", json=partial)
|
|
129
|
+
return UserGroup(**resp.json())
|
|
130
|
+
|
|
131
|
+
async def delete_user_assignment(
|
|
132
|
+
self,
|
|
133
|
+
user_group_id: str,
|
|
134
|
+
user_id: str,
|
|
135
|
+
) -> None:
|
|
136
|
+
"""Delete an admin user group user assignment
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
user_group_id: ID of the user group.
|
|
140
|
+
user_id: ID of the user.
|
|
141
|
+
"""
|
|
142
|
+
await self._http.delete(f"/usergroups/{user_group_id}/assignments/{user_id}")
|
|
143
|
+
|
|
144
|
+
async def list_user_assignments(
|
|
145
|
+
self,
|
|
146
|
+
*,
|
|
147
|
+
user_group_id: Optional[str] = None,
|
|
148
|
+
user_id: Optional[str] = None,
|
|
149
|
+
page: Optional[int] = None,
|
|
150
|
+
page_size: Optional[int] = None,
|
|
151
|
+
) -> ListPage[UserGroupAssignment]:
|
|
152
|
+
"""List admin user group user assignments
|
|
153
|
+
|
|
154
|
+
Args:
|
|
155
|
+
user_group_id: ID of the user group.
|
|
156
|
+
user_id: ID of the user.
|
|
157
|
+
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.
|
|
158
|
+
page_size: Number of results to return per page.
|
|
159
|
+
|
|
160
|
+
Returns:
|
|
161
|
+
A paginated list of UserGroupAssignment objects.
|
|
162
|
+
"""
|
|
163
|
+
params = self._build_list_params(
|
|
164
|
+
page=page,
|
|
165
|
+
page_size=page_size,
|
|
166
|
+
)
|
|
167
|
+
if user_group_id is not None:
|
|
168
|
+
params["userGroupID"] = user_group_id
|
|
169
|
+
if user_id is not None:
|
|
170
|
+
params["userID"] = user_id
|
|
171
|
+
resp = await self._http.get("/usergroups/assignments", **params)
|
|
172
|
+
return self._parse_list(resp.json(), UserGroupAssignment)
|
|
173
|
+
|
|
174
|
+
async def save_user_assignment(
|
|
175
|
+
self,
|
|
176
|
+
user_group_assignment: Union[UserGroupAssignment, dict[str, Any]],
|
|
177
|
+
) -> None:
|
|
178
|
+
"""Create or update an admin user group user assignment
|
|
179
|
+
|
|
180
|
+
Args:
|
|
181
|
+
user_group_assignment: A ``UserGroupAssignment`` model or dict. Required fields: UserGroupID, UserID.
|
|
182
|
+
"""
|
|
183
|
+
await self._http.post(
|
|
184
|
+
"/usergroups/assignments", json=self._serialize(user_group_assignment)
|
|
185
|
+
)
|