Skip to content

Commit 89a7d20

Browse files
committed
sync shipments first cut
1 parent 4e74cfd commit 89a7d20

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

sync_shipments.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import logging
2+
from dataclasses import dataclass
3+
from datetime import date
4+
from typing import List
5+
import requests
6+
import requests.exceptions
7+
8+
API_URL = 'https://example.org'
9+
10+
@dataclass
11+
class OrderLine:
12+
sku: str
13+
qty: int
14+
15+
16+
@dataclass
17+
class Shipment:
18+
reference: str
19+
lines: List[OrderLine]
20+
eta: date
21+
22+
23+
def update_shipment(shipment):
24+
external_shipment_id = get_shipment_id(shipment.reference)
25+
requests.put(f'{API_URL}/shipment/{external_shipment_id}', json={
26+
'client_reference': shipment.reference,
27+
'arrival_date': shipment.eta,
28+
'contents': [
29+
{'sku': ol.sku, 'quantity': ol.quantity}
30+
for ol in shipment.lines
31+
]
32+
})
33+
34+
35+
def get_shipment_id(our_reference):
36+
try:
37+
their_shipments = requests.get(f"{API_URL}/shipment/").json()['items']
38+
return next(s for s in their_shipments if s['client_reference'] == our_reference)
39+
except StopIteration:
40+
logging.error('No shipment found with reference %s', our_reference)
41+
42+
except requests.exceptions.RequestException:
43+
logging.exception('Error retrieving shipment')

0 commit comments

Comments
 (0)