|
1 | 1 | from typing import List, Tuple |
2 | 2 | from dhl_universal_lib.tracking import ( |
3 | 3 | TrackingRequest as DHLTrackingRequest, |
4 | | - Shipment, |
5 | 4 | ) |
6 | 5 | from purplship.core.utils import ( |
7 | 6 | Serializable, |
|
21 | 20 | def parse_tracking_response(response: List[dict], settings: Settings) -> Tuple[List[TrackingDetails], List[Message]]: |
22 | 21 | errors = [e for e in response if 'shipments' not in e] |
23 | 22 | details = [ |
24 | | - _extract_detail(Shipment(**d['shipments'][0]), settings) |
| 23 | + _extract_detail(d['shipments'][0], settings) |
25 | 24 | for d in response if 'shipments' in d |
26 | 25 | ] |
27 | 26 |
|
28 | 27 | return details, parse_error_response(errors, settings) |
29 | 28 |
|
30 | 29 |
|
31 | | -def _extract_detail(detail: Shipment, settings: Settings) -> TrackingDetails: |
| 30 | +def _extract_detail(detail: dict, settings: Settings) -> TrackingDetails: |
32 | 31 | return TrackingDetails( |
33 | 32 | carrier_name=settings.carrier_name, |
34 | 33 | carrier_id=settings.carrier_id, |
35 | 34 |
|
36 | | - tracking_number=str(detail.id), |
| 35 | + tracking_number=str(detail.get('id')), |
37 | 36 | events=[ |
38 | 37 | TrackingEvent( |
39 | | - date=DF.fdate(event.timestamp, '%Y-%m-%dT%H:%M:%S'), |
40 | | - description=event.description, |
| 38 | + date=DF.fdate(event.get('timestamp'), '%Y-%m-%dT%H:%M:%S'), |
| 39 | + description=event.get('description'), |
41 | 40 | location=( |
42 | | - event.location.address.addressLocality |
43 | | - if event.location is not None and event.location.address is not None |
| 41 | + event['location']['address'].get('addressLocality') |
| 42 | + if event.get('location') is not None and event.get('location').get('address') is not None |
44 | 43 | else None |
45 | 44 | ), |
46 | | - code=event.statusCode, |
47 | | - time=DF.ftime(event.timestamp, '%Y-%m-%dT%H:%M:%S'), |
48 | | - ) for event in detail.events |
| 45 | + code=event.get('statusCode'), |
| 46 | + time=DF.ftime(event.get('timestamp'), '%Y-%m-%dT%H:%M:%S'), |
| 47 | + ) for event in detail.get('events') or [] |
49 | 48 | ], |
50 | 49 | delivered=( |
51 | | - detail.status.status.lower() == "delivered" |
52 | | - if all([detail.status, detail.status.status]) else |
| 50 | + detail['status']['status'].lower() == "delivered" |
| 51 | + if all([detail['status'], detail['status']['status']]) else |
53 | 52 | False |
54 | 53 | ) |
55 | 54 | ) |
|
0 commit comments