def get_tracking(self, TrackRequests_: TrackRequest) -> etree.ElementBase: """ get_tracking make parrallel request for each TrackRequest """ results = exec_parrallel(self._get_tracking, TrackRequests_) return to_xml(bundle_xml(xml_strings=results))
def get_trackings(self, tracking_pins: List[str]) -> etree.ElementBase: """ get_trackings make parrallel request for each pin """ results = exec_parrallel(self._get_tracking, tracking_pins) return to_xml(bundle_xml(xml_strings=results))
def create_shipment( self, shipment: Union[NonContractShipmentType, ShipmentType] ) -> etree.ElementBase: is_non_contract = isinstance(shipment, NonContractShipmentType) if is_non_contract: req_type = "application/vnd.cpc.ncshipment-v4+xml" namespace = 'xmlns="http://www.canadapost.ca/ws/ncshipment-v4"' name = "non-contract-shipment" url_ = ( f"{self.client.server_url}/rs/{self.client.customer_number}/ncshipment" ) else: req_type = "application/vnd.cpc.shipment-v8+xml" namespace = 'xmlns="http://www.canadapost.ca/ws/shipment-v8"' name = "shipment" url_ = f"{self.client.server_url}/rs/{self.client.customer_number}/{shipment.customer_request_id}/shipment" xmlStr = export(shipment, name_=name, namespacedef_=namespace) result = http( url=url_, data=bytearray(xmlStr, "utf-8"), headers={ "Content-Type": req_type, "Accept": req_type, "Authorization": "Basic %s" % self.authorization, "Accept-language": "en-CA", }, method="POST", ) response = to_xml(result) links = response.xpath(".//*[local-name() = $name]", name="link") if len(links) > 0: results = exec_parrallel( self._get_info, [ link for link in links if link.get("rel") in ["price", "receipt"] ], ) return to_xml(bundle_xml(xml_strings=[result] + results)) return response
def get_tracking(self, tracking_ids: List[str]) -> dict: def track(tracking_id): return { "ref": tracking_id, "response": to_dict( http( url=f"{self.client.server_url}/tracking/{tracking_id}", headers={ "Content-Type": "application/json", "Authorization": f"Basic {self.authorization}", }, method="GET", ) ) } responses = exec_parrallel(track, tracking_ids) return responses