File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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' )
You can’t perform that action at this time.
0 commit comments