예제 #1
0
    def get_tracking(self, request: Serializable) -> Deserializable[str]:
        data = self.settings.parse(request.serialize(), "EXP_RECE_SEARCH_ROUTES")
        response = http(
            url=self.settings.server_url,
            data=bytearray(data, "utf-8"),
            method="POST",
        )

        return Deserializable(response, DP.to_dict)
예제 #2
0
    def create_shipment(self, request: Serializable) -> Deserializable:
        api = "eVSCertify" if self.settings.test else "eVS"
        serialized_request = request.serialize().replace(
            "eVSRequest", f"{api}Request")
        query = urllib.parse.urlencode({"API": api, "XML": serialized_request})
        response = http(url=f"{self.settings.server_url}?{query}",
                        method="GET")

        return Deserializable(response, XP.to_xml)
예제 #3
0
    def cancel_shipment(self, request: Serializable) -> Deserializable:
        query = urllib.parse.urlencode({
            "API": "eVSCancel",
            "XML": request.serialize()
        })
        response = http(url=f"{self.settings.server_url}?{query}",
                        method="GET")

        return Deserializable(response, XP.to_xml)
예제 #4
0
    def cancel_shipment(self, request: Serializable) -> Deserializable:
        tag = request.value.__class__.__name__.replace("Request", "")
        api = f"{tag}Certify" if self.settings.test else tag
        serialized_request = request.serialize().replace(tag, api)
        query = urllib.parse.urlencode({"API": api, "XML": serialized_request})
        response = http(url=f"{self.settings.server_url}?{query}",
                        method="GET")

        return Deserializable(response, XP.to_xml)
예제 #5
0
    def get_rates(self, request: Serializable) -> Deserializable:
        query = urllib.parse.urlencode({
            "API": "RateV4",
            "XML": request.serialize()
        })
        response = http(url=f"{self.settings.server_url}?{query}",
                        method="GET")

        return Deserializable(response, XP.to_xml)
예제 #6
0
 def _send_request(self, request: Serializable, path: str) -> str:
     return http(
         url=f"{self.settings.server_url}{path}",
         data=bytearray(request.serialize(), "utf-8"),
         headers={
             "Content-Type": "application/xml",
             "Authorization": f"Basic {self.settings.authorization}"
         },
         method="POST",
     )
예제 #7
0
 def _send_request(self, request: Serializable, path: str) -> str:
     return http(
         url=f"{self.settings.server_url}{path}",
         data=bytearray(
             urllib.parse.urlencode(dict(xml_in=request.serialize())),
             "utf-8"),
         headers={
             "Content-Type": "application/x-www-form-urlencoded",
             "Authorization": f"Basic {self.settings.authorization}"
         },
         method="POST",
     )
예제 #8
0
    def get_tracking(self, request: Serializable) -> Deserializable[str]:
        query = urllib.parse.urlencode(request.serialize())
        response = http(
            url=f"http://trackapi.yanwentech.com/api/tracking?{query}",
            headers={
                "Content-Type": "application/json",
                "Accept": "application/json",
                "Authorization": self.settings.customer_number
            },
            method="GET",
        )

        return Deserializable(response, DP.to_dict)
예제 #9
0
    def get_tracking(self, request: Serializable) -> Deserializable[str]:
        query = urllib.parse.urlencode(request.serialize())
        response = http(
            url=f"{self.settings.server_url}/shipping/v1/track?{query}",
            headers={
                "Content-Type": "application/json",
                "Accept": "application/json",
                "Account-Number": self.settings.account_number,
                "Authorization": f"Basic {self.settings.authorization}"
            },
            method="GET",
        )

        return Deserializable(response, DP.to_dict)
예제 #10
0
    def get_tracking(self, request: Serializable) -> Deserializable:

        def _get_tracking(tracking_number: str):
            return http(
                url=f"{self.settings.server_url}/v1/tracking/{tracking_number}",
                headers={
                    "Accept": "application/json",
                    "Authorization": f"Basic {self.settings.authorization}"
                },
                method="GET",
            )

        responses: List[dict] = exec_async(_get_tracking, request.serialize())
        return Deserializable(responses, lambda res: [DP.to_dict(r) for r in res if any(r.strip())])
예제 #11
0
    def get_tracking(self, request: Serializable) -> Deserializable[str]:
        def _get_tracking(tracking_request: dict):
            query = urllib.parse.urlencode(tracking_request)
            return http(
                url=f"{self.settings.server_url}/track/shipments?{query}",
                headers={
                    "Accept": "application/json",
                    "DHL-API-Key": self.settings.consumer_key
                },
                method="GET",
            )

        responses: List[dict] = exec_async(_get_tracking, request.serialize())
        return Deserializable(responses,
                              lambda res: [DP.to_dict(r) for r in res])
예제 #12
0
    def create_shipment(self, request: Serializable) -> Deserializable[str]:
        def process(job: Job):
            if job.data is None:
                return job.fallback

            return self._send_request(
                request=job.data,
                path=dict(
                    create="/expressconnect/shipping/ship",
                    get_label="/expresslabel/documentation/getlabel")[job.id],
            )

        pipeline: Pipeline = request.serialize()
        response = pipeline.apply(process)

        return Deserializable(XP.bundle_xml(response), XP.to_xml)
예제 #13
0
    def get_tracking(self, request: Serializable) -> Deserializable:
        def _get_tracking(mail_piece_id: str):
            return http(
                url=
                f"{self.settings.server_url}/mailpieces/v2/{mail_piece_id}/events",
                headers={
                    "Accept": "application/json",
                    "X-IBM-Client-Id": self.settings.client_id,
                    "X-IBM-Client-Secret": self.settings.client_secret,
                    "X-Accept-RMG-Terms": "yes"
                },
                method="GET",
            )

        responses: List[dict] = exec_async(_get_tracking, request.serialize())
        return Deserializable(
            responses,
            lambda res: [DP.to_dict(r) for r in res if any(r.strip())])
예제 #14
0
    def get_tracking(self, request: Serializable) -> Deserializable[List[Tuple[str, str]]]:

        def _get_tracking(ref: str):
            response = http(
                url=f"{self.settings.server_url}/api/tracking/{ref}",
                headers={
                    "Accept": "application/json",
                    "Authorization": f"Basic {self.settings.authorization}"
                },
                method="GET",
            )
            return ref, response

        responses: List[Tuple[str, str]] = exec_async(_get_tracking, request.serialize())
        return Deserializable(
            responses,
            lambda res: [(num, DP.to_dict(track)) for num, track in res if any(track.strip())]
        )