コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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)
コード例 #4
0
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
コード例 #5
0
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))
コード例 #6
0
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
コード例 #7
0
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
コード例 #8
0
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))