-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathorders_sku.py
More file actions
86 lines (73 loc) · 3.32 KB
/
Copy pathorders_sku.py
File metadata and controls
86 lines (73 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
from client_factory import create_client
from didww.resources.order import Order
from didww.resources.order_item.did_order_item import DidOrderItem
from didww.resources.order_item.available_did_order_item import AvailableDidOrderItem
from didww.resources.order_item.reservation_did_order_item import ReservationDidOrderItem
from didww.resources.did_reservation import DidReservation
from didww.resources.available_did import AvailableDid
from didww.query_params import QueryParams
client = create_client()
# --- Find available DIDs with their DID group and SKUs ---
params = QueryParams().include("did_group.stock_keeping_units")
available_dids = client.available_dids().list(params).data
if len(available_dids) < 2:
print("Need at least 2 available DIDs for this example")
exit(1)
ad1 = available_dids[0]
ad2 = available_dids[1]
sku_id_1 = ad1.did_group.stock_keeping_units[0].id
sku_id_2 = ad2.did_group.stock_keeping_units[0].id
print(f"Available DID 1: {ad1.id} ({ad1.number}) sku={sku_id_1} - for AvailableDidOrderItem")
print(f"Available DID 2: {ad2.id} ({ad2.number}) sku={sku_id_2} - for reservation")
# --- Get a separate SKU for the DidOrderItem (by quantity) ---
# Use a DID group to avoid conflicts with ad1's available DID pool
dg_params = QueryParams().include("stock_keeping_units")
did_groups = client.did_groups().list(dg_params).data
sku_for_qty = None
for group in did_groups:
skus = group.stock_keeping_units
if skus:
sku_for_qty = skus[0].id
print(f"SKU for qty order: {sku_for_qty} (group={group.id})")
break
if not sku_for_qty:
print("No DID group with stock keeping units found")
exit(1)
# --- Reserve the second available DID ---
reservation = DidReservation()
reservation.description = "Reserved for order example"
reservation.available_did = AvailableDid.build(ad2.id)
reservation = client.did_reservations().create(reservation).data
print(f"Reservation: {reservation.id}")
# --- Build order with all three item types ---
# 1. DidOrderItem - order by SKU and quantity (random DID)
item_by_sku = DidOrderItem()
item_by_sku.sku_id = sku_for_qty
item_by_sku.qty = 1
# 2. AvailableDidOrderItem - order a specific available DID
item_by_available = AvailableDidOrderItem()
item_by_available.sku_id = sku_id_1
item_by_available.available_did_id = ad1.id
# 3. ReservationDidOrderItem - order a previously reserved DID
item_by_reservation = ReservationDidOrderItem()
item_by_reservation.sku_id = sku_id_2
item_by_reservation.did_reservation_id = reservation.id
order = Order()
order.items = [item_by_sku, item_by_available, item_by_reservation]
order.external_reference_id = "python-sdk-example-order"
created = client.orders().create(order).data
print(f"\nOrder ID: {created.id}")
print(f"Amount: {created.amount}")
print(f"Status: {created.status.value}")
print(f"Created at: {created.created_at}")
print(f"Reference: {created.reference}")
print(f"External Reference ID: {created.external_reference_id}")
print(f"Items count: {len(created.items)}")
for i, item in enumerate(created.items):
print(f" Item {i+1}: type={item._type}")
# --- Fetch DIDs that belong to this order ---
did_params = QueryParams().filter("order.id", created.id)
dids = client.dids().list(did_params).data
print(f"\nDIDs in order ({len(dids)}):")
for did in dids:
print(f" {did.id} | {did.number} | capacity_limit={did.capacity_limit}")