def parse_tracking_response( response: dict, settings: Settings) -> Tuple[List[TrackingDetails], List[Message]]: errors = parse_error_response(response, settings) details: List[TrackingDetails] = [] return details, errors
def parse_shipment_response( response: dict, settings: Settings) -> Tuple[ShipmentDetails, List[Message]]: errors = parse_error_response(response, settings) details = (_extract_details(response, settings) if all( key in response for key in ['label', 'shipment']) else None) return details, errors
def parse_tracking_response( response: dict, settings: Settings) -> Tuple[List[TrackingDetails], List[Message]]: errors = [e for e in response if 'activities' not in e] details = [ _extract_detail(DP.to_object(Tracking, d), settings) for d in response if 'activities' in d ] return details, parse_error_response(errors, settings)
def parse_pickup_response( response: dict, settings: Settings) -> Tuple[PickupDetails, List[Message]]: errors = parse_error_response(response, settings) pickup = next((DP.to_object(Pickup, pickup) for pickup in response.get('pickups', [])), None) details = (_extract_details(pickup, settings) if pickup is not None else None) return details, errors
def _create_pickup(deletion_response: str, payload: PickupUpdateRequest) -> Job: errors = parse_error_response(deletion_response) create_job: Job = (_create_pickup_job(cast(PickupRequest, payload)) if not any(errors) else None) data = (create_job.data if create_job is not None else None) return Job(id="create_pickup", data=data, fallback=("{}" if data is None else None))
def parse_pickup_cancel_response( response: dict, settings: Settings) -> Tuple[ConfirmationDetails, List[Message]]: errors = parse_error_response(response, settings) details = (ConfirmationDetails(carrier_id=settings.carrier_id, carrier_name=settings.carrier_name, success=True, operation="Pickup Cancel") if not any(errors) else None) return details, errors
def parse_rate_response( response: dict, settings: Settings) -> Tuple[List[RateDetails], List[Message]]: errors = parse_error_response(response, settings) rate_response = (RateResponse( **response) if 'rates' in response else RateResponse()) details = [ _extract_details(rate, rate_response, settings) for rate in (rate_response.rates or []) ] return details, errors
def _retrieve_pickup(creation_response: str, payload: PickupRequest, settings: Settings) -> Job: errors = parse_error_response(DP.to_dict(creation_response), settings) data = (Serializable( dict( category=payload.options.get("category", "Parcel"), pickupDate=payload.pickup_date, streetNumber=SF.concat_str(payload.address.address_line1, payload.address.address_line2, join=True), postalCode=payload.address.postal_code, offset=10, ), urllib.parse.urlencode) if not any(errors) else None) return Job(id="retrieve_pickup", data=data, fallback=('{}' if data is None else None))