From e7ed0c762ba4e1d902658a28c56655ccd211f5fb Mon Sep 17 00:00:00 2001 From: Watson Zuo Date: Fri, 10 Jul 2026 13:53:27 +0800 Subject: [PATCH 1/2] support 2026-07 version Generated with AfterShip/sdk-generator from OAS production/2026-07. Co-Authored-By: Claude Fable 5 --- README.md | 25 +++++- pyproject.toml | 2 +- tracking/__init__.py | 2 +- tracking/api/courier.py | 26 ++++-- tracking/api/courier_connection.py | 65 +++++++++----- tracking/api/estimated_delivery_date.py | 30 ++++--- tracking/api/tracking.py | 88 ++++++++++++------- tracking/auth.py | 29 +++--- tracking/client.py | 2 + tracking/configuration.py | 85 ++++++++---------- tracking/exceptions.py | 3 +- tracking/models/__init__.py | 83 ++++++++--------- tracking/models/additional_fields.py | 1 - tracking/models/checkpoint.py | 4 +- tracking/models/checkpoint_coordinate.py | 6 +- tracking/models/checkpoint_events.py | 5 +- tracking/models/checkpoint_events_reason.py | 6 +- tracking/models/checkpoint_source.py | 1 - tracking/models/courier.py | 3 +- tracking/models/courier_connection.py | 6 +- ...on_response_for_get_courier_connections.py | 9 +- ...sponse_for_get_courier_connections_data.py | 7 +- ...get_courier_connections_data_pagination.py | 6 +- tracking/models/courier_credentials.py | 3 +- tracking/models/courier_response.py | 5 +- tracking/models/courier_response_data.py | 3 +- tracking/models/create_tracking_request.py | 9 +- .../create_tracking_request_customers.py | 7 +- .../create_tracking_request_delivery_type.py | 1 - .../create_tracking_request_last_mile.py | 6 +- ...ng_request_order_promised_delivery_date.py | 6 +- ...ate_tracking_request_shipment_direction.py | 17 ++++ tracking/models/create_tracking_response.py | 8 +- tracking/models/credential_field.py | 6 +- ...lete_courier_connections_by_id_response.py | 6 +- .../models/delete_tracking_by_id_response.py | 8 +- tracking/models/detect_courier_request.py | 4 +- tracking/models/detect_courier_response.py | 10 +-- .../models/detect_courier_response_data.py | 3 +- .../models/estimated_delivery_date_request.py | 21 ++--- ...livery_date_request_destination_address.py | 6 +- ..._delivery_date_request_estimated_pickup.py | 11 +-- ..._estimated_pickup_order_processing_time.py | 6 +- ...ed_delivery_date_request_origin_address.py | 6 +- .../estimated_delivery_date_request_weight.py | 6 +- .../estimated_delivery_date_response.py | 21 ++--- ...ivery_date_response_destination_address.py | 6 +- ...delivery_date_response_estimated_pickup.py | 11 +-- ..._estimated_pickup_order_processing_time.py | 6 +- ...d_delivery_date_response_origin_address.py | 6 +- ...estimated_delivery_date_response_weight.py | 6 +- .../get_courier_connections_by_id_response.py | 6 +- .../get_courier_connections_response.py | 10 +-- .../get_courier_connections_response_data.py | 7 +- ...er_connections_response_data_pagination.py | 6 +- tracking/models/get_couriers_response.py | 10 +-- tracking/models/get_couriers_response_data.py | 3 +- .../models/get_tracking_by_id_response.py | 8 +- tracking/models/get_trackings_response.py | 10 +-- .../models/get_trackings_response_data.py | 7 +- .../get_trackings_response_data_pagination.py | 6 +- .../mark_tracking_completed_by_id_request.py | 9 +- ...tracking_completed_by_id_request_reason.py | 1 - .../mark_tracking_completed_by_id_response.py | 8 +- tracking/models/meta.py | 5 +- tracking/models/meta_type.py | 1 - .../post_courier_connections_request.py | 6 +- .../post_courier_connections_response.py | 6 +- tracking/models/predict_batch_request.py | 3 +- tracking/models/predict_batch_response.py | 10 +-- .../models/predict_batch_response_data.py | 3 +- tracking/models/predict_response.py | 10 +-- .../put_courier_connections_by_id_request.py | 6 +- .../put_courier_connections_by_id_response.py | 6 +- .../models/retrack_tracking_by_id_response.py | 8 +- tracking/models/tag.py | 1 - tracking/models/tracking.py | 29 +++--- ...cking_aftership_estimated_delivery_date.py | 6 +- tracking/models/tracking_carbon_emissions.py | 6 +- ...racking_courier_estimated_delivery_date.py | 6 +- ...tracking_custom_estimated_delivery_date.py | 9 +- ...ing_custom_estimated_delivery_date_type.py | 1 - tracking/models/tracking_customers.py | 7 +- .../tracking_first_estimated_delivery.py | 13 +-- ...racking_first_estimated_delivery_source.py | 1 - .../tracking_first_estimated_delivery_type.py | 1 - tracking/models/tracking_first_mile.py | 8 +- tracking/models/tracking_forward_shipment.py | 36 ++++++++ tracking/models/tracking_last_mile.py | 5 +- tracking/models/tracking_last_mile_source.py | 1 - .../tracking_latest_estimated_delivery.py | 13 +-- ...acking_latest_estimated_delivery_source.py | 1 - ...tracking_latest_estimated_delivery_type.py | 1 - tracking/models/tracking_multi_piece_info.py | 39 ++++++++ .../tracking_multi_piece_info_pieces.py | 40 +++++++++ .../tracking_multi_piece_info_pieces_type.py | 17 ++++ .../models/tracking_multi_piece_info_type.py | 17 ++++ .../tracking_order_promised_delivery_date.py | 6 +- tracking/models/tracking_proof_of_delivery.py | 37 ++++++++ tracking/models/tracking_response.py | 5 +- .../tracking_response_for_get_trackings.py | 9 +- ...racking_response_for_get_trackings_data.py | 7 +- ...ponse_for_get_trackings_data_pagination.py | 6 +- tracking/models/tracking_return_shipment.py | 38 ++++++++ .../models/tracking_shipment_dimensions.py | 39 ++++++++ .../models/tracking_shipment_direction.py | 18 ++++ tracking/models/tracking_shipment_weight.py | 6 +- .../models/tracking_signature_requirement.py | 1 - .../models/update_tracking_by_id_request.py | 21 ++--- ...update_tracking_by_id_request_customers.py | 7 +- ...te_tracking_by_id_request_delivery_type.py | 1 - ...id_request_order_promised_delivery_date.py | 6 +- ...acking_by_id_request_shipment_direction.py | 17 ++++ .../models/update_tracking_by_id_response.py | 8 +- tracking/request.py | 16 ++-- tracking/response.py | 20 ++--- 116 files changed, 832 insertions(+), 557 deletions(-) create mode 100644 tracking/models/create_tracking_request_shipment_direction.py create mode 100644 tracking/models/tracking_forward_shipment.py create mode 100644 tracking/models/tracking_multi_piece_info.py create mode 100644 tracking/models/tracking_multi_piece_info_pieces.py create mode 100644 tracking/models/tracking_multi_piece_info_pieces_type.py create mode 100644 tracking/models/tracking_multi_piece_info_type.py create mode 100644 tracking/models/tracking_proof_of_delivery.py create mode 100644 tracking/models/tracking_return_shipment.py create mode 100644 tracking/models/tracking_shipment_dimensions.py create mode 100644 tracking/models/tracking_shipment_direction.py create mode 100644 tracking/models/update_tracking_by_id_request_shipment_direction.py diff --git a/README.md b/README.md index da6ca37..24a1122 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,8 @@ Before you begin to integrate: ### API and SDK Version -- SDK Version: 9.0.0 -- API Version: 2026-01 +- SDK Version: 10.0.0 +- API Version: 2026-07 ## Quick Start @@ -98,6 +98,27 @@ except exceptions.RateLimitExceedError: See the [Rate Limit](https://www.aftership.com/docs/tracking/quickstart/rate-limit) to understand the AfterShip rate limit policy. +The API returns its current rate limit status in the headers of every response, and the SDK exposes these headers on both successful responses and rate-limited errors, so you can monitor your consumption proactively instead of waiting for `429` errors. + +| Header | Description | +| ----------------------- | ---------------------------------------------------------- | +| `X-RateLimit-Limit` | The rate limit ceiling for the current endpoint per second | +| `X-RateLimit-Remaining` | The number of requests left for the 1-second window | +| `X-RateLimit-Reset` | The Unix timestamp when the rate limit will be reset | + +Every successful response exposes a `response_header` dict alongside `data` (header names are lower-cased, each value is a list of strings). Taking the Quick Start example above: + +```python +remaining = int(result.response_header["x-ratelimit-remaining"][0]) +reset_at = int(result.response_header["x-ratelimit-reset"][0]) + +if remaining <= 1: + # Throttle or defer lower-priority requests until reset_at + pass +``` + +When the rate limit is exceeded, the request fails with a `429` error that carries the same headers — see [Error Handling](#error-handling). + ## Error Handling The SDK will return an error object when there is any error during the request, with the following specification: diff --git a/pyproject.toml b/pyproject.toml index f48a8bd..28a18e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "aftership-tracking-sdk" -version = "9.0.0" +version = "10.0.0" description = "The official AfterShip Tracking Python API library" authors = ["AfterShip "] license = "MIT" diff --git a/tracking/__init__.py b/tracking/__init__.py index b0cedd6..22e9965 100644 --- a/tracking/__init__.py +++ b/tracking/__init__.py @@ -11,4 +11,4 @@ from . import exceptions from .models import * -__version__ = "9.0.0" +__version__ = "10.0.0" diff --git a/tracking/api/courier.py b/tracking/api/courier.py index f502503..be7e484 100644 --- a/tracking/api/courier.py +++ b/tracking/api/courier.py @@ -4,8 +4,9 @@ # Do not edit the class manually. import json -from typing import Union +from typing import Union, Annotated +from pydantic import Field from tracking.models import ( GetCouriersResponse, @@ -19,7 +20,11 @@ class CourierApi(ApiClient): """CourierApi api implements""" @validate_params - def get_couriers(self, **kwargs) -> GetCouriersResponse: + def get_couriers( + self, + + + **kwargs) -> GetCouriersResponse: """ Return a list of couriers. :param kwargs: @@ -33,7 +38,7 @@ def get_couriers(self, **kwargs) -> GetCouriersResponse: **active**: bool. get user activated couriers **slug**: str. Unique courier code Use comma for multiple values. (Example: dhl,ups,usps) """ - url = "/tracking/2026-01/couriers" + url = "/tracking/2026-07/couriers" params_keys = { "active", @@ -41,16 +46,19 @@ def get_couriers(self, **kwargs) -> GetCouriersResponse: } params = {key: kwargs.pop(key) for key in params_keys if key in kwargs} + result = self._request("GET", url=url, params=params, **kwargs) return GetCouriersResponse.model_validate(result) @validate_params def detect_courier( - self, detect_courier_request: Union[DetectCourierRequest, dict], **kwargs - ) -> DetectCourierResponse: + self, + + detect_courier_request: Union[DetectCourierRequest, dict], + **kwargs) -> DetectCourierResponse: """ Return a list of matched couriers based on tracking number format and or a list of couriers. - :param detect_courier_request: + :param detect_courier_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -59,12 +67,14 @@ def detect_courier( a path to an SSL certificate file, an `ssl.SSLContext`, or `False` (which will disable verification). """ - url = "/tracking/2026-01/couriers/detect" + url = "/tracking/2026-07/couriers/detect" + body = detect_courier_request if not isinstance(body, dict): - body = detect_courier_request.model_dump(exclude_none=True, mode="json") + body = detect_courier_request.model_dump(exclude_none=True, mode='json') body = json.dumps(body) result = self._request("POST", url=url, body=body, **kwargs) return DetectCourierResponse.model_validate(result) + diff --git a/tracking/api/courier_connection.py b/tracking/api/courier_connection.py index d0fc59a..f8fcb24 100644 --- a/tracking/api/courier_connection.py +++ b/tracking/api/courier_connection.py @@ -24,7 +24,11 @@ class CourierConnectionApi(ApiClient): """CourierConnectionApi api implements""" @validate_params - def get_courier_connections(self, **kwargs) -> GetCourierConnectionsResponse: + def get_courier_connections( + self, + + + **kwargs) -> GetCourierConnectionsResponse: """ Get courier connection results of multiple courier connections. :param kwargs: @@ -39,7 +43,7 @@ def get_courier_connections(self, **kwargs) -> GetCourierConnectionsResponse: **cursor**: str. A string representing the cursor value for the current page of results. **limit**: str. Number of courier connections each page contain. (Default: 100, Max: 200) """ - url = "/tracking/2026-01/courier-connections" + url = "/tracking/2026-07/courier-connections" params_keys = { "courier_slug", @@ -48,16 +52,19 @@ def get_courier_connections(self, **kwargs) -> GetCourierConnectionsResponse: } params = {key: kwargs.pop(key) for key in params_keys if key in kwargs} + result = self._request("GET", url=url, params=params, **kwargs) return GetCourierConnectionsResponse.model_validate(result) @validate_params def post_courier_connections( - self, post_courier_connections_request: Union[PostCourierConnectionsRequest, dict], **kwargs - ) -> PostCourierConnectionsResponse: + self, + + post_courier_connections_request: Union[PostCourierConnectionsRequest, dict], + **kwargs) -> PostCourierConnectionsResponse: """ - - :param post_courier_connections_request: + + :param post_courier_connections_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -66,11 +73,12 @@ def post_courier_connections( a path to an SSL certificate file, an `ssl.SSLContext`, or `False` (which will disable verification). """ - url = "/tracking/2026-01/courier-connections" + url = "/tracking/2026-07/courier-connections" + body = post_courier_connections_request if not isinstance(body, dict): - body = post_courier_connections_request.model_dump(exclude_none=True, mode="json") + body = post_courier_connections_request.model_dump(exclude_none=True, mode='json') body = json.dumps(body) result = self._request("POST", url=url, body=body, **kwargs) @@ -78,11 +86,13 @@ def post_courier_connections( @validate_params def get_courier_connections_by_id( - self, id: Annotated[str, Field(min_length=1)], **kwargs - ) -> GetCourierConnectionsByIdResponse: + self, + id: Annotated[str, Field(min_length=1)], + + **kwargs) -> GetCourierConnectionsByIdResponse: """ Get courier connection results of a single courier connection. - :param id: str. + :param id: str. :param kwargs: request options: **headers** (dict): support custom headers. @@ -91,7 +101,9 @@ def get_courier_connections_by_id( a path to an SSL certificate file, an `ssl.SSLContext`, or `False` (which will disable verification). """ - url = f"/tracking/2026-01/courier-connections/{id}" + url = f"/tracking/2026-07/courier-connections/{id}" + + result = self._request("GET", url=url, **kwargs) return GetCourierConnectionsByIdResponse.model_validate(result) @@ -99,14 +111,13 @@ def get_courier_connections_by_id( @validate_params def put_courier_connections_by_id( self, - id: Annotated[str, Field(min_length=1)], - put_courier_connections_by_id_request: Union[PutCourierConnectionsByIdRequest, dict], - **kwargs, - ) -> PutCourierConnectionsByIdResponse: + id: Annotated[str, Field(min_length=1)], + put_courier_connections_by_id_request: Union[PutCourierConnectionsByIdRequest, dict], + **kwargs) -> PutCourierConnectionsByIdResponse: """ Update a courier connection. - :param id: str. - :param put_courier_connections_by_id_request: + :param id: str. + :param put_courier_connections_by_id_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -115,11 +126,12 @@ def put_courier_connections_by_id( a path to an SSL certificate file, an `ssl.SSLContext`, or `False` (which will disable verification). """ - url = f"/tracking/2026-01/courier-connections/{id}" + url = f"/tracking/2026-07/courier-connections/{id}" + body = put_courier_connections_by_id_request if not isinstance(body, dict): - body = put_courier_connections_by_id_request.model_dump(exclude_none=True, mode="json") + body = put_courier_connections_by_id_request.model_dump(exclude_none=True, mode='json') body = json.dumps(body) result = self._request("PATCH", url=url, body=body, **kwargs) @@ -127,11 +139,13 @@ def put_courier_connections_by_id( @validate_params def delete_courier_connections_by_id( - self, id: Annotated[str, Field(min_length=1)], **kwargs - ) -> DeleteCourierConnectionsByIdResponse: + self, + id: Annotated[str, Field(min_length=1)], + + **kwargs) -> DeleteCourierConnectionsByIdResponse: """ Delete a courier connection. - :param id: str. + :param id: str. :param kwargs: request options: **headers** (dict): support custom headers. @@ -140,7 +154,10 @@ def delete_courier_connections_by_id( a path to an SSL certificate file, an `ssl.SSLContext`, or `False` (which will disable verification). """ - url = f"/tracking/2026-01/courier-connections/{id}" + url = f"/tracking/2026-07/courier-connections/{id}" + + result = self._request("DELETE", url=url, **kwargs) return DeleteCourierConnectionsByIdResponse.model_validate(result) + diff --git a/tracking/api/estimated_delivery_date.py b/tracking/api/estimated_delivery_date.py index cb55cfc..809a262 100644 --- a/tracking/api/estimated_delivery_date.py +++ b/tracking/api/estimated_delivery_date.py @@ -4,8 +4,9 @@ # Do not edit the class manually. import json -from typing import Union +from typing import Union, Annotated +from pydantic import Field from tracking.models import ( EstimatedDeliveryDateRequest, @@ -21,11 +22,13 @@ class EstimatedDeliveryDateApi(ApiClient): @validate_params def predict( - self, predict_request: Union[EstimatedDeliveryDateRequest, dict], **kwargs - ) -> PredictResponse: + self, + + predict_request: Union[EstimatedDeliveryDateRequest, dict], + **kwargs) -> PredictResponse: """ > The estimated delivery date is provided by AfterShip, based on its AI-predictive model. You can display the EDD on the product page, cart, and order checkout page. It indicates when a customer will receive the order.You can use to activate this feature. - :param predict_request: + :param predict_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -34,11 +37,12 @@ def predict( a path to an SSL certificate file, an `ssl.SSLContext`, or `False` (which will disable verification). """ - url = "/tracking/2026-01/estimated-delivery-date/predict" + url = "/tracking/2026-07/estimated-delivery-date/predict" + body = predict_request if not isinstance(body, dict): - body = predict_request.model_dump(exclude_none=True, mode="json") + body = predict_request.model_dump(exclude_none=True, mode='json') body = json.dumps(body) result = self._request("POST", url=url, body=body, **kwargs) @@ -46,11 +50,13 @@ def predict( @validate_params def predict_batch( - self, predict_batch_request: Union[PredictBatchRequest, dict], **kwargs - ) -> PredictBatchResponse: + self, + + predict_batch_request: Union[PredictBatchRequest, dict], + **kwargs) -> PredictBatchResponse: """ > The estimated delivery date is provided by AfterShip, based on its AI-predictive model. You can display the EDD on the product page, cart, and order checkout page. It indicates when a customer will receive the order.You can use to activate this feature.Supported functionalities require:1. One `EstimatedDeliveryDate` object for one prediction result.2. Maximum 5 `EstimatedDeliveryDate` objects are allowed.3. API call will fail if any of the requests `EstimatedDeliveryDate` objects do not meet the specification requirement. - :param predict_batch_request: + :param predict_batch_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -59,12 +65,14 @@ def predict_batch( a path to an SSL certificate file, an `ssl.SSLContext`, or `False` (which will disable verification). """ - url = "/tracking/2026-01/estimated-delivery-date/predict-batch" + url = "/tracking/2026-07/estimated-delivery-date/predict-batch" + body = predict_batch_request if not isinstance(body, dict): - body = predict_batch_request.model_dump(exclude_none=True, mode="json") + body = predict_batch_request.model_dump(exclude_none=True, mode='json') body = json.dumps(body) result = self._request("POST", url=url, body=body, **kwargs) return PredictBatchResponse.model_validate(result) + diff --git a/tracking/api/tracking.py b/tracking/api/tracking.py index 306a06e..6d10397 100644 --- a/tracking/api/tracking.py +++ b/tracking/api/tracking.py @@ -27,7 +27,11 @@ class TrackingApi(ApiClient): """TrackingApi api implements""" @validate_params - def get_trackings(self, **kwargs) -> GetTrackingsResponse: + def get_trackings( + self, + + + **kwargs) -> GetTrackingsResponse: """ Get tracking results of multiple trackings.
:param kwargs: @@ -47,17 +51,17 @@ def get_trackings(self, **kwargs) -> GetTrackingsResponse: **origin**: str. Origin country/region of trackings. Use ISO Alpha-3 (three letters). Use comma for multiple values. (Example: USA,HKG) **destination**: str. Destination country/region of trackings. Use ISO Alpha-3 (three letters). Use comma for multiple values. (Example: USA,HKG) **tag**: str. Current status of tracking. Values include `Pending`, `InfoReceived`, `InTransit`, `OutForDelivery`, `AttemptFail`, `Delivered`, `AvailableForPickup`, `Exception`, `Expired` (See tag definition) - **created_at_min**: str. Start date and time of trackings created. AfterShip only stores data of 120 days. Please make sure the value of the parameter is properly escaped in - **created_at_max**: str. End date and time of trackings created. Please make sure the value of the parameter is properly escaped in - **updated_at_min**: str. Start date and time of trackings updated. Please make sure the value of the parameter is properly escaped in - **updated_at_max**: str. End date and time of trackings updated. Please make sure the value of the parameter is properly escaped in + **created_at_min**: str. Start date and time of trackings created. AfterShip only stores data of 120 days. Please make sure the value of the parameter is properly escaped in + **created_at_max**: str. End date and time of trackings created. Please make sure the value of the parameter is properly escaped in + **updated_at_min**: str. Start date and time of trackings updated. Please make sure the value of the parameter is properly escaped in + **updated_at_max**: str. End date and time of trackings updated. Please make sure the value of the parameter is properly escaped in **fields**: str. List of fields to include in the response. Use comma for multiple values. Available options: `title`, `order_id`, `tag`, `checkpoints`. Example: `title,order_id` **return_to_sender**: str. Select return to sender, the value should be `true` or `false`, with optional comma separated. **courier_destination_country_region**: str. Destination country/region of trackings returned by courier. Use ISO Alpha-3 (three letters). Use comma for multiple values. (Example: USA,HKG) **shipment_tags**: str. Tags you added to your shipments to help categorize and filter them easily. Use a comma to separate multiple values (Example: a,b) **order_id**: str. A globally-unique identifier for the order. Use comma for multiple values.(Example: 6845a095a27a4caeb27487806f058add,4845a095a27a4caeb27487806f058abc) """ - url = "/tracking/2026-01/trackings" + url = "/tracking/2026-07/trackings" params_keys = { "cursor", @@ -81,16 +85,19 @@ def get_trackings(self, **kwargs) -> GetTrackingsResponse: } params = {key: kwargs.pop(key) for key in params_keys if key in kwargs} + result = self._request("GET", url=url, params=params, **kwargs) return GetTrackingsResponse.model_validate(result) @validate_params def create_tracking( - self, create_tracking_request: Union[CreateTrackingRequest, dict], **kwargs - ) -> CreateTrackingResponse: + self, + + create_tracking_request: Union[CreateTrackingRequest, dict], + **kwargs) -> CreateTrackingResponse: """ Create a tracking.
- :param create_tracking_request: + :param create_tracking_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -99,11 +106,12 @@ def create_tracking( a path to an SSL certificate file, an `ssl.SSLContext`, or `False` (which will disable verification). """ - url = "/tracking/2026-01/trackings" + url = "/tracking/2026-07/trackings" + body = create_tracking_request if not isinstance(body, dict): - body = create_tracking_request.model_dump(exclude_none=True, mode="json") + body = create_tracking_request.model_dump(exclude_none=True, mode='json') body = json.dumps(body) result = self._request("POST", url=url, body=body, **kwargs) @@ -111,8 +119,10 @@ def create_tracking( @validate_params def get_tracking_by_id( - self, id: Annotated[str, Field(min_length=1)], **kwargs - ) -> GetTrackingByIdResponse: + self, + id: Annotated[str, Field(min_length=1)], + + **kwargs) -> GetTrackingByIdResponse: """ Get tracking results of a single tracking. :param id: str. tracking ID @@ -127,7 +137,7 @@ def get_tracking_by_id( **fields**: str. List of fields to include in the response. Use comma for multiple values. Fields to include: `destination_postal_code`, `tracking_ship_date`, `tracking_account_number`, `tracking_key`, `origin_country_region`, `destination_country_region`, `destination_state`, `title`, `order_id`, `tag`, `checkpoints` **lang**: str. Translate checkpoint messages from the carrier’s provided language to the target language. Supported target languages include:</br>&nbsp;&nbsp;&nbsp;&nbsp;- English (en)</br>&nbsp;&nbsp;&nbsp;&nbsp;- French (fr)</br>&nbsp;&nbsp;&nbsp;&nbsp;- French Canadian (fr-CA)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Arabic (ar)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Bulgarian (bg)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Catalan (ca)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Croatian (hr)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Czech (cs)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Danish (da)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Dutch (nl)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Estonian (et)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Filipino (tl)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Finnish (fi)</br>&nbsp;&nbsp;&nbsp;&nbsp;- German (de)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Greek (el)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Hebrew (he)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Hindi (hi)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Hungarian (hu)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Indonesian (id)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Italian (it)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Japanese (ja)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Korean (ko)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Latvian (lv)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Lithuanian (lt)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Malay (ms)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Polish (pl)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Portuguese (pt)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Romanian (ro)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Russian (ru)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Serbian (sr)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Slovak (sk)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Slovenian (sl)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Spanish (es)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Swedish (sv)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Thai (th)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Turkish (tr)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Ukrainian (uk)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Vietnamese (vi)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Simplified Chinese (zh-Hans)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Traditional Chinese (zh-Hant)</br>&nbsp;&nbsp;&nbsp;&nbsp;- Norwegian (nb)</br> """ - url = f"/tracking/2026-01/trackings/{id}" + url = f"/tracking/2026-07/trackings/{id}" params_keys = { "fields", @@ -135,20 +145,20 @@ def get_tracking_by_id( } params = {key: kwargs.pop(key) for key in params_keys if key in kwargs} + result = self._request("GET", url=url, params=params, **kwargs) return GetTrackingByIdResponse.model_validate(result) @validate_params def update_tracking_by_id( self, - id: Annotated[str, Field(min_length=1)], - update_tracking_by_id_request: Union[UpdateTrackingByIdRequest, dict], - **kwargs, - ) -> UpdateTrackingByIdResponse: + id: Annotated[str, Field(min_length=1)], + update_tracking_by_id_request: Union[UpdateTrackingByIdRequest, dict], + **kwargs) -> UpdateTrackingByIdResponse: """ Update a tracking. :param id: str. tracking ID - :param update_tracking_by_id_request: + :param update_tracking_by_id_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -157,11 +167,12 @@ def update_tracking_by_id( a path to an SSL certificate file, an `ssl.SSLContext`, or `False` (which will disable verification). """ - url = f"/tracking/2026-01/trackings/{id}" + url = f"/tracking/2026-07/trackings/{id}" + body = update_tracking_by_id_request if not isinstance(body, dict): - body = update_tracking_by_id_request.model_dump(exclude_none=True, mode="json") + body = update_tracking_by_id_request.model_dump(exclude_none=True, mode='json') body = json.dumps(body) result = self._request("PUT", url=url, body=body, **kwargs) @@ -169,8 +180,10 @@ def update_tracking_by_id( @validate_params def delete_tracking_by_id( - self, id: Annotated[str, Field(min_length=1)], **kwargs - ) -> DeleteTrackingByIdResponse: + self, + id: Annotated[str, Field(min_length=1)], + + **kwargs) -> DeleteTrackingByIdResponse: """ Delete a tracking. :param id: str. tracking ID @@ -182,15 +195,19 @@ def delete_tracking_by_id( a path to an SSL certificate file, an `ssl.SSLContext`, or `False` (which will disable verification). """ - url = f"/tracking/2026-01/trackings/{id}" + url = f"/tracking/2026-07/trackings/{id}" + + result = self._request("DELETE", url=url, **kwargs) return DeleteTrackingByIdResponse.model_validate(result) @validate_params def retrack_tracking_by_id( - self, id: Annotated[str, Field(min_length=1)], **kwargs - ) -> RetrackTrackingByIdResponse: + self, + id: Annotated[str, Field(min_length=1)], + + **kwargs) -> RetrackTrackingByIdResponse: """ Retrack an expired tracking. Max 3 times per tracking. :param id: str. tracking id @@ -202,7 +219,9 @@ def retrack_tracking_by_id( a path to an SSL certificate file, an `ssl.SSLContext`, or `False` (which will disable verification). """ - url = f"/tracking/2026-01/trackings/{id}/retrack" + url = f"/tracking/2026-07/trackings/{id}/retrack" + + result = self._request("POST", url=url, **kwargs) return RetrackTrackingByIdResponse.model_validate(result) @@ -210,14 +229,13 @@ def retrack_tracking_by_id( @validate_params def mark_tracking_completed_by_id( self, - id: Annotated[str, Field(min_length=1)], - mark_tracking_completed_by_id_request: Union[MarkTrackingCompletedByIdRequest, dict], - **kwargs, - ) -> MarkTrackingCompletedByIdResponse: + id: Annotated[str, Field(min_length=1)], + mark_tracking_completed_by_id_request: Union[MarkTrackingCompletedByIdRequest, dict], + **kwargs) -> MarkTrackingCompletedByIdResponse: """ Mark a tracking as completed. The tracking won't auto update until retrack it. :param id: str. tracking id - :param mark_tracking_completed_by_id_request: + :param mark_tracking_completed_by_id_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -226,12 +244,14 @@ def mark_tracking_completed_by_id( a path to an SSL certificate file, an `ssl.SSLContext`, or `False` (which will disable verification). """ - url = f"/tracking/2026-01/trackings/{id}/mark-as-completed" + url = f"/tracking/2026-07/trackings/{id}/mark-as-completed" + body = mark_tracking_completed_by_id_request if not isinstance(body, dict): - body = mark_tracking_completed_by_id_request.model_dump(exclude_none=True, mode="json") + body = mark_tracking_completed_by_id_request.model_dump(exclude_none=True, mode='json') body = json.dumps(body) result = self._request("POST", url=url, body=body, **kwargs) return MarkTrackingCompletedByIdResponse.model_validate(result) + diff --git a/tracking/auth.py b/tracking/auth.py index ab206aa..1fa1478 100644 --- a/tracking/auth.py +++ b/tracking/auth.py @@ -21,6 +21,7 @@ class Authenticator: + def __init__(self, api_key: str, api_secret: str, auth_type: str): self._api_key: str = api_key self._api_secret: str = api_secret @@ -41,16 +42,14 @@ def sign(self, method: str, uri: str, headers: dict, body: str) -> Dict: return headers if self._kind != ApiKey: - headers["date"] = datetime.utcnow().strftime("%a, %d %b %Y %H:%M:%S GMT") + headers["date"] = datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT') concat_header = self.canonical_header(headers) concat_rs = self.canonical_resource(uri) request_date = headers.get("date") sign_str = self.sign_str(method, body, request_date, concat_header, concat_rs) if self._kind == Aes: - headers["as-signature-hmac-sha256"] = self.hmac_signature( - sign_str, self._api_secret - ) + headers["as-signature-hmac-sha256"] = self.hmac_signature(sign_str, self._api_secret) if self._kind == Rsa: headers["as-signature-rsa-sha256"] = self.rsa_encrypt(sign_str, self._api_secret) @@ -58,9 +57,7 @@ def sign(self, method: str, uri: str, headers: dict, body: str) -> Dict: return headers @classmethod - def sign_str( - cls, method: str, body: str, date: str, concat_header: str, concat_resource: str - ) -> str: + def sign_str(cls, method: str, body: str, date: str, concat_header: str, concat_resource: str) -> str: content_md5 = "" content_type = "" @@ -68,7 +65,14 @@ def sign_str( content_type = "application/json" content_md5 = cls.md5_encode(body) - return "\n".join([method, content_md5, content_type, date, concat_header, concat_resource]) + return "\n".join([ + method, + content_md5, + content_type, + date, + concat_header, + concat_resource + ]) @classmethod def canonical_header(cls, headers: Dict) -> str: @@ -115,7 +119,9 @@ def canonical_resource(cls, raw_url: str) -> str: @staticmethod def md5_encode(source: str) -> str: - return hashlib.md5(source.encode("utf-8")).hexdigest().upper() + return hashlib.md5( + source.encode('utf-8') + ).hexdigest().upper() @staticmethod def rsa_encrypt(sign_str: str, api_secret: str) -> str: @@ -129,6 +135,9 @@ def rsa_encrypt(sign_str: str, api_secret: str) -> str: @staticmethod def hmac_signature(sign_str: str, api_secret: str) -> str: signature = hmac.new( - bytes(api_secret, "utf-8"), msg=bytes(sign_str, "utf-8"), digestmod=hashlib.sha256 + bytes(api_secret, 'utf-8'), + msg=bytes(sign_str, 'utf-8'), + digestmod=hashlib.sha256 ).digest() return base64.b64encode(signature).decode("utf-8") + diff --git a/tracking/client.py b/tracking/client.py index a97a134..8244f75 100644 --- a/tracking/client.py +++ b/tracking/client.py @@ -15,6 +15,7 @@ class Client: + def __init__(self, configuration: Optional[Configuration] = None) -> None: if configuration is None: configuration = Configuration() @@ -23,3 +24,4 @@ def __init__(self, configuration: Optional[Configuration] = None) -> None: self.courier = CourierApi(configuration) self.courier_connection = CourierConnectionApi(configuration) self.estimated_delivery_date = EstimatedDeliveryDateApi(configuration) + diff --git a/tracking/configuration.py b/tracking/configuration.py index df67dd5..97c72b4 100644 --- a/tracking/configuration.py +++ b/tracking/configuration.py @@ -33,80 +33,69 @@ class Configuration: :param proxy: str - proxy url string. """ - def __init__( - self, - domain: Optional[str] = None, - authentication_type: Optional[str] = None, - max_retry: Optional[int] = None, - user_agent: Optional[str] = None, - api_key: Optional[str] = None, - api_secret: Optional[str] = None, - proxy: Optional[str] = None, - timeout: Optional[int] = None, - ) -> None: - self.domain = str( - _get_val_from_env_if_need( - domain, key_suffix="DOMAIN", default="https://api.aftership.com" - ) - ) + def __init__(self, + domain: Optional[str] = None, + authentication_type: Optional[str] = None, + max_retry: Optional[int] = None, + user_agent: Optional[str] = None, + api_key: Optional[str] = None, + api_secret: Optional[str] = None, + proxy: Optional[str] = None, + timeout: Optional[int] = None, + ) -> None: + self.domain = str(_get_val_from_env_if_need(domain, + key_suffix="DOMAIN", default="https://api.aftership.com")) - self.authentication_type = str( - _get_val_from_env_if_need( - authentication_type, key_suffix="AUTHENTICATION_TYPE", default=ApiKey - ) - ) + self.authentication_type = str(_get_val_from_env_if_need(authentication_type, + key_suffix="AUTHENTICATION_TYPE", default=ApiKey)) - self.max_retry = int( - _get_val_from_env_if_need(max_retry, key_suffix="MAX_RETRY", default=2) - ) + self.max_retry = int(_get_val_from_env_if_need(max_retry, + key_suffix="MAX_RETRY", default=2)) - self.user_agent = ( - str(_get_val_from_env_if_need(user_agent, key_suffix="USER_AGENT", default="")) or None - ) + self.user_agent = str(_get_val_from_env_if_need(user_agent, + key_suffix="USER_AGENT", default="")) or None - self.api_key = ( - str(_get_val_from_env_if_need(api_key, key_suffix="API_KEY", default="")) or None - ) + self.api_key = str(_get_val_from_env_if_need(api_key, + key_suffix="API_KEY", default="")) or None - self.api_secret = ( - str(_get_val_from_env_if_need(api_secret, key_suffix="API_SECRET", default="")) or None - ) + self.api_secret = str(_get_val_from_env_if_need(api_secret, + key_suffix="API_SECRET", default="")) or None - self.proxy = str(_get_val_from_env_if_need(proxy, key_suffix="PROXY", default="")) or None + self.proxy = str(_get_val_from_env_if_need(proxy, + key_suffix="PROXY", default="")) or None - self.timeout = int(_get_val_from_env_if_need(timeout, key_suffix="TIMEOUT", default=10000)) + self.timeout = int(_get_val_from_env_if_need(timeout, + key_suffix="TIMEOUT", default=10000)) self._validate() def _validate(self): if self.domain is None or len(self.domain) == 0: raise InvalidOptionError( - code=ErrorCodeEnum.INVALID_OPTION, message=f"Invalid option: domain={self.domain}" + code=ErrorCodeEnum.INVALID_OPTION, + message=f"Invalid option: domain={self.domain}" ) if self.authentication_type not in {ApiKey, Rsa, Aes}: raise InvalidOptionError( code=ErrorCodeEnum.INVALID_OPTION, - message=f"Invalid option: authentication_type={self.authentication_type}", - ) + message=f"Invalid option: authentication_type={self.authentication_type}") if self.api_key is None or len(self.api_key) == 0: - raise InvalidApiKeyError(code=ErrorCodeEnum.INVALID_API_KEY, message="Invalid API key") + raise InvalidApiKeyError( + code=ErrorCodeEnum.INVALID_API_KEY, + message="Invalid API key") - if self.authentication_type != ApiKey and ( - self.api_secret is None or len(self.api_secret) == 0 - ): + if self.authentication_type != ApiKey and (self.api_secret is None or len(self.api_secret) == 0): raise InvalidOptionError( code=ErrorCodeEnum.INVALID_OPTION, - message=f"Invalid option: api_secret={self.api_secret}", - ) + message=f"Invalid option: api_secret={self.api_secret}") if self.max_retry > 10 or self.max_retry < 0: raise InvalidOptionError( code=ErrorCodeEnum.INVALID_OPTION, - message=f"Invalid option: max_retry={self.max_retry}", - ) + message=f"Invalid option: max_retry={self.max_retry}") if self.timeout <= 0: raise InvalidOptionError( - code=ErrorCodeEnum.INVALID_OPTION, message=f"Invalid option: timeout={self.timeout}" - ) + code=ErrorCodeEnum.INVALID_OPTION, + message=f"Invalid option: timeout={self.timeout}") diff --git a/tracking/exceptions.py b/tracking/exceptions.py index 953c364..2a3e213 100644 --- a/tracking/exceptions.py +++ b/tracking/exceptions.py @@ -37,7 +37,7 @@ def __init__( self.response_header = response_header def __str__(self): - return "{}: {}".format(self.__class__.__name__, self.message) + return '{}: {}'.format(self.__class__.__name__, self.message) class BadRequestError(ApiException): @@ -91,7 +91,6 @@ class ErrorCodeEnum(Enum): allowed enum values """ - INVALID_API_KEY = "INVALID_API_KEY" INVALID_OPTION = "INVALID_OPTION" BAD_REQUEST = "BAD_REQUEST" diff --git a/tracking/models/__init__.py b/tracking/models/__init__.py index 16bc9c0..150d99a 100644 --- a/tracking/models/__init__.py +++ b/tracking/models/__init__.py @@ -11,6 +11,7 @@ "Meta", "TrackingCourierEstimatedDeliveryDate", "TrackingShipmentWeight", + "TrackingShipmentDimensions", "TrackingOrderPromisedDeliveryDate", "TrackingAftershipEstimatedDeliveryDate", "TrackingCustomEstimatedDeliveryDateType", @@ -27,6 +28,14 @@ "TrackingLastMileSource", "TrackingLastMile", "TrackingCustomers", + "TrackingProofOfDelivery", + "TrackingMultiPieceInfoType", + "TrackingMultiPieceInfoPiecesType", + "TrackingMultiPieceInfoPieces", + "TrackingMultiPieceInfo", + "TrackingShipmentDirection", + "TrackingReturnShipment", + "TrackingForwardShipment", "Tracking", "Tag", "CheckpointCoordinate", @@ -64,12 +73,14 @@ "CreateTrackingRequestDeliveryType", "CreateTrackingRequestLastMile", "CreateTrackingRequestCustomers", + "CreateTrackingRequestShipmentDirection", "CreateTrackingRequest", "CreateTrackingResponse", "GetTrackingByIdResponse", "UpdateTrackingByIdRequestOrderPromisedDeliveryDate", "UpdateTrackingByIdRequestDeliveryType", "UpdateTrackingByIdRequestCustomers", + "UpdateTrackingByIdRequestShipmentDirection", "UpdateTrackingByIdRequest", "UpdateTrackingByIdResponse", "DeleteTrackingByIdResponse", @@ -97,15 +108,14 @@ "PredictBatchResponse", ] -from .tracking_response_for_get_trackings_data_pagination import ( - TrackingResponseForGetTrackingsDataPagination, -) +from .tracking_response_for_get_trackings_data_pagination import TrackingResponseForGetTrackingsDataPagination from .tracking_response_for_get_trackings_data import TrackingResponseForGetTrackingsData from .tracking_response_for_get_trackings import TrackingResponseForGetTrackings from .meta_type import MetaType from .meta import Meta from .tracking_courier_estimated_delivery_date import TrackingCourierEstimatedDeliveryDate from .tracking_shipment_weight import TrackingShipmentWeight +from .tracking_shipment_dimensions import TrackingShipmentDimensions from .tracking_order_promised_delivery_date import TrackingOrderPromisedDeliveryDate from .tracking_aftership_estimated_delivery_date import TrackingAftershipEstimatedDeliveryDate from .tracking_custom_estimated_delivery_date_type import TrackingCustomEstimatedDeliveryDateType @@ -122,6 +132,14 @@ from .tracking_last_mile_source import TrackingLastMileSource from .tracking_last_mile import TrackingLastMile from .tracking_customers import TrackingCustomers +from .tracking_proof_of_delivery import TrackingProofOfDelivery +from .tracking_multi_piece_info_type import TrackingMultiPieceInfoType +from .tracking_multi_piece_info_pieces_type import TrackingMultiPieceInfoPiecesType +from .tracking_multi_piece_info_pieces import TrackingMultiPieceInfoPieces +from .tracking_multi_piece_info import TrackingMultiPieceInfo +from .tracking_shipment_direction import TrackingShipmentDirection +from .tracking_return_shipment import TrackingReturnShipment +from .tracking_forward_shipment import TrackingForwardShipment from .tracking import Tracking from .tag import Tag from .checkpoint_coordinate import CheckpointCoordinate @@ -136,61 +154,37 @@ from .courier import Courier from .additional_fields import AdditionalFields from .credential_field import CredentialField -from .courier_connection_response_for_get_courier_connections_data_pagination import ( - CourierConnectionResponseForGetCourierConnectionsDataPagination, -) -from .courier_connection_response_for_get_courier_connections_data import ( - CourierConnectionResponseForGetCourierConnectionsData, -) -from .courier_connection_response_for_get_courier_connections import ( - CourierConnectionResponseForGetCourierConnections, -) +from .courier_connection_response_for_get_courier_connections_data_pagination import CourierConnectionResponseForGetCourierConnectionsDataPagination +from .courier_connection_response_for_get_courier_connections_data import CourierConnectionResponseForGetCourierConnectionsData +from .courier_connection_response_for_get_courier_connections import CourierConnectionResponseForGetCourierConnections from .courier_connection import CourierConnection -from .estimated_delivery_date_request_origin_address import ( - EstimatedDeliveryDateRequestOriginAddress, -) -from .estimated_delivery_date_request_destination_address import ( - EstimatedDeliveryDateRequestDestinationAddress, -) +from .estimated_delivery_date_request_origin_address import EstimatedDeliveryDateRequestOriginAddress +from .estimated_delivery_date_request_destination_address import EstimatedDeliveryDateRequestDestinationAddress from .estimated_delivery_date_request_weight import EstimatedDeliveryDateRequestWeight -from .estimated_delivery_date_request_estimated_pickup_order_processing_time import ( - EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime, -) -from .estimated_delivery_date_request_estimated_pickup import ( - EstimatedDeliveryDateRequestEstimatedPickup, -) +from .estimated_delivery_date_request_estimated_pickup_order_processing_time import EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime +from .estimated_delivery_date_request_estimated_pickup import EstimatedDeliveryDateRequestEstimatedPickup from .estimated_delivery_date_request import EstimatedDeliveryDateRequest -from .estimated_delivery_date_response_origin_address import ( - EstimatedDeliveryDateResponseOriginAddress, -) -from .estimated_delivery_date_response_destination_address import ( - EstimatedDeliveryDateResponseDestinationAddress, -) +from .estimated_delivery_date_response_origin_address import EstimatedDeliveryDateResponseOriginAddress +from .estimated_delivery_date_response_destination_address import EstimatedDeliveryDateResponseDestinationAddress from .estimated_delivery_date_response_weight import EstimatedDeliveryDateResponseWeight -from .estimated_delivery_date_response_estimated_pickup_order_processing_time import ( - EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime, -) -from .estimated_delivery_date_response_estimated_pickup import ( - EstimatedDeliveryDateResponseEstimatedPickup, -) +from .estimated_delivery_date_response_estimated_pickup_order_processing_time import EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime +from .estimated_delivery_date_response_estimated_pickup import EstimatedDeliveryDateResponseEstimatedPickup from .estimated_delivery_date_response import EstimatedDeliveryDateResponse from .get_trackings_response_data import GetTrackingsResponseData from .get_trackings_response_data_pagination import GetTrackingsResponseDataPagination from .get_trackings_response import GetTrackingsResponse -from .create_tracking_request_order_promised_delivery_date import ( - CreateTrackingRequestOrderPromisedDeliveryDate, -) +from .create_tracking_request_order_promised_delivery_date import CreateTrackingRequestOrderPromisedDeliveryDate from .create_tracking_request_delivery_type import CreateTrackingRequestDeliveryType from .create_tracking_request_last_mile import CreateTrackingRequestLastMile from .create_tracking_request_customers import CreateTrackingRequestCustomers +from .create_tracking_request_shipment_direction import CreateTrackingRequestShipmentDirection from .create_tracking_request import CreateTrackingRequest from .create_tracking_response import CreateTrackingResponse from .get_tracking_by_id_response import GetTrackingByIdResponse -from .update_tracking_by_id_request_order_promised_delivery_date import ( - UpdateTrackingByIdRequestOrderPromisedDeliveryDate, -) +from .update_tracking_by_id_request_order_promised_delivery_date import UpdateTrackingByIdRequestOrderPromisedDeliveryDate from .update_tracking_by_id_request_delivery_type import UpdateTrackingByIdRequestDeliveryType from .update_tracking_by_id_request_customers import UpdateTrackingByIdRequestCustomers +from .update_tracking_by_id_request_shipment_direction import UpdateTrackingByIdRequestShipmentDirection from .update_tracking_by_id_request import UpdateTrackingByIdRequest from .update_tracking_by_id_response import UpdateTrackingByIdResponse from .delete_tracking_by_id_response import DeleteTrackingByIdResponse @@ -204,9 +198,7 @@ from .detect_courier_response_data import DetectCourierResponseData from .detect_courier_response import DetectCourierResponse from .get_courier_connections_response_data import GetCourierConnectionsResponseData -from .get_courier_connections_response_data_pagination import ( - GetCourierConnectionsResponseDataPagination, -) +from .get_courier_connections_response_data_pagination import GetCourierConnectionsResponseDataPagination from .get_courier_connections_response import GetCourierConnectionsResponse from .post_courier_connections_request import PostCourierConnectionsRequest from .post_courier_connections_response import PostCourierConnectionsResponse @@ -218,3 +210,4 @@ from .predict_batch_request import PredictBatchRequest from .predict_batch_response_data import PredictBatchResponseData from .predict_batch_response import PredictBatchResponse + diff --git a/tracking/models/additional_fields.py b/tracking/models/additional_fields.py index 2bf4e9c..70ddfa1 100644 --- a/tracking/models/additional_fields.py +++ b/tracking/models/additional_fields.py @@ -13,7 +13,6 @@ class AdditionalFields(Enum): allowed enum values """ - TRACKING_ACCOUNT_NUMBER = "tracking_account_number" DESTINATION_POSTAL_CODE = "destination_postal_code" DESTINATION_STATE = "destination_state" diff --git a/tracking/models/checkpoint.py b/tracking/models/checkpoint.py index a95dcff..a792714 100644 --- a/tracking/models/checkpoint.py +++ b/tracking/models/checkpoint.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -20,7 +20,6 @@ class Checkpoint(BaseModel): """ Object describes checkpoint information. """ # noqa: E501 - created_at: Optional[str] = None slug: Optional[str] = None checkpoint_time: Optional[str] = None @@ -38,6 +37,7 @@ class Checkpoint(BaseModel): raw_tag: Optional[str] = None events: Optional[List[CheckpointEvents]] = None source: Optional[CheckpointSource] = None + hash: Optional[str] = None def to_str(self, **kwargs) -> str: return pprint.pformat(self.model_dump(**kwargs)) diff --git a/tracking/models/checkpoint_coordinate.py b/tracking/models/checkpoint_coordinate.py index 969ceb4..650f6ef 100644 --- a/tracking/models/checkpoint_coordinate.py +++ b/tracking/models/checkpoint_coordinate.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class CheckpointCoordinate(BaseModel): """ The latitude and longitude coordinates indicate the precise location of the shipments that are currently in transit. """ # noqa: E501 - latitude: Optional[float] = None longitude: Optional[float] = None diff --git a/tracking/models/checkpoint_events.py b/tracking/models/checkpoint_events.py index 39aaba0..fa5644d 100644 --- a/tracking/models/checkpoint_events.py +++ b/tracking/models/checkpoint_events.py @@ -6,8 +6,8 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.checkpoint_events_reason import CheckpointEventsReason @@ -17,7 +17,6 @@ class CheckpointEvents(BaseModel): """ CheckpointEvents """ # noqa: E501 - code: Optional[str] = None reason: Optional[CheckpointEventsReason] = None diff --git a/tracking/models/checkpoint_events_reason.py b/tracking/models/checkpoint_events_reason.py index 2718e9a..c1e1a2c 100644 --- a/tracking/models/checkpoint_events_reason.py +++ b/tracking/models/checkpoint_events_reason.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class CheckpointEventsReason(BaseModel): """ Describes the specific reason that led to the event. """ # noqa: E501 - code: Optional[str] = None def to_str(self, **kwargs) -> str: diff --git a/tracking/models/checkpoint_source.py b/tracking/models/checkpoint_source.py index 74c6861..22e791c 100644 --- a/tracking/models/checkpoint_source.py +++ b/tracking/models/checkpoint_source.py @@ -13,6 +13,5 @@ class CheckpointSource(Enum): allowed enum values """ - CARRIER = "carrier" USER = "user" diff --git a/tracking/models/courier.py b/tracking/models/courier.py index c471119..8b10fc7 100644 --- a/tracking/models/courier.py +++ b/tracking/models/courier.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -18,7 +18,6 @@ class Courier(BaseModel): """ Courier object """ # noqa: E501 - slug: Optional[str] = None name: Optional[str] = None phone: Optional[str] = None diff --git a/tracking/models/courier_connection.py b/tracking/models/courier_connection.py index a31cc98..47eff95 100644 --- a/tracking/models/courier_connection.py +++ b/tracking/models/courier_connection.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class CourierConnection(BaseModel): """ This model represents user-created courier connection details. AfterShip will use this information to retrieve tracking updates from carriers based on the provided tracking numbers. """ # noqa: E501 - id: Optional[str] = None courier_slug: Optional[str] = None credentials: Optional[dict] = None diff --git a/tracking/models/courier_connection_response_for_get_courier_connections.py b/tracking/models/courier_connection_response_for_get_courier_connections.py index 4ac3b14..843cd21 100644 --- a/tracking/models/courier_connection_response_for_get_courier_connections.py +++ b/tracking/models/courier_connection_response_for_get_courier_connections.py @@ -6,21 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.meta import Meta -from tracking.models.courier_connection_response_for_get_courier_connections_data import ( - CourierConnectionResponseForGetCourierConnectionsData, -) +from tracking.models.courier_connection_response_for_get_courier_connections_data import CourierConnectionResponseForGetCourierConnectionsData class CourierConnectionResponseForGetCourierConnections(BaseModel): """ Courier connection response for getting courier connections """ # noqa: E501 - meta: Optional[Meta] = None data: Optional[CourierConnectionResponseForGetCourierConnectionsData] = None diff --git a/tracking/models/courier_connection_response_for_get_courier_connections_data.py b/tracking/models/courier_connection_response_for_get_courier_connections_data.py index 3da61c8..30b24db 100644 --- a/tracking/models/courier_connection_response_for_get_courier_connections_data.py +++ b/tracking/models/courier_connection_response_for_get_courier_connections_data.py @@ -6,13 +6,11 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.courier_connection_response_for_get_courier_connections_data_pagination import ( - CourierConnectionResponseForGetCourierConnectionsDataPagination, -) +from tracking.models.courier_connection_response_for_get_courier_connections_data_pagination import CourierConnectionResponseForGetCourierConnectionsDataPagination from tracking.models.courier_connection import CourierConnection @@ -20,7 +18,6 @@ class CourierConnectionResponseForGetCourierConnectionsData(BaseModel): """ CourierConnectionResponseForGetCourierConnectionsData """ # noqa: E501 - pagination: Optional[CourierConnectionResponseForGetCourierConnectionsDataPagination] = None courier_connections: Optional[List[CourierConnection]] = None diff --git a/tracking/models/courier_connection_response_for_get_courier_connections_data_pagination.py b/tracking/models/courier_connection_response_for_get_courier_connections_data_pagination.py index ecfada4..a638eeb 100644 --- a/tracking/models/courier_connection_response_for_get_courier_connections_data_pagination.py +++ b/tracking/models/courier_connection_response_for_get_courier_connections_data_pagination.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class CourierConnectionResponseForGetCourierConnectionsDataPagination(BaseModel): """ CourierConnectionResponseForGetCourierConnectionsDataPagination """ # noqa: E501 - total: Optional[int] = None next_cursor: Optional[str] = None has_next_page: Optional[bool] = None diff --git a/tracking/models/courier_credentials.py b/tracking/models/courier_credentials.py index bab684c..38411ac 100644 --- a/tracking/models/courier_credentials.py +++ b/tracking/models/courier_credentials.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -17,7 +17,6 @@ class CourierCredentials(BaseModel): """ Refers to the authentication details required for each specific carrier (such as API keys, username, password, etc.) that the user must provide to create a carrier connection. The content varies by carrier. """ # noqa: E501 - fields: Optional[List[CredentialField]] = None def to_str(self, **kwargs) -> str: diff --git a/tracking/models/courier_response.py b/tracking/models/courier_response.py index 45febd8..35db4e7 100644 --- a/tracking/models/courier_response.py +++ b/tracking/models/courier_response.py @@ -6,8 +6,8 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.meta import Meta @@ -18,7 +18,6 @@ class CourierResponse(BaseModel): """ Model of all couriers endpoint response """ # noqa: E501 - meta: Optional[Meta] = None data: Optional[CourierResponseData] = None diff --git a/tracking/models/courier_response_data.py b/tracking/models/courier_response_data.py index 6691595..42d5ec9 100644 --- a/tracking/models/courier_response_data.py +++ b/tracking/models/courier_response_data.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -17,7 +17,6 @@ class CourierResponseData(BaseModel): """ CourierResponseData """ # noqa: E501 - total: Optional[int] = None couriers: Optional[List[Courier]] = None diff --git a/tracking/models/create_tracking_request.py b/tracking/models/create_tracking_request.py index 780134d..347e550 100644 --- a/tracking/models/create_tracking_request.py +++ b/tracking/models/create_tracking_request.py @@ -6,23 +6,21 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.create_tracking_request_order_promised_delivery_date import ( - CreateTrackingRequestOrderPromisedDeliveryDate, -) +from tracking.models.create_tracking_request_order_promised_delivery_date import CreateTrackingRequestOrderPromisedDeliveryDate from tracking.models.create_tracking_request_delivery_type import CreateTrackingRequestDeliveryType from tracking.models.create_tracking_request_last_mile import CreateTrackingRequestLastMile from tracking.models.create_tracking_request_customers import CreateTrackingRequestCustomers +from tracking.models.create_tracking_request_shipment_direction import CreateTrackingRequestShipmentDirection class CreateTrackingRequest(BaseModel): """ CreateTrackingRequest """ # noqa: E501 - id: Optional[str] = None tracking_number: Optional[str] = None slug: Optional[str] = None @@ -59,6 +57,7 @@ class CreateTrackingRequest(BaseModel): shipping_method: Optional[str] = None last_mile: Optional[CreateTrackingRequestLastMile] = None customers: Optional[List[CreateTrackingRequestCustomers]] = None + shipment_direction: Optional[CreateTrackingRequestShipmentDirection] = None def to_str(self, **kwargs) -> str: return pprint.pformat(self.model_dump(**kwargs)) diff --git a/tracking/models/create_tracking_request_customers.py b/tracking/models/create_tracking_request_customers.py index de6affa..ddfc4cd 100644 --- a/tracking/models/create_tracking_request_customers.py +++ b/tracking/models/create_tracking_request_customers.py @@ -6,21 +6,22 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class CreateTrackingRequestCustomers(BaseModel): """ CreateTrackingRequestCustomers """ # noqa: E501 - role: Optional[str] = None name: Optional[str] = None phone_number: Optional[str] = None email: Optional[str] = None language: Optional[str] = None + id: Optional[str] = None def to_str(self, **kwargs) -> str: return pprint.pformat(self.model_dump(**kwargs)) diff --git a/tracking/models/create_tracking_request_delivery_type.py b/tracking/models/create_tracking_request_delivery_type.py index ca540bd..a9c2941 100644 --- a/tracking/models/create_tracking_request_delivery_type.py +++ b/tracking/models/create_tracking_request_delivery_type.py @@ -13,7 +13,6 @@ class CreateTrackingRequestDeliveryType(Enum): allowed enum values """ - PICKUP_AT_STORE = "pickup_at_store" DOOR_TO_DOOR = "door_to_door" PICKUP_AT_COURIER = "pickup_at_courier" diff --git a/tracking/models/create_tracking_request_last_mile.py b/tracking/models/create_tracking_request_last_mile.py index 9ea6ca3..cbf81a5 100644 --- a/tracking/models/create_tracking_request_last_mile.py +++ b/tracking/models/create_tracking_request_last_mile.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class CreateTrackingRequestLastMile(BaseModel): """ This field contains information about the last leg of the shipment, starting from the carrier who hands it over to the last-mile carrier, all the way to delivery. Once AfterShip detects that the shipment involves multiple legs and identifies the last-mile carrier, we will populate the last-mile carrier information in this object. Alternatively, the user can provide this information in this field to specify the last-mile carrier, which is helpful if AfterShip is unable to detect it automatically. """ # noqa: E501 - tracking_number: Optional[str] = None slug: Optional[str] = None diff --git a/tracking/models/create_tracking_request_order_promised_delivery_date.py b/tracking/models/create_tracking_request_order_promised_delivery_date.py index f91f5bc..a490b3c 100644 --- a/tracking/models/create_tracking_request_order_promised_delivery_date.py +++ b/tracking/models/create_tracking_request_order_promised_delivery_date.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class CreateTrackingRequestOrderPromisedDeliveryDate(BaseModel): """ The promised delivery date of the order in shipment recipient’s timezone. """ # noqa: E501 - promised_delivery_date: Optional[str] = None promised_delivery_date_min: Optional[str] = None promised_delivery_date_max: Optional[str] = None diff --git a/tracking/models/create_tracking_request_shipment_direction.py b/tracking/models/create_tracking_request_shipment_direction.py new file mode 100644 index 0000000..2776112 --- /dev/null +++ b/tracking/models/create_tracking_request_shipment_direction.py @@ -0,0 +1,17 @@ +# coding: utf-8 +# +# This code was auto generated by AfterShip SDK Generator. +# Do not edit the class manually. + +from enum import Enum, unique + + +@unique +class CreateTrackingRequestShipmentDirection(Enum): + """ + Indicates the business direction of the shipment in the e-commerce fulfillment lifecycle.Possible values:- `forward`: A forward (outbound-to-customer) shipment created for order fulfillment.- `return`: A return (customer-to-merchant) shipment created for after-sales return or exchange.When provided, this field gives AfterShip additional context about the shipment's intent, enabling more accurate status identification. + + allowed enum values + """ + FORWARD = "forward" + RETURN = "return" diff --git a/tracking/models/create_tracking_response.py b/tracking/models/create_tracking_response.py index 67fdb39..cfadc1a 100644 --- a/tracking/models/create_tracking_response.py +++ b/tracking/models/create_tracking_response.py @@ -6,18 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.tracking import Tracking - class CreateTrackingResponse(BaseModel): """ - Object describes the tracking information.<div style="display:none; height: 0"></div> + Object describes the tracking information.<div style="visibility:hidden; height: 0"></div> """ - response_header: Dict[str, List[str]] = {} data: Optional[Tracking] = None @@ -36,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/credential_field.py b/tracking/models/credential_field.py index 33cb919..44b8201 100644 --- a/tracking/models/credential_field.py +++ b/tracking/models/credential_field.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class CredentialField(BaseModel): """ CredentialField """ # noqa: E501 - name: Optional[str] = None type: Optional[str] = None required: Optional[bool] = None diff --git a/tracking/models/delete_courier_connections_by_id_response.py b/tracking/models/delete_courier_connections_by_id_response.py index 415a1f6..067f013 100644 --- a/tracking/models/delete_courier_connections_by_id_response.py +++ b/tracking/models/delete_courier_connections_by_id_response.py @@ -6,18 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.courier_connection import CourierConnection - class DeleteCourierConnectionsByIdResponse(BaseModel): """ This model represents user-created courier connection details. AfterShip will use this information to retrieve tracking updates from carriers based on the provided tracking numbers. """ - response_header: Dict[str, List[str]] = {} data: Optional[CourierConnection] = None @@ -36,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/delete_tracking_by_id_response.py b/tracking/models/delete_tracking_by_id_response.py index 635485a..a57bce0 100644 --- a/tracking/models/delete_tracking_by_id_response.py +++ b/tracking/models/delete_tracking_by_id_response.py @@ -6,18 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.tracking import Tracking - class DeleteTrackingByIdResponse(BaseModel): """ - Object describes the tracking information.<div style="display:none; height: 0"></div> + Object describes the tracking information.<div style="visibility:hidden; height: 0"></div> """ - response_header: Dict[str, List[str]] = {} data: Optional[Tracking] = None @@ -36,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/detect_courier_request.py b/tracking/models/detect_courier_request.py index 84b4904..b0d9de9 100644 --- a/tracking/models/detect_courier_request.py +++ b/tracking/models/detect_courier_request.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self + class DetectCourierRequest(BaseModel): """ DetectCourierRequest """ # noqa: E501 - tracking_number: Optional[str] = None slug: Optional[List[str]] = None destination_postal_code: Optional[str] = None diff --git a/tracking/models/detect_courier_response.py b/tracking/models/detect_courier_response.py index 6e93be9..4fb39a2 100644 --- a/tracking/models/detect_courier_response.py +++ b/tracking/models/detect_courier_response.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.detect_courier_response_data import DetectCourierResponseData - class DetectCourierResponse(BaseModel): - """ """ - + """ + + """ response_header: Dict[str, List[str]] = {} data: Optional[DetectCourierResponseData] = None @@ -34,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/detect_courier_response_data.py b/tracking/models/detect_courier_response_data.py index 6709a5e..3f04ce5 100644 --- a/tracking/models/detect_courier_response_data.py +++ b/tracking/models/detect_courier_response_data.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -17,7 +17,6 @@ class DetectCourierResponseData(BaseModel): """ DetectCourierResponseData """ # noqa: E501 - total: Optional[int] = None couriers: Optional[List[Courier]] = None diff --git a/tracking/models/estimated_delivery_date_request.py b/tracking/models/estimated_delivery_date_request.py index 332ee5e..7c5ee3e 100644 --- a/tracking/models/estimated_delivery_date_request.py +++ b/tracking/models/estimated_delivery_date_request.py @@ -6,29 +6,20 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.estimated_delivery_date_request_origin_address import ( - EstimatedDeliveryDateRequestOriginAddress, -) -from tracking.models.estimated_delivery_date_request_destination_address import ( - EstimatedDeliveryDateRequestDestinationAddress, -) -from tracking.models.estimated_delivery_date_request_weight import ( - EstimatedDeliveryDateRequestWeight, -) -from tracking.models.estimated_delivery_date_request_estimated_pickup import ( - EstimatedDeliveryDateRequestEstimatedPickup, -) +from tracking.models.estimated_delivery_date_request_origin_address import EstimatedDeliveryDateRequestOriginAddress +from tracking.models.estimated_delivery_date_request_destination_address import EstimatedDeliveryDateRequestDestinationAddress +from tracking.models.estimated_delivery_date_request_weight import EstimatedDeliveryDateRequestWeight +from tracking.models.estimated_delivery_date_request_estimated_pickup import EstimatedDeliveryDateRequestEstimatedPickup class EstimatedDeliveryDateRequest(BaseModel): """ EstimatedDeliveryDateRequest """ # noqa: E501 - slug: Optional[str] = None service_type_name: Optional[str] = None origin_address: Optional[EstimatedDeliveryDateRequestOriginAddress] = None diff --git a/tracking/models/estimated_delivery_date_request_destination_address.py b/tracking/models/estimated_delivery_date_request_destination_address.py index 45e55ab..05e5f75 100644 --- a/tracking/models/estimated_delivery_date_request_destination_address.py +++ b/tracking/models/estimated_delivery_date_request_destination_address.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class EstimatedDeliveryDateRequestDestinationAddress(BaseModel): """ The final destination of the customer where the delivery will be made. """ # noqa: E501 - country_region: Optional[str] = None state: Optional[str] = None city: Optional[str] = None diff --git a/tracking/models/estimated_delivery_date_request_estimated_pickup.py b/tracking/models/estimated_delivery_date_request_estimated_pickup.py index ee37896..afcd718 100644 --- a/tracking/models/estimated_delivery_date_request_estimated_pickup.py +++ b/tracking/models/estimated_delivery_date_request_estimated_pickup.py @@ -6,26 +6,21 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.estimated_delivery_date_request_estimated_pickup_order_processing_time import ( - EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime, -) +from tracking.models.estimated_delivery_date_request_estimated_pickup_order_processing_time import EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime class EstimatedDeliveryDateRequestEstimatedPickup(BaseModel): """ The local pickup time of the package.
**Either `pickup_time` or `estimated_pickup` is required.** """ # noqa: E501 - order_time: Optional[str] = None order_cutoff_time: Optional[str] = None business_days: Optional[List[int]] = None - order_processing_time: Optional[ - EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime - ] = None + order_processing_time: Optional[EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime] = None def to_str(self, **kwargs) -> str: return pprint.pformat(self.model_dump(**kwargs)) diff --git a/tracking/models/estimated_delivery_date_request_estimated_pickup_order_processing_time.py b/tracking/models/estimated_delivery_date_request_estimated_pickup_order_processing_time.py index c070612..fe59efa 100644 --- a/tracking/models/estimated_delivery_date_request_estimated_pickup_order_processing_time.py +++ b/tracking/models/estimated_delivery_date_request_estimated_pickup_order_processing_time.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime(BaseModel): """ EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime """ # noqa: E501 - unit: Optional[str] = None value: Optional[float] = None diff --git a/tracking/models/estimated_delivery_date_request_origin_address.py b/tracking/models/estimated_delivery_date_request_origin_address.py index 9c94edd..a6a5c40 100644 --- a/tracking/models/estimated_delivery_date_request_origin_address.py +++ b/tracking/models/estimated_delivery_date_request_origin_address.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class EstimatedDeliveryDateRequestOriginAddress(BaseModel): """ The location from where the package is picked up by the carrier to be delivered to the final destination. """ # noqa: E501 - country_region: Optional[str] = None state: Optional[str] = None city: Optional[str] = None diff --git a/tracking/models/estimated_delivery_date_request_weight.py b/tracking/models/estimated_delivery_date_request_weight.py index 8db5bbc..2bb4a5c 100644 --- a/tracking/models/estimated_delivery_date_request_weight.py +++ b/tracking/models/estimated_delivery_date_request_weight.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class EstimatedDeliveryDateRequestWeight(BaseModel): """ AfterShip uses this object to calculate the total weight of the order. """ # noqa: E501 - unit: Optional[str] = None value: Optional[float] = None diff --git a/tracking/models/estimated_delivery_date_response.py b/tracking/models/estimated_delivery_date_response.py index 403066b..87abf42 100644 --- a/tracking/models/estimated_delivery_date_response.py +++ b/tracking/models/estimated_delivery_date_response.py @@ -6,29 +6,20 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.estimated_delivery_date_response_origin_address import ( - EstimatedDeliveryDateResponseOriginAddress, -) -from tracking.models.estimated_delivery_date_response_destination_address import ( - EstimatedDeliveryDateResponseDestinationAddress, -) -from tracking.models.estimated_delivery_date_response_weight import ( - EstimatedDeliveryDateResponseWeight, -) -from tracking.models.estimated_delivery_date_response_estimated_pickup import ( - EstimatedDeliveryDateResponseEstimatedPickup, -) +from tracking.models.estimated_delivery_date_response_origin_address import EstimatedDeliveryDateResponseOriginAddress +from tracking.models.estimated_delivery_date_response_destination_address import EstimatedDeliveryDateResponseDestinationAddress +from tracking.models.estimated_delivery_date_response_weight import EstimatedDeliveryDateResponseWeight +from tracking.models.estimated_delivery_date_response_estimated_pickup import EstimatedDeliveryDateResponseEstimatedPickup class EstimatedDeliveryDateResponse(BaseModel): """ EstimatedDeliveryDateResponse """ # noqa: E501 - id: Optional[str] = None slug: Optional[str] = None service_type_name: Optional[str] = None diff --git a/tracking/models/estimated_delivery_date_response_destination_address.py b/tracking/models/estimated_delivery_date_response_destination_address.py index 362ab56..1f6ac8c 100644 --- a/tracking/models/estimated_delivery_date_response_destination_address.py +++ b/tracking/models/estimated_delivery_date_response_destination_address.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class EstimatedDeliveryDateResponseDestinationAddress(BaseModel): """ The final destination of the customer where the delivery will be made. """ # noqa: E501 - country_region: Optional[str] = None state: Optional[str] = None city: Optional[str] = None diff --git a/tracking/models/estimated_delivery_date_response_estimated_pickup.py b/tracking/models/estimated_delivery_date_response_estimated_pickup.py index 5eff390..78818c1 100644 --- a/tracking/models/estimated_delivery_date_response_estimated_pickup.py +++ b/tracking/models/estimated_delivery_date_response_estimated_pickup.py @@ -6,26 +6,21 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.estimated_delivery_date_response_estimated_pickup_order_processing_time import ( - EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime, -) +from tracking.models.estimated_delivery_date_response_estimated_pickup_order_processing_time import EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime class EstimatedDeliveryDateResponseEstimatedPickup(BaseModel): """ The local pickup time of the package.Either `pickup_time` or `estimated_pickup` is required. """ # noqa: E501 - order_time: Optional[str] = None order_cutoff_time: Optional[str] = None business_days: Optional[List[int]] = None - order_processing_time: Optional[ - EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime - ] = None + order_processing_time: Optional[EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime] = None pickup_time: Optional[str] = None def to_str(self, **kwargs) -> str: diff --git a/tracking/models/estimated_delivery_date_response_estimated_pickup_order_processing_time.py b/tracking/models/estimated_delivery_date_response_estimated_pickup_order_processing_time.py index e148aec..d82be85 100644 --- a/tracking/models/estimated_delivery_date_response_estimated_pickup_order_processing_time.py +++ b/tracking/models/estimated_delivery_date_response_estimated_pickup_order_processing_time.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime(BaseModel): """ EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime """ # noqa: E501 - unit: Optional[str] = None value: Optional[float] = None diff --git a/tracking/models/estimated_delivery_date_response_origin_address.py b/tracking/models/estimated_delivery_date_response_origin_address.py index 43e1af7..3c3514a 100644 --- a/tracking/models/estimated_delivery_date_response_origin_address.py +++ b/tracking/models/estimated_delivery_date_response_origin_address.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class EstimatedDeliveryDateResponseOriginAddress(BaseModel): """ The location from where the package is picked up by the carrier to be delivered to the final destination. """ # noqa: E501 - country_region: Optional[str] = None state: Optional[str] = None city: Optional[str] = None diff --git a/tracking/models/estimated_delivery_date_response_weight.py b/tracking/models/estimated_delivery_date_response_weight.py index 066ba12..b43822e 100644 --- a/tracking/models/estimated_delivery_date_response_weight.py +++ b/tracking/models/estimated_delivery_date_response_weight.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class EstimatedDeliveryDateResponseWeight(BaseModel): """ AfterShip uses this object to calculate the total weight of the order. """ # noqa: E501 - unit: Optional[str] = None value: Optional[float] = None diff --git a/tracking/models/get_courier_connections_by_id_response.py b/tracking/models/get_courier_connections_by_id_response.py index 75968eb..3758736 100644 --- a/tracking/models/get_courier_connections_by_id_response.py +++ b/tracking/models/get_courier_connections_by_id_response.py @@ -6,18 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.courier_connection import CourierConnection - class GetCourierConnectionsByIdResponse(BaseModel): """ This model represents user-created courier connection details. AfterShip will use this information to retrieve tracking updates from carriers based on the provided tracking numbers. """ - response_header: Dict[str, List[str]] = {} data: Optional[CourierConnection] = None @@ -36,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/get_courier_connections_response.py b/tracking/models/get_courier_connections_response.py index a900b27..275a141 100644 --- a/tracking/models/get_courier_connections_response.py +++ b/tracking/models/get_courier_connections_response.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.get_courier_connections_response_data import GetCourierConnectionsResponseData - class GetCourierConnectionsResponse(BaseModel): - """ """ - + """ + + """ response_header: Dict[str, List[str]] = {} data: Optional[GetCourierConnectionsResponseData] = None @@ -34,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/get_courier_connections_response_data.py b/tracking/models/get_courier_connections_response_data.py index e0cb997..204b088 100644 --- a/tracking/models/get_courier_connections_response_data.py +++ b/tracking/models/get_courier_connections_response_data.py @@ -6,13 +6,11 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.get_courier_connections_response_data_pagination import ( - GetCourierConnectionsResponseDataPagination, -) +from tracking.models.get_courier_connections_response_data_pagination import GetCourierConnectionsResponseDataPagination from tracking.models.courier_connection import CourierConnection @@ -20,7 +18,6 @@ class GetCourierConnectionsResponseData(BaseModel): """ GetCourierConnectionsResponseData """ # noqa: E501 - pagination: Optional[GetCourierConnectionsResponseDataPagination] = None courier_connections: Optional[List[CourierConnection]] = None diff --git a/tracking/models/get_courier_connections_response_data_pagination.py b/tracking/models/get_courier_connections_response_data_pagination.py index f7f719c..cec40f5 100644 --- a/tracking/models/get_courier_connections_response_data_pagination.py +++ b/tracking/models/get_courier_connections_response_data_pagination.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class GetCourierConnectionsResponseDataPagination(BaseModel): """ GetCourierConnectionsResponseDataPagination """ # noqa: E501 - total: Optional[int] = None next_cursor: Optional[str] = None has_next_page: Optional[bool] = None diff --git a/tracking/models/get_couriers_response.py b/tracking/models/get_couriers_response.py index 6fa96db..88df888 100644 --- a/tracking/models/get_couriers_response.py +++ b/tracking/models/get_couriers_response.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.get_couriers_response_data import GetCouriersResponseData - class GetCouriersResponse(BaseModel): - """ """ - + """ + + """ response_header: Dict[str, List[str]] = {} data: Optional[GetCouriersResponseData] = None @@ -34,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/get_couriers_response_data.py b/tracking/models/get_couriers_response_data.py index ed28b43..19d4a79 100644 --- a/tracking/models/get_couriers_response_data.py +++ b/tracking/models/get_couriers_response_data.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -17,7 +17,6 @@ class GetCouriersResponseData(BaseModel): """ GetCouriersResponseData """ # noqa: E501 - total: Optional[int] = None couriers: Optional[List[Courier]] = None diff --git a/tracking/models/get_tracking_by_id_response.py b/tracking/models/get_tracking_by_id_response.py index 3764a98..4579fc7 100644 --- a/tracking/models/get_tracking_by_id_response.py +++ b/tracking/models/get_tracking_by_id_response.py @@ -6,18 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.tracking import Tracking - class GetTrackingByIdResponse(BaseModel): """ - Object describes the tracking information.<div style="display:none; height: 0"></div> + Object describes the tracking information.<div style="visibility:hidden; height: 0"></div> """ - response_header: Dict[str, List[str]] = {} data: Optional[Tracking] = None @@ -36,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/get_trackings_response.py b/tracking/models/get_trackings_response.py index 034ec16..45bf078 100644 --- a/tracking/models/get_trackings_response.py +++ b/tracking/models/get_trackings_response.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.get_trackings_response_data import GetTrackingsResponseData - class GetTrackingsResponse(BaseModel): - """ """ - + """ + + """ response_header: Dict[str, List[str]] = {} data: Optional[GetTrackingsResponseData] = None @@ -34,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/get_trackings_response_data.py b/tracking/models/get_trackings_response_data.py index b2318bf..f9f4267 100644 --- a/tracking/models/get_trackings_response_data.py +++ b/tracking/models/get_trackings_response_data.py @@ -6,13 +6,11 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.get_trackings_response_data_pagination import ( - GetTrackingsResponseDataPagination, -) +from tracking.models.get_trackings_response_data_pagination import GetTrackingsResponseDataPagination from tracking.models.tracking import Tracking @@ -20,7 +18,6 @@ class GetTrackingsResponseData(BaseModel): """ GetTrackingsResponseData """ # noqa: E501 - pagination: Optional[GetTrackingsResponseDataPagination] = None trackings: Optional[List[Tracking]] = None diff --git a/tracking/models/get_trackings_response_data_pagination.py b/tracking/models/get_trackings_response_data_pagination.py index a39229b..a68e29e 100644 --- a/tracking/models/get_trackings_response_data_pagination.py +++ b/tracking/models/get_trackings_response_data_pagination.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class GetTrackingsResponseDataPagination(BaseModel): """ The Pagination holds the information for the pagination when the response contains multiple objects. """ # noqa: E501 - total: Optional[int] = None next_cursor: Optional[str] = None has_next_page: Optional[bool] = None diff --git a/tracking/models/mark_tracking_completed_by_id_request.py b/tracking/models/mark_tracking_completed_by_id_request.py index a7fbbfb..22f4df1 100644 --- a/tracking/models/mark_tracking_completed_by_id_request.py +++ b/tracking/models/mark_tracking_completed_by_id_request.py @@ -6,20 +6,17 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.mark_tracking_completed_by_id_request_reason import ( - MarkTrackingCompletedByIdRequestReason, -) +from tracking.models.mark_tracking_completed_by_id_request_reason import MarkTrackingCompletedByIdRequestReason class MarkTrackingCompletedByIdRequest(BaseModel): """ MarkTrackingCompletedByIdRequest """ # noqa: E501 - reason: Optional[MarkTrackingCompletedByIdRequestReason] = None event_datetime: Optional[str] = None diff --git a/tracking/models/mark_tracking_completed_by_id_request_reason.py b/tracking/models/mark_tracking_completed_by_id_request_reason.py index b6acf4f..f0549b1 100644 --- a/tracking/models/mark_tracking_completed_by_id_request_reason.py +++ b/tracking/models/mark_tracking_completed_by_id_request_reason.py @@ -13,7 +13,6 @@ class MarkTrackingCompletedByIdRequestReason(Enum): allowed enum values """ - DELIVERED = "DELIVERED" LOST = "LOST" RETURNED_TO_SENDER = "RETURNED_TO_SENDER" diff --git a/tracking/models/mark_tracking_completed_by_id_response.py b/tracking/models/mark_tracking_completed_by_id_response.py index bcf64ea..9e61705 100644 --- a/tracking/models/mark_tracking_completed_by_id_response.py +++ b/tracking/models/mark_tracking_completed_by_id_response.py @@ -6,18 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.tracking import Tracking - class MarkTrackingCompletedByIdResponse(BaseModel): """ - Object describes the tracking information.<div style="display:none; height: 0"></div> + Object describes the tracking information.<div style="visibility:hidden; height: 0"></div> """ - response_header: Dict[str, List[str]] = {} data: Optional[Tracking] = None @@ -36,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/meta.py b/tracking/models/meta.py index fd69610..c3afbe2 100644 --- a/tracking/models/meta.py +++ b/tracking/models/meta.py @@ -6,8 +6,8 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.meta_type import MetaType @@ -17,7 +17,6 @@ class Meta(BaseModel): """ Meta data """ # noqa: E501 - code: Optional[int] = None message: Optional[str] = None type: Optional[MetaType] = None diff --git a/tracking/models/meta_type.py b/tracking/models/meta_type.py index e03a71d..0105262 100644 --- a/tracking/models/meta_type.py +++ b/tracking/models/meta_type.py @@ -13,7 +13,6 @@ class MetaType(Enum): allowed enum values """ - BAD_REQUEST = "BadRequest" UNAUTHORIZED = "Unauthorized" FORBIDDEN = "Forbidden" diff --git a/tracking/models/post_courier_connections_request.py b/tracking/models/post_courier_connections_request.py index e1e3c2a..ced88e3 100644 --- a/tracking/models/post_courier_connections_request.py +++ b/tracking/models/post_courier_connections_request.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class PostCourierConnectionsRequest(BaseModel): """ PostCourierConnectionsRequest """ # noqa: E501 - courier_slug: Optional[str] = None credentials: Optional[dict] = None diff --git a/tracking/models/post_courier_connections_response.py b/tracking/models/post_courier_connections_response.py index afb4af9..973d597 100644 --- a/tracking/models/post_courier_connections_response.py +++ b/tracking/models/post_courier_connections_response.py @@ -6,18 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.courier_connection import CourierConnection - class PostCourierConnectionsResponse(BaseModel): """ This model represents user-created courier connection details. AfterShip will use this information to retrieve tracking updates from carriers based on the provided tracking numbers. """ - response_header: Dict[str, List[str]] = {} data: Optional[CourierConnection] = None @@ -36,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/predict_batch_request.py b/tracking/models/predict_batch_request.py index 2812707..6c99305 100644 --- a/tracking/models/predict_batch_request.py +++ b/tracking/models/predict_batch_request.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -17,7 +17,6 @@ class PredictBatchRequest(BaseModel): """ PredictBatchRequest """ # noqa: E501 - estimated_delivery_dates: Optional[List[EstimatedDeliveryDateRequest]] = None def to_str(self, **kwargs) -> str: diff --git a/tracking/models/predict_batch_response.py b/tracking/models/predict_batch_response.py index dc0161a..cccf680 100644 --- a/tracking/models/predict_batch_response.py +++ b/tracking/models/predict_batch_response.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.predict_batch_response_data import PredictBatchResponseData - class PredictBatchResponse(BaseModel): - """ """ - + """ + + """ response_header: Dict[str, List[str]] = {} data: Optional[PredictBatchResponseData] = None @@ -34,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/predict_batch_response_data.py b/tracking/models/predict_batch_response_data.py index cea29ef..b535f90 100644 --- a/tracking/models/predict_batch_response_data.py +++ b/tracking/models/predict_batch_response_data.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -17,7 +17,6 @@ class PredictBatchResponseData(BaseModel): """ PredictBatchResponseData """ # noqa: E501 - estimated_delivery_dates: Optional[List[EstimatedDeliveryDateResponse]] = None def to_str(self, **kwargs) -> str: diff --git a/tracking/models/predict_response.py b/tracking/models/predict_response.py index 2ca0dc0..f33bd53 100644 --- a/tracking/models/predict_response.py +++ b/tracking/models/predict_response.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.estimated_delivery_date_response import EstimatedDeliveryDateResponse - class PredictResponse(BaseModel): - """ """ - + """ + + """ response_header: Dict[str, List[str]] = {} data: Optional[EstimatedDeliveryDateResponse] = None @@ -34,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/put_courier_connections_by_id_request.py b/tracking/models/put_courier_connections_by_id_request.py index 75eb2b3..01c979f 100644 --- a/tracking/models/put_courier_connections_by_id_request.py +++ b/tracking/models/put_courier_connections_by_id_request.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class PutCourierConnectionsByIdRequest(BaseModel): """ PutCourierConnectionsByIdRequest """ # noqa: E501 - credentials: Optional[dict] = None def to_str(self, **kwargs) -> str: diff --git a/tracking/models/put_courier_connections_by_id_response.py b/tracking/models/put_courier_connections_by_id_response.py index ee736d3..0898b2f 100644 --- a/tracking/models/put_courier_connections_by_id_response.py +++ b/tracking/models/put_courier_connections_by_id_response.py @@ -6,18 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.courier_connection import CourierConnection - class PutCourierConnectionsByIdResponse(BaseModel): """ This model represents user-created courier connection details. AfterShip will use this information to retrieve tracking updates from carriers based on the provided tracking numbers. """ - response_header: Dict[str, List[str]] = {} data: Optional[CourierConnection] = None @@ -36,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/retrack_tracking_by_id_response.py b/tracking/models/retrack_tracking_by_id_response.py index e05f678..af81cce 100644 --- a/tracking/models/retrack_tracking_by_id_response.py +++ b/tracking/models/retrack_tracking_by_id_response.py @@ -6,18 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.tracking import Tracking - class RetrackTrackingByIdResponse(BaseModel): """ - Object describes the tracking information.<div style="display:none; height: 0"></div> + Object describes the tracking information.<div style="visibility:hidden; height: 0"></div> """ - response_header: Dict[str, List[str]] = {} data: Optional[Tracking] = None @@ -36,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/models/tag.py b/tracking/models/tag.py index 33d6e39..417b017 100644 --- a/tracking/models/tag.py +++ b/tracking/models/tag.py @@ -13,7 +13,6 @@ class Tag(Enum): allowed enum values """ - PENDING = "Pending" INFO_RECEIVED = "InfoReceived" IN_TRANSIT = "InTransit" diff --git a/tracking/models/tracking.py b/tracking/models/tracking.py index 98b5d1b..119d972 100644 --- a/tracking/models/tracking.py +++ b/tracking/models/tracking.py @@ -6,23 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.tracking_courier_estimated_delivery_date import ( - TrackingCourierEstimatedDeliveryDate, -) +from tracking.models.tracking_courier_estimated_delivery_date import TrackingCourierEstimatedDeliveryDate from tracking.models.tracking_shipment_weight import TrackingShipmentWeight +from tracking.models.tracking_shipment_dimensions import TrackingShipmentDimensions from tracking.models.tag import Tag from tracking.models.checkpoint import Checkpoint from tracking.models.tracking_order_promised_delivery_date import TrackingOrderPromisedDeliveryDate -from tracking.models.tracking_aftership_estimated_delivery_date import ( - TrackingAftershipEstimatedDeliveryDate, -) -from tracking.models.tracking_custom_estimated_delivery_date import ( - TrackingCustomEstimatedDeliveryDate, -) +from tracking.models.tracking_aftership_estimated_delivery_date import TrackingAftershipEstimatedDeliveryDate +from tracking.models.tracking_custom_estimated_delivery_date import TrackingCustomEstimatedDeliveryDate from tracking.models.tracking_first_estimated_delivery import TrackingFirstEstimatedDelivery from tracking.models.tracking_latest_estimated_delivery import TrackingLatestEstimatedDelivery from tracking.models.tracking_carbon_emissions import TrackingCarbonEmissions @@ -30,13 +25,17 @@ from tracking.models.tracking_first_mile import TrackingFirstMile from tracking.models.tracking_last_mile import TrackingLastMile from tracking.models.tracking_customers import TrackingCustomers +from tracking.models.tracking_proof_of_delivery import TrackingProofOfDelivery +from tracking.models.tracking_multi_piece_info import TrackingMultiPieceInfo +from tracking.models.tracking_shipment_direction import TrackingShipmentDirection +from tracking.models.tracking_return_shipment import TrackingReturnShipment +from tracking.models.tracking_forward_shipment import TrackingForwardShipment class Tracking(BaseModel): """ - Object describes the tracking information.
+ Object describes the tracking information.
""" # noqa: E501 - id: Optional[str] = None legacy_id: Optional[str] = None created_at: Optional[str] = None @@ -67,6 +66,7 @@ class Tracking(BaseModel): shipment_delivery_date: Optional[str] = None shipment_type: Optional[str] = None shipment_weight: Optional[TrackingShipmentWeight] = None + shipment_dimensions: Optional[TrackingShipmentDimensions] = None signed_by: Optional[str] = None source: Optional[str] = None tag: Optional[Tag] = None @@ -111,6 +111,11 @@ class Tracking(BaseModel): first_mile: Optional[TrackingFirstMile] = None last_mile: Optional[TrackingLastMile] = None customers: Optional[List[TrackingCustomers]] = None + proof_of_delivery: Optional[List[TrackingProofOfDelivery]] = None + multi_piece_info: Optional[TrackingMultiPieceInfo] = None + shipment_direction: Optional[TrackingShipmentDirection] = None + return_shipment: Optional[TrackingReturnShipment] = None + forward_shipment: Optional[TrackingForwardShipment] = None def to_str(self, **kwargs) -> str: return pprint.pformat(self.model_dump(**kwargs)) diff --git a/tracking/models/tracking_aftership_estimated_delivery_date.py b/tracking/models/tracking_aftership_estimated_delivery_date.py index 4ca6167..09ea507 100644 --- a/tracking/models/tracking_aftership_estimated_delivery_date.py +++ b/tracking/models/tracking_aftership_estimated_delivery_date.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class TrackingAftershipEstimatedDeliveryDate(BaseModel): """ The estimated delivery date of the shipment provided by AfterShip’s AI and shown to the recipients. It uses the format `YYYY-MM-DD` based on the shipment recipient’s timezone. """ # noqa: E501 - estimated_delivery_date: Optional[str] = None confidence_code: Optional[float] = None estimated_delivery_date_min: Optional[str] = None diff --git a/tracking/models/tracking_carbon_emissions.py b/tracking/models/tracking_carbon_emissions.py index 27b04bd..915b764 100644 --- a/tracking/models/tracking_carbon_emissions.py +++ b/tracking/models/tracking_carbon_emissions.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class TrackingCarbonEmissions(BaseModel): """ The model contains the total amount of carbon emissions generated by the shipment. - AfterShip will provide this data only when it is available, and its availability is contingent upon the location and weight information that AfterShip can obtain.- The values will be accessible solely for shipments that have been successfully delivered. However, in the event of a shipping update after the delivery status has been achieved, the value may change.- It’s a paid service and only for Tracking Enterprise users, please contact your customer success manager if you want to know more. """ # noqa: E501 - unit: Optional[str] = None value: Optional[float] = None diff --git a/tracking/models/tracking_courier_estimated_delivery_date.py b/tracking/models/tracking_courier_estimated_delivery_date.py index 223a3b5..23c6482 100644 --- a/tracking/models/tracking_courier_estimated_delivery_date.py +++ b/tracking/models/tracking_courier_estimated_delivery_date.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class TrackingCourierEstimatedDeliveryDate(BaseModel): """ The field contains the estimated delivery date provided by the carrier. """ # noqa: E501 - estimated_delivery_date: Optional[str] = None estimated_delivery_date_min: Optional[str] = None estimated_delivery_date_max: Optional[str] = None diff --git a/tracking/models/tracking_custom_estimated_delivery_date.py b/tracking/models/tracking_custom_estimated_delivery_date.py index 2569727..1a3975b 100644 --- a/tracking/models/tracking_custom_estimated_delivery_date.py +++ b/tracking/models/tracking_custom_estimated_delivery_date.py @@ -6,20 +6,17 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.tracking_custom_estimated_delivery_date_type import ( - TrackingCustomEstimatedDeliveryDateType, -) +from tracking.models.tracking_custom_estimated_delivery_date_type import TrackingCustomEstimatedDeliveryDateType class TrackingCustomEstimatedDeliveryDate(BaseModel): """ Estimated delivery time of the shipment based on your . It uses the format `YYYY-MM-DD` based on the shipment recipient’s timezone. """ # noqa: E501 - type: Optional[TrackingCustomEstimatedDeliveryDateType] = None datetime: Optional[str] = None datetime_min: Optional[str] = None diff --git a/tracking/models/tracking_custom_estimated_delivery_date_type.py b/tracking/models/tracking_custom_estimated_delivery_date_type.py index 60f6f50..8956245 100644 --- a/tracking/models/tracking_custom_estimated_delivery_date_type.py +++ b/tracking/models/tracking_custom_estimated_delivery_date_type.py @@ -13,6 +13,5 @@ class TrackingCustomEstimatedDeliveryDateType(Enum): allowed enum values """ - RANGE = "range" SPECIFIC = "specific" diff --git a/tracking/models/tracking_customers.py b/tracking/models/tracking_customers.py index a975fed..92eccf0 100644 --- a/tracking/models/tracking_customers.py +++ b/tracking/models/tracking_customers.py @@ -6,21 +6,22 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class TrackingCustomers(BaseModel): """ TrackingCustomers """ # noqa: E501 - role: Optional[str] = None name: Optional[str] = None phone_number: Optional[str] = None email: Optional[str] = None language: Optional[str] = None + id: Optional[str] = None def to_str(self, **kwargs) -> str: return pprint.pformat(self.model_dump(**kwargs)) diff --git a/tracking/models/tracking_first_estimated_delivery.py b/tracking/models/tracking_first_estimated_delivery.py index ef08524..169d23a 100644 --- a/tracking/models/tracking_first_estimated_delivery.py +++ b/tracking/models/tracking_first_estimated_delivery.py @@ -6,23 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.tracking_first_estimated_delivery_type import ( - TrackingFirstEstimatedDeliveryType, -) -from tracking.models.tracking_first_estimated_delivery_source import ( - TrackingFirstEstimatedDeliverySource, -) +from tracking.models.tracking_first_estimated_delivery_type import TrackingFirstEstimatedDeliveryType +from tracking.models.tracking_first_estimated_delivery_source import TrackingFirstEstimatedDeliverySource class TrackingFirstEstimatedDelivery(BaseModel): """ The shipment’s original estimated delivery date. It could be provided by the carrier, AfterShip AI, or based on your custom settings. The format of carrier EDDs may differ depending on how the carrier provides it:- YYYY-MM-DD- YYYY-MM-DDTHH:mm:ss- YYYY-MM-DDTHH:mm:ssZ AfterShip AI and custom EDDs always use the format `YYYY-MM-DD`. All EDDs use the shipment recipient’s timezone. """ # noqa: E501 - type: Optional[TrackingFirstEstimatedDeliveryType] = None source: Optional[TrackingFirstEstimatedDeliverySource] = None datetime: Optional[str] = None diff --git a/tracking/models/tracking_first_estimated_delivery_source.py b/tracking/models/tracking_first_estimated_delivery_source.py index 6aeca6a..1556bad 100644 --- a/tracking/models/tracking_first_estimated_delivery_source.py +++ b/tracking/models/tracking_first_estimated_delivery_source.py @@ -13,7 +13,6 @@ class TrackingFirstEstimatedDeliverySource(Enum): allowed enum values """ - CARRIER_EDD = "Carrier EDD" AFTER_SHIP_EDD = "AfterShip EDD" CUSTOM_EDD = "Custom EDD" diff --git a/tracking/models/tracking_first_estimated_delivery_type.py b/tracking/models/tracking_first_estimated_delivery_type.py index 3ed8494..01f4e51 100644 --- a/tracking/models/tracking_first_estimated_delivery_type.py +++ b/tracking/models/tracking_first_estimated_delivery_type.py @@ -13,6 +13,5 @@ class TrackingFirstEstimatedDeliveryType(Enum): allowed enum values """ - RANGE = "range" SPECIFIC = "specific" diff --git a/tracking/models/tracking_first_mile.py b/tracking/models/tracking_first_mile.py index 7a03d19..97bbe46 100644 --- a/tracking/models/tracking_first_mile.py +++ b/tracking/models/tracking_first_mile.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class TrackingFirstMile(BaseModel): """ - The field contains information about the first leg of the shipping starting from the carrier picking up the shipment from the shipper to the point where they hand it over to the last-mile carrier. Once AfterShip detects the shipment is multi-leg, we will populate the first-mile information under this object. + The field contains information about the first leg of the shipping starting from the carrier picking up the shipment from the shipper to the point where they hand it over to the last-mile carrier. Once AfterShip detects the shipment is multi-leg, we will populate the first-mile information under this object. """ # noqa: E501 - tracking_number: Optional[str] = None slug: Optional[str] = None transit_time: Optional[int] = None diff --git a/tracking/models/tracking_forward_shipment.py b/tracking/models/tracking_forward_shipment.py new file mode 100644 index 0000000..dfebb77 --- /dev/null +++ b/tracking/models/tracking_forward_shipment.py @@ -0,0 +1,36 @@ +# coding: utf-8 +# +# This code was auto generated by AfterShip SDK Generator. +# Do not edit the class manually. + +from __future__ import annotations +import pprint + +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional +from typing_extensions import Self + + + +class TrackingForwardShipment(BaseModel): + """ + The original outbound shipment linked to this return. Use this to trace a return back to its source delivery.This field is only present when `shipment_direction = "return"` and AfterShip has detected a linked forward shipment. + """ # noqa: E501 + id: Optional[str] = None + + def to_str(self, **kwargs) -> str: + return pprint.pformat(self.model_dump(**kwargs)) + + def to_json(self, **kwargs) -> str: + return self.model_dump_json(**kwargs) + + def to_dict(self, **kwargs) -> Dict[str, Any]: + return self.model_dump(**kwargs) + + @classmethod + def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: + return cls.model_validate_json(json_str, **kwargs) + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/tracking_last_mile.py b/tracking/models/tracking_last_mile.py index 49c79f3..eb3cb41 100644 --- a/tracking/models/tracking_last_mile.py +++ b/tracking/models/tracking_last_mile.py @@ -6,8 +6,8 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.tracking_last_mile_source import TrackingLastMileSource @@ -17,7 +17,6 @@ class TrackingLastMile(BaseModel): """ This field contains information about the last leg of the shipment, starting from the carrier who hands it over to the last-mile carrier, all the way to delivery. Once AfterShip detects that the shipment involves multiple legs and identifies the last-mile carrier, we will populate the last-mile carrier information in this object. Alternatively, the user can provide this information in this field to specify the last-mile carrier, which is helpful if AfterShip is unable to detect it automatically. """ # noqa: E501 - tracking_number: Optional[str] = None slug: Optional[str] = None transit_time: Optional[int] = None diff --git a/tracking/models/tracking_last_mile_source.py b/tracking/models/tracking_last_mile_source.py index 6d04ea8..b7b1df1 100644 --- a/tracking/models/tracking_last_mile_source.py +++ b/tracking/models/tracking_last_mile_source.py @@ -13,6 +13,5 @@ class TrackingLastMileSource(Enum): allowed enum values """ - SYSTEM = "system" USER = "user" diff --git a/tracking/models/tracking_latest_estimated_delivery.py b/tracking/models/tracking_latest_estimated_delivery.py index 30d0c8a..fdfd729 100644 --- a/tracking/models/tracking_latest_estimated_delivery.py +++ b/tracking/models/tracking_latest_estimated_delivery.py @@ -6,23 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.tracking_latest_estimated_delivery_type import ( - TrackingLatestEstimatedDeliveryType, -) -from tracking.models.tracking_latest_estimated_delivery_source import ( - TrackingLatestEstimatedDeliverySource, -) +from tracking.models.tracking_latest_estimated_delivery_type import TrackingLatestEstimatedDeliveryType +from tracking.models.tracking_latest_estimated_delivery_source import TrackingLatestEstimatedDeliverySource class TrackingLatestEstimatedDelivery(BaseModel): """ The most recently calculated estimated delivery date. It could be provided by the carrier, AfterShip AI, or based on your custom settings. The format of carrier EDDs may differ depending on how the carrier provides it:- YYYY-MM-DD- YYYY-MM-DDTHH:mm:ss- YYYY-MM-DDTHH:mm:ssZ AfterShip AI and custom EDDs always use the format `YYYY-MM-DD`. All EDDs use the shipment recipient’s timezone. """ # noqa: E501 - type: Optional[TrackingLatestEstimatedDeliveryType] = None source: Optional[TrackingLatestEstimatedDeliverySource] = None datetime: Optional[str] = None diff --git a/tracking/models/tracking_latest_estimated_delivery_source.py b/tracking/models/tracking_latest_estimated_delivery_source.py index 080b55d..f0d0167 100644 --- a/tracking/models/tracking_latest_estimated_delivery_source.py +++ b/tracking/models/tracking_latest_estimated_delivery_source.py @@ -13,7 +13,6 @@ class TrackingLatestEstimatedDeliverySource(Enum): allowed enum values """ - CARRIER_EDD = "Carrier EDD" AFTER_SHIP_EDD = "AfterShip EDD" CUSTOM_EDD = "Custom EDD" diff --git a/tracking/models/tracking_latest_estimated_delivery_type.py b/tracking/models/tracking_latest_estimated_delivery_type.py index 676d5f4..5e6a9cb 100644 --- a/tracking/models/tracking_latest_estimated_delivery_type.py +++ b/tracking/models/tracking_latest_estimated_delivery_type.py @@ -13,6 +13,5 @@ class TrackingLatestEstimatedDeliveryType(Enum): allowed enum values """ - RANGE = "range" SPECIFIC = "specific" diff --git a/tracking/models/tracking_multi_piece_info.py b/tracking/models/tracking_multi_piece_info.py new file mode 100644 index 0000000..1d29636 --- /dev/null +++ b/tracking/models/tracking_multi_piece_info.py @@ -0,0 +1,39 @@ +# coding: utf-8 +# +# This code was auto generated by AfterShip SDK Generator. +# Do not edit the class manually. + +from __future__ import annotations +import pprint + +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional +from typing_extensions import Self + +from tracking.models.tracking_multi_piece_info_type import TrackingMultiPieceInfoType +from tracking.models.tracking_multi_piece_info_pieces import TrackingMultiPieceInfoPieces + + +class TrackingMultiPieceInfo(BaseModel): + """ + Multi-piece shipment refers to a scenario where a single shipment order is fulfilled by multiple physical packages. Each piece has its own carrier-assigned tracking number, but all pieces belong to the same shipment. This commonly occurs when an order is too large to fit in one box, or when items are packed separately for handling reasons.This field contains multi-piece shipment metadata describing a group of packages that belong to the same shipment.This field returns a value only when your subscription plan includes a multi-piece feature. To enable, go to . + """ # noqa: E501 + type: Optional[TrackingMultiPieceInfoType] = None + pieces: Optional[List[TrackingMultiPieceInfoPieces]] = None + + def to_str(self, **kwargs) -> str: + return pprint.pformat(self.model_dump(**kwargs)) + + def to_json(self, **kwargs) -> str: + return self.model_dump_json(**kwargs) + + def to_dict(self, **kwargs) -> Dict[str, Any]: + return self.model_dump(**kwargs) + + @classmethod + def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: + return cls.model_validate_json(json_str, **kwargs) + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/tracking_multi_piece_info_pieces.py b/tracking/models/tracking_multi_piece_info_pieces.py new file mode 100644 index 0000000..46ea208 --- /dev/null +++ b/tracking/models/tracking_multi_piece_info_pieces.py @@ -0,0 +1,40 @@ +# coding: utf-8 +# +# This code was auto generated by AfterShip SDK Generator. +# Do not edit the class manually. + +from __future__ import annotations +import pprint + +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional +from typing_extensions import Self + +from tracking.models.tracking_multi_piece_info_pieces_type import TrackingMultiPieceInfoPiecesType + + +class TrackingMultiPieceInfoPieces(BaseModel): + """ + TrackingMultiPieceInfoPieces + """ # noqa: E501 + tracking_id: Optional[str] = None + tracking_number: Optional[str] = None + type: Optional[TrackingMultiPieceInfoPiecesType] = None + trackable: Optional[bool] = None + + def to_str(self, **kwargs) -> str: + return pprint.pformat(self.model_dump(**kwargs)) + + def to_json(self, **kwargs) -> str: + return self.model_dump_json(**kwargs) + + def to_dict(self, **kwargs) -> Dict[str, Any]: + return self.model_dump(**kwargs) + + @classmethod + def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: + return cls.model_validate_json(json_str, **kwargs) + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/tracking_multi_piece_info_pieces_type.py b/tracking/models/tracking_multi_piece_info_pieces_type.py new file mode 100644 index 0000000..d151230 --- /dev/null +++ b/tracking/models/tracking_multi_piece_info_pieces_type.py @@ -0,0 +1,17 @@ +# coding: utf-8 +# +# This code was auto generated by AfterShip SDK Generator. +# Do not edit the class manually. + +from enum import Enum, unique + + +@unique +class TrackingMultiPieceInfoPiecesType(Enum): + """ + Type of the piece within the MPS: `master` or `child`. + + allowed enum values + """ + MASTER = "master" + CHILD = "child" diff --git a/tracking/models/tracking_multi_piece_info_type.py b/tracking/models/tracking_multi_piece_info_type.py new file mode 100644 index 0000000..080a473 --- /dev/null +++ b/tracking/models/tracking_multi_piece_info_type.py @@ -0,0 +1,17 @@ +# coding: utf-8 +# +# This code was auto generated by AfterShip SDK Generator. +# Do not edit the class manually. + +from enum import Enum, unique + + +@unique +class TrackingMultiPieceInfoType(Enum): + """ + Indicates the role of the current tracking object within the multi-piece shipment.Possible values:- `master`: The main tracking number representing the entire shipment. It may not always exist.- `child`: A sub-tracking number belonging to one of the pieces in the shipment. + + allowed enum values + """ + MASTER = "master" + CHILD = "child" diff --git a/tracking/models/tracking_order_promised_delivery_date.py b/tracking/models/tracking_order_promised_delivery_date.py index 95d1689..d6f018b 100644 --- a/tracking/models/tracking_order_promised_delivery_date.py +++ b/tracking/models/tracking_order_promised_delivery_date.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class TrackingOrderPromisedDeliveryDate(BaseModel): """ The promised delivery date of the order in shipment recipient’s timezone. """ # noqa: E501 - promised_delivery_date: Optional[str] = None promised_delivery_date_min: Optional[str] = None promised_delivery_date_max: Optional[str] = None diff --git a/tracking/models/tracking_proof_of_delivery.py b/tracking/models/tracking_proof_of_delivery.py new file mode 100644 index 0000000..08f387e --- /dev/null +++ b/tracking/models/tracking_proof_of_delivery.py @@ -0,0 +1,37 @@ +# coding: utf-8 +# +# This code was auto generated by AfterShip SDK Generator. +# Do not edit the class manually. + +from __future__ import annotations +import pprint + +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional +from typing_extensions import Self + + + +class TrackingProofOfDelivery(BaseModel): + """ + TrackingProofOfDelivery + """ # noqa: E501 + type: Optional[str] = None + url: Optional[str] = None + + def to_str(self, **kwargs) -> str: + return pprint.pformat(self.model_dump(**kwargs)) + + def to_json(self, **kwargs) -> str: + return self.model_dump_json(**kwargs) + + def to_dict(self, **kwargs) -> Dict[str, Any]: + return self.model_dump(**kwargs) + + @classmethod + def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: + return cls.model_validate_json(json_str, **kwargs) + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/tracking_response.py b/tracking/models/tracking_response.py index 44fd8d9..41a0d46 100644 --- a/tracking/models/tracking_response.py +++ b/tracking/models/tracking_response.py @@ -6,8 +6,8 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.meta import Meta @@ -18,7 +18,6 @@ class TrackingResponse(BaseModel): """ Tracking response for returning single tracking """ # noqa: E501 - meta: Optional[Meta] = None data: Optional[Tracking] = None diff --git a/tracking/models/tracking_response_for_get_trackings.py b/tracking/models/tracking_response_for_get_trackings.py index 61ccb63..afda145 100644 --- a/tracking/models/tracking_response_for_get_trackings.py +++ b/tracking/models/tracking_response_for_get_trackings.py @@ -6,21 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.meta import Meta -from tracking.models.tracking_response_for_get_trackings_data import ( - TrackingResponseForGetTrackingsData, -) +from tracking.models.tracking_response_for_get_trackings_data import TrackingResponseForGetTrackingsData class TrackingResponseForGetTrackings(BaseModel): """ Tracking response for getting tracking """ # noqa: E501 - meta: Optional[Meta] = None data: Optional[TrackingResponseForGetTrackingsData] = None diff --git a/tracking/models/tracking_response_for_get_trackings_data.py b/tracking/models/tracking_response_for_get_trackings_data.py index da1e4d3..fc84fda 100644 --- a/tracking/models/tracking_response_for_get_trackings_data.py +++ b/tracking/models/tracking_response_for_get_trackings_data.py @@ -6,13 +6,11 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.tracking_response_for_get_trackings_data_pagination import ( - TrackingResponseForGetTrackingsDataPagination, -) +from tracking.models.tracking_response_for_get_trackings_data_pagination import TrackingResponseForGetTrackingsDataPagination from tracking.models.tracking import Tracking @@ -20,7 +18,6 @@ class TrackingResponseForGetTrackingsData(BaseModel): """ TrackingResponseForGetTrackingsData """ # noqa: E501 - pagination: Optional[TrackingResponseForGetTrackingsDataPagination] = None trackings: Optional[List[Tracking]] = None diff --git a/tracking/models/tracking_response_for_get_trackings_data_pagination.py b/tracking/models/tracking_response_for_get_trackings_data_pagination.py index 0f244de..ae887bb 100644 --- a/tracking/models/tracking_response_for_get_trackings_data_pagination.py +++ b/tracking/models/tracking_response_for_get_trackings_data_pagination.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class TrackingResponseForGetTrackingsDataPagination(BaseModel): """ The Pagination holds the information for the pagination when the response contains multiple objects. """ # noqa: E501 - total: Optional[int] = None next_cursor: Optional[str] = None has_next_page: Optional[bool] = None diff --git a/tracking/models/tracking_return_shipment.py b/tracking/models/tracking_return_shipment.py new file mode 100644 index 0000000..540fc30 --- /dev/null +++ b/tracking/models/tracking_return_shipment.py @@ -0,0 +1,38 @@ +# coding: utf-8 +# +# This code was auto generated by AfterShip SDK Generator. +# Do not edit the class manually. + +from __future__ import annotations +import pprint + +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional +from typing_extensions import Self + + + +class TrackingReturnShipment(BaseModel): + """ + The associated return shipment linked to the current outbound shipment.This field is only present when `shipment_direction = "forward"` and AfterShip has detected a linked return shipment. + """ # noqa: E501 + id: Optional[str] = None + tracking_number: Optional[str] = None + slug: Optional[str] = None + + def to_str(self, **kwargs) -> str: + return pprint.pformat(self.model_dump(**kwargs)) + + def to_json(self, **kwargs) -> str: + return self.model_dump_json(**kwargs) + + def to_dict(self, **kwargs) -> Dict[str, Any]: + return self.model_dump(**kwargs) + + @classmethod + def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: + return cls.model_validate_json(json_str, **kwargs) + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/tracking_shipment_dimensions.py b/tracking/models/tracking_shipment_dimensions.py new file mode 100644 index 0000000..3cb1775 --- /dev/null +++ b/tracking/models/tracking_shipment_dimensions.py @@ -0,0 +1,39 @@ +# coding: utf-8 +# +# This code was auto generated by AfterShip SDK Generator. +# Do not edit the class manually. + +from __future__ import annotations +import pprint + +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional +from typing_extensions import Self + + + +class TrackingShipmentDimensions(BaseModel): + """ + Physical dimensions of the package (length, width and height). + """ # noqa: E501 + unit: Optional[str] = None + length: Optional[float] = None + width: Optional[float] = None + height: Optional[float] = None + + def to_str(self, **kwargs) -> str: + return pprint.pformat(self.model_dump(**kwargs)) + + def to_json(self, **kwargs) -> str: + return self.model_dump_json(**kwargs) + + def to_dict(self, **kwargs) -> Dict[str, Any]: + return self.model_dump(**kwargs) + + @classmethod + def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: + return cls.model_validate_json(json_str, **kwargs) + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/tracking_shipment_direction.py b/tracking/models/tracking_shipment_direction.py new file mode 100644 index 0000000..5603500 --- /dev/null +++ b/tracking/models/tracking_shipment_direction.py @@ -0,0 +1,18 @@ +# coding: utf-8 +# +# This code was auto generated by AfterShip SDK Generator. +# Do not edit the class manually. + +from enum import Enum, unique + + +@unique +class TrackingShipmentDirection(Enum): + """ + Indicates the business direction of the shipment in the e-commerce fulfillment lifecycle.Possible values:- `forward`: A forward (outbound-to-customer) shipment created for order fulfillment.- `return`: A return (customer-to-merchant) shipment created for after-sales return or exchange.This field is populated in either of the following cases:1. You explicitly provided it when creating the tracking.2. AfterShip automatically detected a linked forward or return shipment.It also determines which related shipment object (`forward_shipment` or `return_shipment`) may appear in the response. + + allowed enum values + """ + FORWARD = "forward" + RETURN = "return" + NULL = "null" diff --git a/tracking/models/tracking_shipment_weight.py b/tracking/models/tracking_shipment_weight.py index 6d3e716..31c424f 100644 --- a/tracking/models/tracking_shipment_weight.py +++ b/tracking/models/tracking_shipment_weight.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class TrackingShipmentWeight(BaseModel): """ The shipment_weight field represents the total weight of the shipment. In scenarios where the carrier does not provide this information, you can provide the weight to AfterShip. We will prioritize the data provided by the carrier, if available. The shipment weight will be included in the Response and accessed through the GET API, Webhook, and CSV export. It will also be displayed on the AfterShip Tracking admin. Additionally, it plays a significant role in error-free shipment handling and carbon emission calculations, ensuring accurate and informed decision-making """ # noqa: E501 - unit: Optional[str] = None value: Optional[float] = None diff --git a/tracking/models/tracking_signature_requirement.py b/tracking/models/tracking_signature_requirement.py index 426ab12..8622218 100644 --- a/tracking/models/tracking_signature_requirement.py +++ b/tracking/models/tracking_signature_requirement.py @@ -13,7 +13,6 @@ class TrackingSignatureRequirement(Enum): allowed enum values """ - SIGNATURE_REQUIRED = "signature_required" ADULT_SIGNATURE_REQUIRED = "adult_signature_required" INDIRECT_SIGNATURE_REQUIRED = "indirect_signature_required" diff --git a/tracking/models/update_tracking_by_id_request.py b/tracking/models/update_tracking_by_id_request.py index c902a6c..8decd8b 100644 --- a/tracking/models/update_tracking_by_id_request.py +++ b/tracking/models/update_tracking_by_id_request.py @@ -6,35 +6,27 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.update_tracking_by_id_request_order_promised_delivery_date import ( - UpdateTrackingByIdRequestOrderPromisedDeliveryDate, -) -from tracking.models.update_tracking_by_id_request_delivery_type import ( - UpdateTrackingByIdRequestDeliveryType, -) -from tracking.models.update_tracking_by_id_request_customers import ( - UpdateTrackingByIdRequestCustomers, -) +from tracking.models.update_tracking_by_id_request_order_promised_delivery_date import UpdateTrackingByIdRequestOrderPromisedDeliveryDate +from tracking.models.update_tracking_by_id_request_delivery_type import UpdateTrackingByIdRequestDeliveryType +from tracking.models.update_tracking_by_id_request_customers import UpdateTrackingByIdRequestCustomers +from tracking.models.update_tracking_by_id_request_shipment_direction import UpdateTrackingByIdRequestShipmentDirection class UpdateTrackingByIdRequest(BaseModel): """ UpdateTrackingByIdRequest """ # noqa: E501 - title: Optional[str] = None order_id: Optional[str] = None order_id_path: Optional[str] = None custom_fields: Optional[dict] = None note: Optional[str] = None language: Optional[str] = None - order_promised_delivery_date: Optional[UpdateTrackingByIdRequestOrderPromisedDeliveryDate] = ( - None - ) + order_promised_delivery_date: Optional[UpdateTrackingByIdRequestOrderPromisedDeliveryDate] = None delivery_type: Optional[UpdateTrackingByIdRequestDeliveryType] = None pickup_location: Optional[str] = None pickup_note: Optional[str] = None @@ -58,6 +50,7 @@ class UpdateTrackingByIdRequest(BaseModel): location_id: Optional[str] = None shipping_method: Optional[str] = None customers: Optional[List[UpdateTrackingByIdRequestCustomers]] = None + shipment_direction: Optional[UpdateTrackingByIdRequestShipmentDirection] = None def to_str(self, **kwargs) -> str: return pprint.pformat(self.model_dump(**kwargs)) diff --git a/tracking/models/update_tracking_by_id_request_customers.py b/tracking/models/update_tracking_by_id_request_customers.py index 3f10c06..a594371 100644 --- a/tracking/models/update_tracking_by_id_request_customers.py +++ b/tracking/models/update_tracking_by_id_request_customers.py @@ -6,21 +6,22 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class UpdateTrackingByIdRequestCustomers(BaseModel): """ UpdateTrackingByIdRequestCustomers """ # noqa: E501 - role: Optional[str] = None name: Optional[str] = None phone_number: Optional[str] = None email: Optional[str] = None language: Optional[str] = None + id: Optional[str] = None def to_str(self, **kwargs) -> str: return pprint.pformat(self.model_dump(**kwargs)) diff --git a/tracking/models/update_tracking_by_id_request_delivery_type.py b/tracking/models/update_tracking_by_id_request_delivery_type.py index d687b96..494e926 100644 --- a/tracking/models/update_tracking_by_id_request_delivery_type.py +++ b/tracking/models/update_tracking_by_id_request_delivery_type.py @@ -13,7 +13,6 @@ class UpdateTrackingByIdRequestDeliveryType(Enum): allowed enum values """ - PICKUP_AT_STORE = "pickup_at_store" PICKUP_AT_COURIER = "pickup_at_courier" DOOR_TO_DOOR = "door_to_door" diff --git a/tracking/models/update_tracking_by_id_request_order_promised_delivery_date.py b/tracking/models/update_tracking_by_id_request_order_promised_delivery_date.py index 19f6fa1..8ebc5fe 100644 --- a/tracking/models/update_tracking_by_id_request_order_promised_delivery_date.py +++ b/tracking/models/update_tracking_by_id_request_order_promised_delivery_date.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel -from typing import Any, Dict, Optional +from pydantic import BaseModel, Field +from typing import Any, Dict, List, Optional from typing_extensions import Self + class UpdateTrackingByIdRequestOrderPromisedDeliveryDate(BaseModel): """ The promised delivery date of the order in shipment recipient’s timezone. """ # noqa: E501 - promised_delivery_date: Optional[str] = None promised_delivery_date_min: Optional[str] = None promised_delivery_date_max: Optional[str] = None diff --git a/tracking/models/update_tracking_by_id_request_shipment_direction.py b/tracking/models/update_tracking_by_id_request_shipment_direction.py new file mode 100644 index 0000000..977bb4e --- /dev/null +++ b/tracking/models/update_tracking_by_id_request_shipment_direction.py @@ -0,0 +1,17 @@ +# coding: utf-8 +# +# This code was auto generated by AfterShip SDK Generator. +# Do not edit the class manually. + +from enum import Enum, unique + + +@unique +class UpdateTrackingByIdRequestShipmentDirection(Enum): + """ + Indicates the business direction of the shipment in the e-commerce fulfillment lifecycle.Possible values:- `forward`: A forward (outbound-to-customer) shipment created for order fulfillment.- `return`: A return (customer-to-merchant) shipment created for after-sales return or exchange.When provided, this field gives AfterShip additional context about the shipment's intent, enabling more accurate status identification. + + allowed enum values + """ + FORWARD = "forward" + RETURN = "return" diff --git a/tracking/models/update_tracking_by_id_response.py b/tracking/models/update_tracking_by_id_response.py index ccd442b..5138630 100644 --- a/tracking/models/update_tracking_by_id_response.py +++ b/tracking/models/update_tracking_by_id_response.py @@ -6,18 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.tracking import Tracking - class UpdateTrackingByIdResponse(BaseModel): """ - Object describes the tracking information.<div style="display:none; height: 0"></div> + Object describes the tracking information.<div style="visibility:hidden; height: 0"></div> """ - response_header: Dict[str, List[str]] = {} data: Optional[Tracking] = None @@ -36,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file diff --git a/tracking/request.py b/tracking/request.py index 35aa57b..a50d09c 100644 --- a/tracking/request.py +++ b/tracking/request.py @@ -17,7 +17,7 @@ from tracking.response import parse_response from tracking.exceptions import ApiException, TimedOutError, BadRequestError, ErrorCodeEnum -_default_user_agent = "tracking-sdk-python/9.0.0 (https://www.aftership.com) httpx/0.19.0" +_default_user_agent = "tracking-sdk-python/10.0.0 (https://www.aftership.com) httpx/0.19.0" def validate_params(func): @@ -27,8 +27,10 @@ def wrapper(*args, **kwargs): funcx = validate_call(func) return funcx(*args, **kwargs) except ValidationError as e: - raise BadRequestError(code=ErrorCodeEnum.BAD_REQUEST, message=e) - + raise BadRequestError( + code=ErrorCodeEnum.BAD_REQUEST, + message=e + ) return wrapper @@ -37,7 +39,6 @@ class ApiClient: :param configuration: .Configuration object for this client """ - _client = httpx.Client() def __init__(self, configuration: Optional[Configuration] = None) -> None: @@ -63,17 +64,16 @@ def _request(self, method, url, params=None, body=None, **kwargs) -> Union[dict, kwargs["timeout"] = self._config.timeout / 1000.0 request = self._client.build_request( - method=method, url=url, params=params, data=body, headers=user_headers, **kwargs - ) + method=method, url=url, params=params, data=body, headers=user_headers, **kwargs) request.headers = Authenticator( api_key=self._config.api_key, api_secret=self._config.api_secret, - auth_type=self._config.authentication_type, + auth_type=self._config.authentication_type ).sign( method=request.method, uri=request.url.raw.raw_path.decode("utf-8"), headers=request.headers, - body=body, + body=body ) return self._send_request_with_retry(ssl_ctx, request) diff --git a/tracking/response.py b/tracking/response.py index f65486b..f6ffece 100644 --- a/tracking/response.py +++ b/tracking/response.py @@ -4,7 +4,7 @@ # Do not edit the class manually. import json -from typing import Union +from typing import Dict, Union import httpx @@ -17,17 +17,17 @@ NotFoundError, InternalError, TooManyRequestsError, - TimedOutError, + TimedOutError ) error_mapping = { - "BadRequest": BadRequestError, - "Unauthorized": UnauthorizedError, - "Forbidden": ForbiddenError, - "NotFound": NotFoundError, - "TooManyRequests": TooManyRequestsError, - "InternalError": InternalError, - "TimedOutError": TimedOutError, + 'BadRequest': BadRequestError, + 'Unauthorized': UnauthorizedError, + 'Forbidden': ForbiddenError, + 'NotFound': NotFoundError, + 'TooManyRequests': TooManyRequestsError, + 'InternalError': InternalError, + 'TimedOutError': TimedOutError, } _error_meta_code_mapping = { @@ -75,7 +75,7 @@ def parse_response(response: httpx.Response) -> Union[dict, None]: error_cls = error_mapping[error_type] else: error_cls = UnknownError - + meta_code = json_data["meta"]["code"] error_code = _error_meta_code_mapping.get(str(meta_code)) if error_code is None: From ab2290b2e464f8640892e06881af3fe193967786 Mon Sep 17 00:00:00 2001 From: Watson Zuo Date: Fri, 10 Jul 2026 14:28:18 +0800 Subject: [PATCH 2/2] chore: apply ruff format (make format) Co-Authored-By: Claude Fable 5 --- tracking/api/courier.py | 22 ++--- tracking/api/courier_connection.py | 55 +++++------- tracking/api/estimated_delivery_date.py | 26 ++---- tracking/api/tracking.py | 74 ++++++---------- tracking/auth.py | 29 +++---- tracking/client.py | 2 - tracking/configuration.py | 85 +++++++++++-------- tracking/exceptions.py | 3 +- tracking/models/__init__.py | 65 ++++++++++---- tracking/models/additional_fields.py | 1 + tracking/models/checkpoint.py | 3 +- tracking/models/checkpoint_coordinate.py | 6 +- tracking/models/checkpoint_events.py | 5 +- tracking/models/checkpoint_events_reason.py | 6 +- tracking/models/checkpoint_source.py | 1 + tracking/models/courier.py | 3 +- tracking/models/courier_connection.py | 6 +- ...on_response_for_get_courier_connections.py | 9 +- ...sponse_for_get_courier_connections_data.py | 7 +- ...get_courier_connections_data_pagination.py | 6 +- tracking/models/courier_credentials.py | 3 +- tracking/models/courier_response.py | 5 +- tracking/models/courier_response_data.py | 3 +- tracking/models/create_tracking_request.py | 11 ++- .../create_tracking_request_customers.py | 6 +- .../create_tracking_request_delivery_type.py | 1 + .../create_tracking_request_last_mile.py | 6 +- ...ng_request_order_promised_delivery_date.py | 6 +- ...ate_tracking_request_shipment_direction.py | 1 + tracking/models/create_tracking_response.py | 6 +- tracking/models/credential_field.py | 6 +- ...lete_courier_connections_by_id_response.py | 6 +- .../models/delete_tracking_by_id_response.py | 6 +- tracking/models/detect_courier_request.py | 4 +- tracking/models/detect_courier_response.py | 10 +-- .../models/detect_courier_response_data.py | 3 +- .../models/estimated_delivery_date_request.py | 21 +++-- ...livery_date_request_destination_address.py | 6 +- ..._delivery_date_request_estimated_pickup.py | 11 ++- ..._estimated_pickup_order_processing_time.py | 6 +- ...ed_delivery_date_request_origin_address.py | 6 +- .../estimated_delivery_date_request_weight.py | 6 +- .../estimated_delivery_date_response.py | 21 +++-- ...ivery_date_response_destination_address.py | 6 +- ...delivery_date_response_estimated_pickup.py | 11 ++- ..._estimated_pickup_order_processing_time.py | 6 +- ...d_delivery_date_response_origin_address.py | 6 +- ...estimated_delivery_date_response_weight.py | 6 +- .../get_courier_connections_by_id_response.py | 6 +- .../get_courier_connections_response.py | 10 +-- .../get_courier_connections_response_data.py | 7 +- ...er_connections_response_data_pagination.py | 6 +- tracking/models/get_couriers_response.py | 10 +-- tracking/models/get_couriers_response_data.py | 3 +- .../models/get_tracking_by_id_response.py | 6 +- tracking/models/get_trackings_response.py | 10 +-- .../models/get_trackings_response_data.py | 7 +- .../get_trackings_response_data_pagination.py | 6 +- .../mark_tracking_completed_by_id_request.py | 9 +- ...tracking_completed_by_id_request_reason.py | 1 + .../mark_tracking_completed_by_id_response.py | 6 +- tracking/models/meta.py | 5 +- tracking/models/meta_type.py | 1 + .../post_courier_connections_request.py | 6 +- .../post_courier_connections_response.py | 6 +- tracking/models/predict_batch_request.py | 3 +- tracking/models/predict_batch_response.py | 10 +-- .../models/predict_batch_response_data.py | 3 +- tracking/models/predict_response.py | 10 +-- .../put_courier_connections_by_id_request.py | 6 +- .../put_courier_connections_by_id_response.py | 6 +- .../models/retrack_tracking_by_id_response.py | 6 +- tracking/models/tag.py | 1 + tracking/models/tracking.py | 15 +++- ...cking_aftership_estimated_delivery_date.py | 6 +- tracking/models/tracking_carbon_emissions.py | 6 +- ...racking_courier_estimated_delivery_date.py | 6 +- ...tracking_custom_estimated_delivery_date.py | 9 +- ...ing_custom_estimated_delivery_date_type.py | 1 + tracking/models/tracking_customers.py | 6 +- .../tracking_first_estimated_delivery.py | 13 ++- ...racking_first_estimated_delivery_source.py | 1 + .../tracking_first_estimated_delivery_type.py | 1 + tracking/models/tracking_first_mile.py | 8 +- tracking/models/tracking_forward_shipment.py | 6 +- tracking/models/tracking_last_mile.py | 5 +- tracking/models/tracking_last_mile_source.py | 1 + .../tracking_latest_estimated_delivery.py | 13 ++- ...acking_latest_estimated_delivery_source.py | 1 + ...tracking_latest_estimated_delivery_type.py | 1 + tracking/models/tracking_multi_piece_info.py | 3 +- .../tracking_multi_piece_info_pieces.py | 5 +- .../tracking_multi_piece_info_pieces_type.py | 1 + .../models/tracking_multi_piece_info_type.py | 1 + .../tracking_order_promised_delivery_date.py | 6 +- tracking/models/tracking_proof_of_delivery.py | 6 +- tracking/models/tracking_response.py | 5 +- .../tracking_response_for_get_trackings.py | 9 +- ...racking_response_for_get_trackings_data.py | 7 +- ...ponse_for_get_trackings_data_pagination.py | 6 +- tracking/models/tracking_return_shipment.py | 6 +- .../models/tracking_shipment_dimensions.py | 6 +- .../models/tracking_shipment_direction.py | 1 + tracking/models/tracking_shipment_weight.py | 6 +- .../models/tracking_signature_requirement.py | 1 + .../models/update_tracking_by_id_request.py | 23 +++-- ...update_tracking_by_id_request_customers.py | 6 +- ...te_tracking_by_id_request_delivery_type.py | 1 + ...id_request_order_promised_delivery_date.py | 6 +- ...acking_by_id_request_shipment_direction.py | 1 + .../models/update_tracking_by_id_response.py | 6 +- tracking/request.py | 14 +-- tracking/response.py | 20 ++--- 113 files changed, 560 insertions(+), 444 deletions(-) diff --git a/tracking/api/courier.py b/tracking/api/courier.py index be7e484..b2560ed 100644 --- a/tracking/api/courier.py +++ b/tracking/api/courier.py @@ -4,9 +4,8 @@ # Do not edit the class manually. import json -from typing import Union, Annotated +from typing import Union -from pydantic import Field from tracking.models import ( GetCouriersResponse, @@ -20,11 +19,7 @@ class CourierApi(ApiClient): """CourierApi api implements""" @validate_params - def get_couriers( - self, - - - **kwargs) -> GetCouriersResponse: + def get_couriers(self, **kwargs) -> GetCouriersResponse: """ Return a list of couriers. :param kwargs: @@ -46,19 +41,16 @@ def get_couriers( } params = {key: kwargs.pop(key) for key in params_keys if key in kwargs} - result = self._request("GET", url=url, params=params, **kwargs) return GetCouriersResponse.model_validate(result) @validate_params def detect_courier( - self, - - detect_courier_request: Union[DetectCourierRequest, dict], - **kwargs) -> DetectCourierResponse: + self, detect_courier_request: Union[DetectCourierRequest, dict], **kwargs + ) -> DetectCourierResponse: """ Return a list of matched couriers based on tracking number format and or a list of couriers. - :param detect_courier_request: + :param detect_courier_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -69,12 +61,10 @@ def detect_courier( """ url = "/tracking/2026-07/couriers/detect" - body = detect_courier_request if not isinstance(body, dict): - body = detect_courier_request.model_dump(exclude_none=True, mode='json') + body = detect_courier_request.model_dump(exclude_none=True, mode="json") body = json.dumps(body) result = self._request("POST", url=url, body=body, **kwargs) return DetectCourierResponse.model_validate(result) - diff --git a/tracking/api/courier_connection.py b/tracking/api/courier_connection.py index f8fcb24..5d1587d 100644 --- a/tracking/api/courier_connection.py +++ b/tracking/api/courier_connection.py @@ -24,11 +24,7 @@ class CourierConnectionApi(ApiClient): """CourierConnectionApi api implements""" @validate_params - def get_courier_connections( - self, - - - **kwargs) -> GetCourierConnectionsResponse: + def get_courier_connections(self, **kwargs) -> GetCourierConnectionsResponse: """ Get courier connection results of multiple courier connections. :param kwargs: @@ -52,19 +48,16 @@ def get_courier_connections( } params = {key: kwargs.pop(key) for key in params_keys if key in kwargs} - result = self._request("GET", url=url, params=params, **kwargs) return GetCourierConnectionsResponse.model_validate(result) @validate_params def post_courier_connections( - self, - - post_courier_connections_request: Union[PostCourierConnectionsRequest, dict], - **kwargs) -> PostCourierConnectionsResponse: + self, post_courier_connections_request: Union[PostCourierConnectionsRequest, dict], **kwargs + ) -> PostCourierConnectionsResponse: """ - - :param post_courier_connections_request: + + :param post_courier_connections_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -75,10 +68,9 @@ def post_courier_connections( """ url = "/tracking/2026-07/courier-connections" - body = post_courier_connections_request if not isinstance(body, dict): - body = post_courier_connections_request.model_dump(exclude_none=True, mode='json') + body = post_courier_connections_request.model_dump(exclude_none=True, mode="json") body = json.dumps(body) result = self._request("POST", url=url, body=body, **kwargs) @@ -86,13 +78,11 @@ def post_courier_connections( @validate_params def get_courier_connections_by_id( - self, - id: Annotated[str, Field(min_length=1)], - - **kwargs) -> GetCourierConnectionsByIdResponse: + self, id: Annotated[str, Field(min_length=1)], **kwargs + ) -> GetCourierConnectionsByIdResponse: """ Get courier connection results of a single courier connection. - :param id: str. + :param id: str. :param kwargs: request options: **headers** (dict): support custom headers. @@ -103,21 +93,20 @@ def get_courier_connections_by_id( """ url = f"/tracking/2026-07/courier-connections/{id}" - - result = self._request("GET", url=url, **kwargs) return GetCourierConnectionsByIdResponse.model_validate(result) @validate_params def put_courier_connections_by_id( self, - id: Annotated[str, Field(min_length=1)], - put_courier_connections_by_id_request: Union[PutCourierConnectionsByIdRequest, dict], - **kwargs) -> PutCourierConnectionsByIdResponse: + id: Annotated[str, Field(min_length=1)], + put_courier_connections_by_id_request: Union[PutCourierConnectionsByIdRequest, dict], + **kwargs, + ) -> PutCourierConnectionsByIdResponse: """ Update a courier connection. - :param id: str. - :param put_courier_connections_by_id_request: + :param id: str. + :param put_courier_connections_by_id_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -128,10 +117,9 @@ def put_courier_connections_by_id( """ url = f"/tracking/2026-07/courier-connections/{id}" - body = put_courier_connections_by_id_request if not isinstance(body, dict): - body = put_courier_connections_by_id_request.model_dump(exclude_none=True, mode='json') + body = put_courier_connections_by_id_request.model_dump(exclude_none=True, mode="json") body = json.dumps(body) result = self._request("PATCH", url=url, body=body, **kwargs) @@ -139,13 +127,11 @@ def put_courier_connections_by_id( @validate_params def delete_courier_connections_by_id( - self, - id: Annotated[str, Field(min_length=1)], - - **kwargs) -> DeleteCourierConnectionsByIdResponse: + self, id: Annotated[str, Field(min_length=1)], **kwargs + ) -> DeleteCourierConnectionsByIdResponse: """ Delete a courier connection. - :param id: str. + :param id: str. :param kwargs: request options: **headers** (dict): support custom headers. @@ -156,8 +142,5 @@ def delete_courier_connections_by_id( """ url = f"/tracking/2026-07/courier-connections/{id}" - - result = self._request("DELETE", url=url, **kwargs) return DeleteCourierConnectionsByIdResponse.model_validate(result) - diff --git a/tracking/api/estimated_delivery_date.py b/tracking/api/estimated_delivery_date.py index 809a262..5c1ba1f 100644 --- a/tracking/api/estimated_delivery_date.py +++ b/tracking/api/estimated_delivery_date.py @@ -4,9 +4,8 @@ # Do not edit the class manually. import json -from typing import Union, Annotated +from typing import Union -from pydantic import Field from tracking.models import ( EstimatedDeliveryDateRequest, @@ -22,13 +21,11 @@ class EstimatedDeliveryDateApi(ApiClient): @validate_params def predict( - self, - - predict_request: Union[EstimatedDeliveryDateRequest, dict], - **kwargs) -> PredictResponse: + self, predict_request: Union[EstimatedDeliveryDateRequest, dict], **kwargs + ) -> PredictResponse: """ > The estimated delivery date is provided by AfterShip, based on its AI-predictive model. You can display the EDD on the product page, cart, and order checkout page. It indicates when a customer will receive the order.You can use to activate this feature. - :param predict_request: + :param predict_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -39,10 +36,9 @@ def predict( """ url = "/tracking/2026-07/estimated-delivery-date/predict" - body = predict_request if not isinstance(body, dict): - body = predict_request.model_dump(exclude_none=True, mode='json') + body = predict_request.model_dump(exclude_none=True, mode="json") body = json.dumps(body) result = self._request("POST", url=url, body=body, **kwargs) @@ -50,13 +46,11 @@ def predict( @validate_params def predict_batch( - self, - - predict_batch_request: Union[PredictBatchRequest, dict], - **kwargs) -> PredictBatchResponse: + self, predict_batch_request: Union[PredictBatchRequest, dict], **kwargs + ) -> PredictBatchResponse: """ > The estimated delivery date is provided by AfterShip, based on its AI-predictive model. You can display the EDD on the product page, cart, and order checkout page. It indicates when a customer will receive the order.You can use to activate this feature.Supported functionalities require:1. One `EstimatedDeliveryDate` object for one prediction result.2. Maximum 5 `EstimatedDeliveryDate` objects are allowed.3. API call will fail if any of the requests `EstimatedDeliveryDate` objects do not meet the specification requirement. - :param predict_batch_request: + :param predict_batch_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -67,12 +61,10 @@ def predict_batch( """ url = "/tracking/2026-07/estimated-delivery-date/predict-batch" - body = predict_batch_request if not isinstance(body, dict): - body = predict_batch_request.model_dump(exclude_none=True, mode='json') + body = predict_batch_request.model_dump(exclude_none=True, mode="json") body = json.dumps(body) result = self._request("POST", url=url, body=body, **kwargs) return PredictBatchResponse.model_validate(result) - diff --git a/tracking/api/tracking.py b/tracking/api/tracking.py index 6d10397..4568139 100644 --- a/tracking/api/tracking.py +++ b/tracking/api/tracking.py @@ -27,11 +27,7 @@ class TrackingApi(ApiClient): """TrackingApi api implements""" @validate_params - def get_trackings( - self, - - - **kwargs) -> GetTrackingsResponse: + def get_trackings(self, **kwargs) -> GetTrackingsResponse: """ Get tracking results of multiple trackings.
:param kwargs: @@ -51,10 +47,10 @@ def get_trackings( **origin**: str. Origin country/region of trackings. Use ISO Alpha-3 (three letters). Use comma for multiple values. (Example: USA,HKG) **destination**: str. Destination country/region of trackings. Use ISO Alpha-3 (three letters). Use comma for multiple values. (Example: USA,HKG) **tag**: str. Current status of tracking. Values include `Pending`, `InfoReceived`, `InTransit`, `OutForDelivery`, `AttemptFail`, `Delivered`, `AvailableForPickup`, `Exception`, `Expired` (See tag definition) - **created_at_min**: str. Start date and time of trackings created. AfterShip only stores data of 120 days. Please make sure the value of the parameter is properly escaped in - **created_at_max**: str. End date and time of trackings created. Please make sure the value of the parameter is properly escaped in - **updated_at_min**: str. Start date and time of trackings updated. Please make sure the value of the parameter is properly escaped in - **updated_at_max**: str. End date and time of trackings updated. Please make sure the value of the parameter is properly escaped in + **created_at_min**: str. Start date and time of trackings created. AfterShip only stores data of 120 days. Please make sure the value of the parameter is properly escaped in + **created_at_max**: str. End date and time of trackings created. Please make sure the value of the parameter is properly escaped in + **updated_at_min**: str. Start date and time of trackings updated. Please make sure the value of the parameter is properly escaped in + **updated_at_max**: str. End date and time of trackings updated. Please make sure the value of the parameter is properly escaped in **fields**: str. List of fields to include in the response. Use comma for multiple values. Available options: `title`, `order_id`, `tag`, `checkpoints`. Example: `title,order_id` **return_to_sender**: str. Select return to sender, the value should be `true` or `false`, with optional comma separated. **courier_destination_country_region**: str. Destination country/region of trackings returned by courier. Use ISO Alpha-3 (three letters). Use comma for multiple values. (Example: USA,HKG) @@ -85,19 +81,16 @@ def get_trackings( } params = {key: kwargs.pop(key) for key in params_keys if key in kwargs} - result = self._request("GET", url=url, params=params, **kwargs) return GetTrackingsResponse.model_validate(result) @validate_params def create_tracking( - self, - - create_tracking_request: Union[CreateTrackingRequest, dict], - **kwargs) -> CreateTrackingResponse: + self, create_tracking_request: Union[CreateTrackingRequest, dict], **kwargs + ) -> CreateTrackingResponse: """ Create a tracking.
- :param create_tracking_request: + :param create_tracking_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -108,10 +101,9 @@ def create_tracking( """ url = "/tracking/2026-07/trackings" - body = create_tracking_request if not isinstance(body, dict): - body = create_tracking_request.model_dump(exclude_none=True, mode='json') + body = create_tracking_request.model_dump(exclude_none=True, mode="json") body = json.dumps(body) result = self._request("POST", url=url, body=body, **kwargs) @@ -119,10 +111,8 @@ def create_tracking( @validate_params def get_tracking_by_id( - self, - id: Annotated[str, Field(min_length=1)], - - **kwargs) -> GetTrackingByIdResponse: + self, id: Annotated[str, Field(min_length=1)], **kwargs + ) -> GetTrackingByIdResponse: """ Get tracking results of a single tracking. :param id: str. tracking ID @@ -145,20 +135,20 @@ def get_tracking_by_id( } params = {key: kwargs.pop(key) for key in params_keys if key in kwargs} - result = self._request("GET", url=url, params=params, **kwargs) return GetTrackingByIdResponse.model_validate(result) @validate_params def update_tracking_by_id( self, - id: Annotated[str, Field(min_length=1)], - update_tracking_by_id_request: Union[UpdateTrackingByIdRequest, dict], - **kwargs) -> UpdateTrackingByIdResponse: + id: Annotated[str, Field(min_length=1)], + update_tracking_by_id_request: Union[UpdateTrackingByIdRequest, dict], + **kwargs, + ) -> UpdateTrackingByIdResponse: """ Update a tracking. :param id: str. tracking ID - :param update_tracking_by_id_request: + :param update_tracking_by_id_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -169,10 +159,9 @@ def update_tracking_by_id( """ url = f"/tracking/2026-07/trackings/{id}" - body = update_tracking_by_id_request if not isinstance(body, dict): - body = update_tracking_by_id_request.model_dump(exclude_none=True, mode='json') + body = update_tracking_by_id_request.model_dump(exclude_none=True, mode="json") body = json.dumps(body) result = self._request("PUT", url=url, body=body, **kwargs) @@ -180,10 +169,8 @@ def update_tracking_by_id( @validate_params def delete_tracking_by_id( - self, - id: Annotated[str, Field(min_length=1)], - - **kwargs) -> DeleteTrackingByIdResponse: + self, id: Annotated[str, Field(min_length=1)], **kwargs + ) -> DeleteTrackingByIdResponse: """ Delete a tracking. :param id: str. tracking ID @@ -197,17 +184,13 @@ def delete_tracking_by_id( """ url = f"/tracking/2026-07/trackings/{id}" - - result = self._request("DELETE", url=url, **kwargs) return DeleteTrackingByIdResponse.model_validate(result) @validate_params def retrack_tracking_by_id( - self, - id: Annotated[str, Field(min_length=1)], - - **kwargs) -> RetrackTrackingByIdResponse: + self, id: Annotated[str, Field(min_length=1)], **kwargs + ) -> RetrackTrackingByIdResponse: """ Retrack an expired tracking. Max 3 times per tracking. :param id: str. tracking id @@ -221,21 +204,20 @@ def retrack_tracking_by_id( """ url = f"/tracking/2026-07/trackings/{id}/retrack" - - result = self._request("POST", url=url, **kwargs) return RetrackTrackingByIdResponse.model_validate(result) @validate_params def mark_tracking_completed_by_id( self, - id: Annotated[str, Field(min_length=1)], - mark_tracking_completed_by_id_request: Union[MarkTrackingCompletedByIdRequest, dict], - **kwargs) -> MarkTrackingCompletedByIdResponse: + id: Annotated[str, Field(min_length=1)], + mark_tracking_completed_by_id_request: Union[MarkTrackingCompletedByIdRequest, dict], + **kwargs, + ) -> MarkTrackingCompletedByIdResponse: """ Mark a tracking as completed. The tracking won't auto update until retrack it. :param id: str. tracking id - :param mark_tracking_completed_by_id_request: + :param mark_tracking_completed_by_id_request: :param kwargs: request options: **headers** (dict): support custom headers. @@ -246,12 +228,10 @@ def mark_tracking_completed_by_id( """ url = f"/tracking/2026-07/trackings/{id}/mark-as-completed" - body = mark_tracking_completed_by_id_request if not isinstance(body, dict): - body = mark_tracking_completed_by_id_request.model_dump(exclude_none=True, mode='json') + body = mark_tracking_completed_by_id_request.model_dump(exclude_none=True, mode="json") body = json.dumps(body) result = self._request("POST", url=url, body=body, **kwargs) return MarkTrackingCompletedByIdResponse.model_validate(result) - diff --git a/tracking/auth.py b/tracking/auth.py index 1fa1478..ab206aa 100644 --- a/tracking/auth.py +++ b/tracking/auth.py @@ -21,7 +21,6 @@ class Authenticator: - def __init__(self, api_key: str, api_secret: str, auth_type: str): self._api_key: str = api_key self._api_secret: str = api_secret @@ -42,14 +41,16 @@ def sign(self, method: str, uri: str, headers: dict, body: str) -> Dict: return headers if self._kind != ApiKey: - headers["date"] = datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT') + headers["date"] = datetime.utcnow().strftime("%a, %d %b %Y %H:%M:%S GMT") concat_header = self.canonical_header(headers) concat_rs = self.canonical_resource(uri) request_date = headers.get("date") sign_str = self.sign_str(method, body, request_date, concat_header, concat_rs) if self._kind == Aes: - headers["as-signature-hmac-sha256"] = self.hmac_signature(sign_str, self._api_secret) + headers["as-signature-hmac-sha256"] = self.hmac_signature( + sign_str, self._api_secret + ) if self._kind == Rsa: headers["as-signature-rsa-sha256"] = self.rsa_encrypt(sign_str, self._api_secret) @@ -57,7 +58,9 @@ def sign(self, method: str, uri: str, headers: dict, body: str) -> Dict: return headers @classmethod - def sign_str(cls, method: str, body: str, date: str, concat_header: str, concat_resource: str) -> str: + def sign_str( + cls, method: str, body: str, date: str, concat_header: str, concat_resource: str + ) -> str: content_md5 = "" content_type = "" @@ -65,14 +68,7 @@ def sign_str(cls, method: str, body: str, date: str, concat_header: str, concat_ content_type = "application/json" content_md5 = cls.md5_encode(body) - return "\n".join([ - method, - content_md5, - content_type, - date, - concat_header, - concat_resource - ]) + return "\n".join([method, content_md5, content_type, date, concat_header, concat_resource]) @classmethod def canonical_header(cls, headers: Dict) -> str: @@ -119,9 +115,7 @@ def canonical_resource(cls, raw_url: str) -> str: @staticmethod def md5_encode(source: str) -> str: - return hashlib.md5( - source.encode('utf-8') - ).hexdigest().upper() + return hashlib.md5(source.encode("utf-8")).hexdigest().upper() @staticmethod def rsa_encrypt(sign_str: str, api_secret: str) -> str: @@ -135,9 +129,6 @@ def rsa_encrypt(sign_str: str, api_secret: str) -> str: @staticmethod def hmac_signature(sign_str: str, api_secret: str) -> str: signature = hmac.new( - bytes(api_secret, 'utf-8'), - msg=bytes(sign_str, 'utf-8'), - digestmod=hashlib.sha256 + bytes(api_secret, "utf-8"), msg=bytes(sign_str, "utf-8"), digestmod=hashlib.sha256 ).digest() return base64.b64encode(signature).decode("utf-8") - diff --git a/tracking/client.py b/tracking/client.py index 8244f75..a97a134 100644 --- a/tracking/client.py +++ b/tracking/client.py @@ -15,7 +15,6 @@ class Client: - def __init__(self, configuration: Optional[Configuration] = None) -> None: if configuration is None: configuration = Configuration() @@ -24,4 +23,3 @@ def __init__(self, configuration: Optional[Configuration] = None) -> None: self.courier = CourierApi(configuration) self.courier_connection = CourierConnectionApi(configuration) self.estimated_delivery_date = EstimatedDeliveryDateApi(configuration) - diff --git a/tracking/configuration.py b/tracking/configuration.py index 97c72b4..df67dd5 100644 --- a/tracking/configuration.py +++ b/tracking/configuration.py @@ -33,69 +33,80 @@ class Configuration: :param proxy: str - proxy url string. """ - def __init__(self, - domain: Optional[str] = None, - authentication_type: Optional[str] = None, - max_retry: Optional[int] = None, - user_agent: Optional[str] = None, - api_key: Optional[str] = None, - api_secret: Optional[str] = None, - proxy: Optional[str] = None, - timeout: Optional[int] = None, - ) -> None: - self.domain = str(_get_val_from_env_if_need(domain, - key_suffix="DOMAIN", default="https://api.aftership.com")) + def __init__( + self, + domain: Optional[str] = None, + authentication_type: Optional[str] = None, + max_retry: Optional[int] = None, + user_agent: Optional[str] = None, + api_key: Optional[str] = None, + api_secret: Optional[str] = None, + proxy: Optional[str] = None, + timeout: Optional[int] = None, + ) -> None: + self.domain = str( + _get_val_from_env_if_need( + domain, key_suffix="DOMAIN", default="https://api.aftership.com" + ) + ) - self.authentication_type = str(_get_val_from_env_if_need(authentication_type, - key_suffix="AUTHENTICATION_TYPE", default=ApiKey)) + self.authentication_type = str( + _get_val_from_env_if_need( + authentication_type, key_suffix="AUTHENTICATION_TYPE", default=ApiKey + ) + ) - self.max_retry = int(_get_val_from_env_if_need(max_retry, - key_suffix="MAX_RETRY", default=2)) + self.max_retry = int( + _get_val_from_env_if_need(max_retry, key_suffix="MAX_RETRY", default=2) + ) - self.user_agent = str(_get_val_from_env_if_need(user_agent, - key_suffix="USER_AGENT", default="")) or None + self.user_agent = ( + str(_get_val_from_env_if_need(user_agent, key_suffix="USER_AGENT", default="")) or None + ) - self.api_key = str(_get_val_from_env_if_need(api_key, - key_suffix="API_KEY", default="")) or None + self.api_key = ( + str(_get_val_from_env_if_need(api_key, key_suffix="API_KEY", default="")) or None + ) - self.api_secret = str(_get_val_from_env_if_need(api_secret, - key_suffix="API_SECRET", default="")) or None + self.api_secret = ( + str(_get_val_from_env_if_need(api_secret, key_suffix="API_SECRET", default="")) or None + ) - self.proxy = str(_get_val_from_env_if_need(proxy, - key_suffix="PROXY", default="")) or None + self.proxy = str(_get_val_from_env_if_need(proxy, key_suffix="PROXY", default="")) or None - self.timeout = int(_get_val_from_env_if_need(timeout, - key_suffix="TIMEOUT", default=10000)) + self.timeout = int(_get_val_from_env_if_need(timeout, key_suffix="TIMEOUT", default=10000)) self._validate() def _validate(self): if self.domain is None or len(self.domain) == 0: raise InvalidOptionError( - code=ErrorCodeEnum.INVALID_OPTION, - message=f"Invalid option: domain={self.domain}" + code=ErrorCodeEnum.INVALID_OPTION, message=f"Invalid option: domain={self.domain}" ) if self.authentication_type not in {ApiKey, Rsa, Aes}: raise InvalidOptionError( code=ErrorCodeEnum.INVALID_OPTION, - message=f"Invalid option: authentication_type={self.authentication_type}") + message=f"Invalid option: authentication_type={self.authentication_type}", + ) if self.api_key is None or len(self.api_key) == 0: - raise InvalidApiKeyError( - code=ErrorCodeEnum.INVALID_API_KEY, - message="Invalid API key") + raise InvalidApiKeyError(code=ErrorCodeEnum.INVALID_API_KEY, message="Invalid API key") - if self.authentication_type != ApiKey and (self.api_secret is None or len(self.api_secret) == 0): + if self.authentication_type != ApiKey and ( + self.api_secret is None or len(self.api_secret) == 0 + ): raise InvalidOptionError( code=ErrorCodeEnum.INVALID_OPTION, - message=f"Invalid option: api_secret={self.api_secret}") + message=f"Invalid option: api_secret={self.api_secret}", + ) if self.max_retry > 10 or self.max_retry < 0: raise InvalidOptionError( code=ErrorCodeEnum.INVALID_OPTION, - message=f"Invalid option: max_retry={self.max_retry}") + message=f"Invalid option: max_retry={self.max_retry}", + ) if self.timeout <= 0: raise InvalidOptionError( - code=ErrorCodeEnum.INVALID_OPTION, - message=f"Invalid option: timeout={self.timeout}") + code=ErrorCodeEnum.INVALID_OPTION, message=f"Invalid option: timeout={self.timeout}" + ) diff --git a/tracking/exceptions.py b/tracking/exceptions.py index 2a3e213..953c364 100644 --- a/tracking/exceptions.py +++ b/tracking/exceptions.py @@ -37,7 +37,7 @@ def __init__( self.response_header = response_header def __str__(self): - return '{}: {}'.format(self.__class__.__name__, self.message) + return "{}: {}".format(self.__class__.__name__, self.message) class BadRequestError(ApiException): @@ -91,6 +91,7 @@ class ErrorCodeEnum(Enum): allowed enum values """ + INVALID_API_KEY = "INVALID_API_KEY" INVALID_OPTION = "INVALID_OPTION" BAD_REQUEST = "BAD_REQUEST" diff --git a/tracking/models/__init__.py b/tracking/models/__init__.py index 150d99a..b05eff9 100644 --- a/tracking/models/__init__.py +++ b/tracking/models/__init__.py @@ -108,7 +108,9 @@ "PredictBatchResponse", ] -from .tracking_response_for_get_trackings_data_pagination import TrackingResponseForGetTrackingsDataPagination +from .tracking_response_for_get_trackings_data_pagination import ( + TrackingResponseForGetTrackingsDataPagination, +) from .tracking_response_for_get_trackings_data import TrackingResponseForGetTrackingsData from .tracking_response_for_get_trackings import TrackingResponseForGetTrackings from .meta_type import MetaType @@ -154,26 +156,50 @@ from .courier import Courier from .additional_fields import AdditionalFields from .credential_field import CredentialField -from .courier_connection_response_for_get_courier_connections_data_pagination import CourierConnectionResponseForGetCourierConnectionsDataPagination -from .courier_connection_response_for_get_courier_connections_data import CourierConnectionResponseForGetCourierConnectionsData -from .courier_connection_response_for_get_courier_connections import CourierConnectionResponseForGetCourierConnections +from .courier_connection_response_for_get_courier_connections_data_pagination import ( + CourierConnectionResponseForGetCourierConnectionsDataPagination, +) +from .courier_connection_response_for_get_courier_connections_data import ( + CourierConnectionResponseForGetCourierConnectionsData, +) +from .courier_connection_response_for_get_courier_connections import ( + CourierConnectionResponseForGetCourierConnections, +) from .courier_connection import CourierConnection -from .estimated_delivery_date_request_origin_address import EstimatedDeliveryDateRequestOriginAddress -from .estimated_delivery_date_request_destination_address import EstimatedDeliveryDateRequestDestinationAddress +from .estimated_delivery_date_request_origin_address import ( + EstimatedDeliveryDateRequestOriginAddress, +) +from .estimated_delivery_date_request_destination_address import ( + EstimatedDeliveryDateRequestDestinationAddress, +) from .estimated_delivery_date_request_weight import EstimatedDeliveryDateRequestWeight -from .estimated_delivery_date_request_estimated_pickup_order_processing_time import EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime -from .estimated_delivery_date_request_estimated_pickup import EstimatedDeliveryDateRequestEstimatedPickup +from .estimated_delivery_date_request_estimated_pickup_order_processing_time import ( + EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime, +) +from .estimated_delivery_date_request_estimated_pickup import ( + EstimatedDeliveryDateRequestEstimatedPickup, +) from .estimated_delivery_date_request import EstimatedDeliveryDateRequest -from .estimated_delivery_date_response_origin_address import EstimatedDeliveryDateResponseOriginAddress -from .estimated_delivery_date_response_destination_address import EstimatedDeliveryDateResponseDestinationAddress +from .estimated_delivery_date_response_origin_address import ( + EstimatedDeliveryDateResponseOriginAddress, +) +from .estimated_delivery_date_response_destination_address import ( + EstimatedDeliveryDateResponseDestinationAddress, +) from .estimated_delivery_date_response_weight import EstimatedDeliveryDateResponseWeight -from .estimated_delivery_date_response_estimated_pickup_order_processing_time import EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime -from .estimated_delivery_date_response_estimated_pickup import EstimatedDeliveryDateResponseEstimatedPickup +from .estimated_delivery_date_response_estimated_pickup_order_processing_time import ( + EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime, +) +from .estimated_delivery_date_response_estimated_pickup import ( + EstimatedDeliveryDateResponseEstimatedPickup, +) from .estimated_delivery_date_response import EstimatedDeliveryDateResponse from .get_trackings_response_data import GetTrackingsResponseData from .get_trackings_response_data_pagination import GetTrackingsResponseDataPagination from .get_trackings_response import GetTrackingsResponse -from .create_tracking_request_order_promised_delivery_date import CreateTrackingRequestOrderPromisedDeliveryDate +from .create_tracking_request_order_promised_delivery_date import ( + CreateTrackingRequestOrderPromisedDeliveryDate, +) from .create_tracking_request_delivery_type import CreateTrackingRequestDeliveryType from .create_tracking_request_last_mile import CreateTrackingRequestLastMile from .create_tracking_request_customers import CreateTrackingRequestCustomers @@ -181,10 +207,14 @@ from .create_tracking_request import CreateTrackingRequest from .create_tracking_response import CreateTrackingResponse from .get_tracking_by_id_response import GetTrackingByIdResponse -from .update_tracking_by_id_request_order_promised_delivery_date import UpdateTrackingByIdRequestOrderPromisedDeliveryDate +from .update_tracking_by_id_request_order_promised_delivery_date import ( + UpdateTrackingByIdRequestOrderPromisedDeliveryDate, +) from .update_tracking_by_id_request_delivery_type import UpdateTrackingByIdRequestDeliveryType from .update_tracking_by_id_request_customers import UpdateTrackingByIdRequestCustomers -from .update_tracking_by_id_request_shipment_direction import UpdateTrackingByIdRequestShipmentDirection +from .update_tracking_by_id_request_shipment_direction import ( + UpdateTrackingByIdRequestShipmentDirection, +) from .update_tracking_by_id_request import UpdateTrackingByIdRequest from .update_tracking_by_id_response import UpdateTrackingByIdResponse from .delete_tracking_by_id_response import DeleteTrackingByIdResponse @@ -198,7 +228,9 @@ from .detect_courier_response_data import DetectCourierResponseData from .detect_courier_response import DetectCourierResponse from .get_courier_connections_response_data import GetCourierConnectionsResponseData -from .get_courier_connections_response_data_pagination import GetCourierConnectionsResponseDataPagination +from .get_courier_connections_response_data_pagination import ( + GetCourierConnectionsResponseDataPagination, +) from .get_courier_connections_response import GetCourierConnectionsResponse from .post_courier_connections_request import PostCourierConnectionsRequest from .post_courier_connections_response import PostCourierConnectionsResponse @@ -210,4 +242,3 @@ from .predict_batch_request import PredictBatchRequest from .predict_batch_response_data import PredictBatchResponseData from .predict_batch_response import PredictBatchResponse - diff --git a/tracking/models/additional_fields.py b/tracking/models/additional_fields.py index 70ddfa1..2bf4e9c 100644 --- a/tracking/models/additional_fields.py +++ b/tracking/models/additional_fields.py @@ -13,6 +13,7 @@ class AdditionalFields(Enum): allowed enum values """ + TRACKING_ACCOUNT_NUMBER = "tracking_account_number" DESTINATION_POSTAL_CODE = "destination_postal_code" DESTINATION_STATE = "destination_state" diff --git a/tracking/models/checkpoint.py b/tracking/models/checkpoint.py index a792714..a6d2a26 100644 --- a/tracking/models/checkpoint.py +++ b/tracking/models/checkpoint.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -20,6 +20,7 @@ class Checkpoint(BaseModel): """ Object describes checkpoint information. """ # noqa: E501 + created_at: Optional[str] = None slug: Optional[str] = None checkpoint_time: Optional[str] = None diff --git a/tracking/models/checkpoint_coordinate.py b/tracking/models/checkpoint_coordinate.py index 650f6ef..969ceb4 100644 --- a/tracking/models/checkpoint_coordinate.py +++ b/tracking/models/checkpoint_coordinate.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class CheckpointCoordinate(BaseModel): """ The latitude and longitude coordinates indicate the precise location of the shipments that are currently in transit. """ # noqa: E501 + latitude: Optional[float] = None longitude: Optional[float] = None diff --git a/tracking/models/checkpoint_events.py b/tracking/models/checkpoint_events.py index fa5644d..39aaba0 100644 --- a/tracking/models/checkpoint_events.py +++ b/tracking/models/checkpoint_events.py @@ -6,8 +6,8 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self from tracking.models.checkpoint_events_reason import CheckpointEventsReason @@ -17,6 +17,7 @@ class CheckpointEvents(BaseModel): """ CheckpointEvents """ # noqa: E501 + code: Optional[str] = None reason: Optional[CheckpointEventsReason] = None diff --git a/tracking/models/checkpoint_events_reason.py b/tracking/models/checkpoint_events_reason.py index c1e1a2c..2718e9a 100644 --- a/tracking/models/checkpoint_events_reason.py +++ b/tracking/models/checkpoint_events_reason.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class CheckpointEventsReason(BaseModel): """ Describes the specific reason that led to the event. """ # noqa: E501 + code: Optional[str] = None def to_str(self, **kwargs) -> str: diff --git a/tracking/models/checkpoint_source.py b/tracking/models/checkpoint_source.py index 22e791c..74c6861 100644 --- a/tracking/models/checkpoint_source.py +++ b/tracking/models/checkpoint_source.py @@ -13,5 +13,6 @@ class CheckpointSource(Enum): allowed enum values """ + CARRIER = "carrier" USER = "user" diff --git a/tracking/models/courier.py b/tracking/models/courier.py index 8b10fc7..c471119 100644 --- a/tracking/models/courier.py +++ b/tracking/models/courier.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -18,6 +18,7 @@ class Courier(BaseModel): """ Courier object """ # noqa: E501 + slug: Optional[str] = None name: Optional[str] = None phone: Optional[str] = None diff --git a/tracking/models/courier_connection.py b/tracking/models/courier_connection.py index 47eff95..a31cc98 100644 --- a/tracking/models/courier_connection.py +++ b/tracking/models/courier_connection.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class CourierConnection(BaseModel): """ This model represents user-created courier connection details. AfterShip will use this information to retrieve tracking updates from carriers based on the provided tracking numbers. """ # noqa: E501 + id: Optional[str] = None courier_slug: Optional[str] = None credentials: Optional[dict] = None diff --git a/tracking/models/courier_connection_response_for_get_courier_connections.py b/tracking/models/courier_connection_response_for_get_courier_connections.py index 843cd21..4ac3b14 100644 --- a/tracking/models/courier_connection_response_for_get_courier_connections.py +++ b/tracking/models/courier_connection_response_for_get_courier_connections.py @@ -6,18 +6,21 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self from tracking.models.meta import Meta -from tracking.models.courier_connection_response_for_get_courier_connections_data import CourierConnectionResponseForGetCourierConnectionsData +from tracking.models.courier_connection_response_for_get_courier_connections_data import ( + CourierConnectionResponseForGetCourierConnectionsData, +) class CourierConnectionResponseForGetCourierConnections(BaseModel): """ Courier connection response for getting courier connections """ # noqa: E501 + meta: Optional[Meta] = None data: Optional[CourierConnectionResponseForGetCourierConnectionsData] = None diff --git a/tracking/models/courier_connection_response_for_get_courier_connections_data.py b/tracking/models/courier_connection_response_for_get_courier_connections_data.py index 30b24db..3da61c8 100644 --- a/tracking/models/courier_connection_response_for_get_courier_connections_data.py +++ b/tracking/models/courier_connection_response_for_get_courier_connections_data.py @@ -6,11 +6,13 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.courier_connection_response_for_get_courier_connections_data_pagination import CourierConnectionResponseForGetCourierConnectionsDataPagination +from tracking.models.courier_connection_response_for_get_courier_connections_data_pagination import ( + CourierConnectionResponseForGetCourierConnectionsDataPagination, +) from tracking.models.courier_connection import CourierConnection @@ -18,6 +20,7 @@ class CourierConnectionResponseForGetCourierConnectionsData(BaseModel): """ CourierConnectionResponseForGetCourierConnectionsData """ # noqa: E501 + pagination: Optional[CourierConnectionResponseForGetCourierConnectionsDataPagination] = None courier_connections: Optional[List[CourierConnection]] = None diff --git a/tracking/models/courier_connection_response_for_get_courier_connections_data_pagination.py b/tracking/models/courier_connection_response_for_get_courier_connections_data_pagination.py index a638eeb..ecfada4 100644 --- a/tracking/models/courier_connection_response_for_get_courier_connections_data_pagination.py +++ b/tracking/models/courier_connection_response_for_get_courier_connections_data_pagination.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class CourierConnectionResponseForGetCourierConnectionsDataPagination(BaseModel): """ CourierConnectionResponseForGetCourierConnectionsDataPagination """ # noqa: E501 + total: Optional[int] = None next_cursor: Optional[str] = None has_next_page: Optional[bool] = None diff --git a/tracking/models/courier_credentials.py b/tracking/models/courier_credentials.py index 38411ac..bab684c 100644 --- a/tracking/models/courier_credentials.py +++ b/tracking/models/courier_credentials.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -17,6 +17,7 @@ class CourierCredentials(BaseModel): """ Refers to the authentication details required for each specific carrier (such as API keys, username, password, etc.) that the user must provide to create a carrier connection. The content varies by carrier. """ # noqa: E501 + fields: Optional[List[CredentialField]] = None def to_str(self, **kwargs) -> str: diff --git a/tracking/models/courier_response.py b/tracking/models/courier_response.py index 35db4e7..45febd8 100644 --- a/tracking/models/courier_response.py +++ b/tracking/models/courier_response.py @@ -6,8 +6,8 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self from tracking.models.meta import Meta @@ -18,6 +18,7 @@ class CourierResponse(BaseModel): """ Model of all couriers endpoint response """ # noqa: E501 + meta: Optional[Meta] = None data: Optional[CourierResponseData] = None diff --git a/tracking/models/courier_response_data.py b/tracking/models/courier_response_data.py index 42d5ec9..6691595 100644 --- a/tracking/models/courier_response_data.py +++ b/tracking/models/courier_response_data.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -17,6 +17,7 @@ class CourierResponseData(BaseModel): """ CourierResponseData """ # noqa: E501 + total: Optional[int] = None couriers: Optional[List[Courier]] = None diff --git a/tracking/models/create_tracking_request.py b/tracking/models/create_tracking_request.py index 347e550..ea00f9b 100644 --- a/tracking/models/create_tracking_request.py +++ b/tracking/models/create_tracking_request.py @@ -6,21 +6,26 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.create_tracking_request_order_promised_delivery_date import CreateTrackingRequestOrderPromisedDeliveryDate +from tracking.models.create_tracking_request_order_promised_delivery_date import ( + CreateTrackingRequestOrderPromisedDeliveryDate, +) from tracking.models.create_tracking_request_delivery_type import CreateTrackingRequestDeliveryType from tracking.models.create_tracking_request_last_mile import CreateTrackingRequestLastMile from tracking.models.create_tracking_request_customers import CreateTrackingRequestCustomers -from tracking.models.create_tracking_request_shipment_direction import CreateTrackingRequestShipmentDirection +from tracking.models.create_tracking_request_shipment_direction import ( + CreateTrackingRequestShipmentDirection, +) class CreateTrackingRequest(BaseModel): """ CreateTrackingRequest """ # noqa: E501 + id: Optional[str] = None tracking_number: Optional[str] = None slug: Optional[str] = None diff --git a/tracking/models/create_tracking_request_customers.py b/tracking/models/create_tracking_request_customers.py index ddfc4cd..c77c535 100644 --- a/tracking/models/create_tracking_request_customers.py +++ b/tracking/models/create_tracking_request_customers.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class CreateTrackingRequestCustomers(BaseModel): """ CreateTrackingRequestCustomers """ # noqa: E501 + role: Optional[str] = None name: Optional[str] = None phone_number: Optional[str] = None diff --git a/tracking/models/create_tracking_request_delivery_type.py b/tracking/models/create_tracking_request_delivery_type.py index a9c2941..ca540bd 100644 --- a/tracking/models/create_tracking_request_delivery_type.py +++ b/tracking/models/create_tracking_request_delivery_type.py @@ -13,6 +13,7 @@ class CreateTrackingRequestDeliveryType(Enum): allowed enum values """ + PICKUP_AT_STORE = "pickup_at_store" DOOR_TO_DOOR = "door_to_door" PICKUP_AT_COURIER = "pickup_at_courier" diff --git a/tracking/models/create_tracking_request_last_mile.py b/tracking/models/create_tracking_request_last_mile.py index cbf81a5..9ea6ca3 100644 --- a/tracking/models/create_tracking_request_last_mile.py +++ b/tracking/models/create_tracking_request_last_mile.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class CreateTrackingRequestLastMile(BaseModel): """ This field contains information about the last leg of the shipment, starting from the carrier who hands it over to the last-mile carrier, all the way to delivery. Once AfterShip detects that the shipment involves multiple legs and identifies the last-mile carrier, we will populate the last-mile carrier information in this object. Alternatively, the user can provide this information in this field to specify the last-mile carrier, which is helpful if AfterShip is unable to detect it automatically. """ # noqa: E501 + tracking_number: Optional[str] = None slug: Optional[str] = None diff --git a/tracking/models/create_tracking_request_order_promised_delivery_date.py b/tracking/models/create_tracking_request_order_promised_delivery_date.py index a490b3c..f91f5bc 100644 --- a/tracking/models/create_tracking_request_order_promised_delivery_date.py +++ b/tracking/models/create_tracking_request_order_promised_delivery_date.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class CreateTrackingRequestOrderPromisedDeliveryDate(BaseModel): """ The promised delivery date of the order in shipment recipient’s timezone. """ # noqa: E501 + promised_delivery_date: Optional[str] = None promised_delivery_date_min: Optional[str] = None promised_delivery_date_max: Optional[str] = None diff --git a/tracking/models/create_tracking_request_shipment_direction.py b/tracking/models/create_tracking_request_shipment_direction.py index 2776112..30d7251 100644 --- a/tracking/models/create_tracking_request_shipment_direction.py +++ b/tracking/models/create_tracking_request_shipment_direction.py @@ -13,5 +13,6 @@ class CreateTrackingRequestShipmentDirection(Enum): allowed enum values """ + FORWARD = "forward" RETURN = "return" diff --git a/tracking/models/create_tracking_response.py b/tracking/models/create_tracking_response.py index cfadc1a..18350cd 100644 --- a/tracking/models/create_tracking_response.py +++ b/tracking/models/create_tracking_response.py @@ -6,16 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.tracking import Tracking + class CreateTrackingResponse(BaseModel): """ Object describes the tracking information.<div style="visibility:hidden; height: 0"></div> """ + response_header: Dict[str, List[str]] = {} data: Optional[Tracking] = None @@ -34,4 +36,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/credential_field.py b/tracking/models/credential_field.py index 44b8201..33cb919 100644 --- a/tracking/models/credential_field.py +++ b/tracking/models/credential_field.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class CredentialField(BaseModel): """ CredentialField """ # noqa: E501 + name: Optional[str] = None type: Optional[str] = None required: Optional[bool] = None diff --git a/tracking/models/delete_courier_connections_by_id_response.py b/tracking/models/delete_courier_connections_by_id_response.py index 067f013..415a1f6 100644 --- a/tracking/models/delete_courier_connections_by_id_response.py +++ b/tracking/models/delete_courier_connections_by_id_response.py @@ -6,16 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.courier_connection import CourierConnection + class DeleteCourierConnectionsByIdResponse(BaseModel): """ This model represents user-created courier connection details. AfterShip will use this information to retrieve tracking updates from carriers based on the provided tracking numbers. """ + response_header: Dict[str, List[str]] = {} data: Optional[CourierConnection] = None @@ -34,4 +36,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/delete_tracking_by_id_response.py b/tracking/models/delete_tracking_by_id_response.py index a57bce0..01d47ad 100644 --- a/tracking/models/delete_tracking_by_id_response.py +++ b/tracking/models/delete_tracking_by_id_response.py @@ -6,16 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.tracking import Tracking + class DeleteTrackingByIdResponse(BaseModel): """ Object describes the tracking information.<div style="visibility:hidden; height: 0"></div> """ + response_header: Dict[str, List[str]] = {} data: Optional[Tracking] = None @@ -34,4 +36,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/detect_courier_request.py b/tracking/models/detect_courier_request.py index b0d9de9..84b4904 100644 --- a/tracking/models/detect_courier_request.py +++ b/tracking/models/detect_courier_request.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self - class DetectCourierRequest(BaseModel): """ DetectCourierRequest """ # noqa: E501 + tracking_number: Optional[str] = None slug: Optional[List[str]] = None destination_postal_code: Optional[str] = None diff --git a/tracking/models/detect_courier_response.py b/tracking/models/detect_courier_response.py index 4fb39a2..6e93be9 100644 --- a/tracking/models/detect_courier_response.py +++ b/tracking/models/detect_courier_response.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.detect_courier_response_data import DetectCourierResponseData + class DetectCourierResponse(BaseModel): - """ - - """ + """ """ + response_header: Dict[str, List[str]] = {} data: Optional[DetectCourierResponseData] = None @@ -34,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/detect_courier_response_data.py b/tracking/models/detect_courier_response_data.py index 3f04ce5..6709a5e 100644 --- a/tracking/models/detect_courier_response_data.py +++ b/tracking/models/detect_courier_response_data.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -17,6 +17,7 @@ class DetectCourierResponseData(BaseModel): """ DetectCourierResponseData """ # noqa: E501 + total: Optional[int] = None couriers: Optional[List[Courier]] = None diff --git a/tracking/models/estimated_delivery_date_request.py b/tracking/models/estimated_delivery_date_request.py index 7c5ee3e..332ee5e 100644 --- a/tracking/models/estimated_delivery_date_request.py +++ b/tracking/models/estimated_delivery_date_request.py @@ -6,20 +6,29 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self -from tracking.models.estimated_delivery_date_request_origin_address import EstimatedDeliveryDateRequestOriginAddress -from tracking.models.estimated_delivery_date_request_destination_address import EstimatedDeliveryDateRequestDestinationAddress -from tracking.models.estimated_delivery_date_request_weight import EstimatedDeliveryDateRequestWeight -from tracking.models.estimated_delivery_date_request_estimated_pickup import EstimatedDeliveryDateRequestEstimatedPickup +from tracking.models.estimated_delivery_date_request_origin_address import ( + EstimatedDeliveryDateRequestOriginAddress, +) +from tracking.models.estimated_delivery_date_request_destination_address import ( + EstimatedDeliveryDateRequestDestinationAddress, +) +from tracking.models.estimated_delivery_date_request_weight import ( + EstimatedDeliveryDateRequestWeight, +) +from tracking.models.estimated_delivery_date_request_estimated_pickup import ( + EstimatedDeliveryDateRequestEstimatedPickup, +) class EstimatedDeliveryDateRequest(BaseModel): """ EstimatedDeliveryDateRequest """ # noqa: E501 + slug: Optional[str] = None service_type_name: Optional[str] = None origin_address: Optional[EstimatedDeliveryDateRequestOriginAddress] = None diff --git a/tracking/models/estimated_delivery_date_request_destination_address.py b/tracking/models/estimated_delivery_date_request_destination_address.py index 05e5f75..45e55ab 100644 --- a/tracking/models/estimated_delivery_date_request_destination_address.py +++ b/tracking/models/estimated_delivery_date_request_destination_address.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class EstimatedDeliveryDateRequestDestinationAddress(BaseModel): """ The final destination of the customer where the delivery will be made. """ # noqa: E501 + country_region: Optional[str] = None state: Optional[str] = None city: Optional[str] = None diff --git a/tracking/models/estimated_delivery_date_request_estimated_pickup.py b/tracking/models/estimated_delivery_date_request_estimated_pickup.py index afcd718..ee37896 100644 --- a/tracking/models/estimated_delivery_date_request_estimated_pickup.py +++ b/tracking/models/estimated_delivery_date_request_estimated_pickup.py @@ -6,21 +6,26 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.estimated_delivery_date_request_estimated_pickup_order_processing_time import EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime +from tracking.models.estimated_delivery_date_request_estimated_pickup_order_processing_time import ( + EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime, +) class EstimatedDeliveryDateRequestEstimatedPickup(BaseModel): """ The local pickup time of the package.
**Either `pickup_time` or `estimated_pickup` is required.** """ # noqa: E501 + order_time: Optional[str] = None order_cutoff_time: Optional[str] = None business_days: Optional[List[int]] = None - order_processing_time: Optional[EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime] = None + order_processing_time: Optional[ + EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime + ] = None def to_str(self, **kwargs) -> str: return pprint.pformat(self.model_dump(**kwargs)) diff --git a/tracking/models/estimated_delivery_date_request_estimated_pickup_order_processing_time.py b/tracking/models/estimated_delivery_date_request_estimated_pickup_order_processing_time.py index fe59efa..c070612 100644 --- a/tracking/models/estimated_delivery_date_request_estimated_pickup_order_processing_time.py +++ b/tracking/models/estimated_delivery_date_request_estimated_pickup_order_processing_time.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime(BaseModel): """ EstimatedDeliveryDateRequestEstimatedPickupOrderProcessingTime """ # noqa: E501 + unit: Optional[str] = None value: Optional[float] = None diff --git a/tracking/models/estimated_delivery_date_request_origin_address.py b/tracking/models/estimated_delivery_date_request_origin_address.py index a6a5c40..9c94edd 100644 --- a/tracking/models/estimated_delivery_date_request_origin_address.py +++ b/tracking/models/estimated_delivery_date_request_origin_address.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class EstimatedDeliveryDateRequestOriginAddress(BaseModel): """ The location from where the package is picked up by the carrier to be delivered to the final destination. """ # noqa: E501 + country_region: Optional[str] = None state: Optional[str] = None city: Optional[str] = None diff --git a/tracking/models/estimated_delivery_date_request_weight.py b/tracking/models/estimated_delivery_date_request_weight.py index 2bb4a5c..8db5bbc 100644 --- a/tracking/models/estimated_delivery_date_request_weight.py +++ b/tracking/models/estimated_delivery_date_request_weight.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class EstimatedDeliveryDateRequestWeight(BaseModel): """ AfterShip uses this object to calculate the total weight of the order. """ # noqa: E501 + unit: Optional[str] = None value: Optional[float] = None diff --git a/tracking/models/estimated_delivery_date_response.py b/tracking/models/estimated_delivery_date_response.py index 87abf42..403066b 100644 --- a/tracking/models/estimated_delivery_date_response.py +++ b/tracking/models/estimated_delivery_date_response.py @@ -6,20 +6,29 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self -from tracking.models.estimated_delivery_date_response_origin_address import EstimatedDeliveryDateResponseOriginAddress -from tracking.models.estimated_delivery_date_response_destination_address import EstimatedDeliveryDateResponseDestinationAddress -from tracking.models.estimated_delivery_date_response_weight import EstimatedDeliveryDateResponseWeight -from tracking.models.estimated_delivery_date_response_estimated_pickup import EstimatedDeliveryDateResponseEstimatedPickup +from tracking.models.estimated_delivery_date_response_origin_address import ( + EstimatedDeliveryDateResponseOriginAddress, +) +from tracking.models.estimated_delivery_date_response_destination_address import ( + EstimatedDeliveryDateResponseDestinationAddress, +) +from tracking.models.estimated_delivery_date_response_weight import ( + EstimatedDeliveryDateResponseWeight, +) +from tracking.models.estimated_delivery_date_response_estimated_pickup import ( + EstimatedDeliveryDateResponseEstimatedPickup, +) class EstimatedDeliveryDateResponse(BaseModel): """ EstimatedDeliveryDateResponse """ # noqa: E501 + id: Optional[str] = None slug: Optional[str] = None service_type_name: Optional[str] = None diff --git a/tracking/models/estimated_delivery_date_response_destination_address.py b/tracking/models/estimated_delivery_date_response_destination_address.py index 1f6ac8c..362ab56 100644 --- a/tracking/models/estimated_delivery_date_response_destination_address.py +++ b/tracking/models/estimated_delivery_date_response_destination_address.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class EstimatedDeliveryDateResponseDestinationAddress(BaseModel): """ The final destination of the customer where the delivery will be made. """ # noqa: E501 + country_region: Optional[str] = None state: Optional[str] = None city: Optional[str] = None diff --git a/tracking/models/estimated_delivery_date_response_estimated_pickup.py b/tracking/models/estimated_delivery_date_response_estimated_pickup.py index 78818c1..5eff390 100644 --- a/tracking/models/estimated_delivery_date_response_estimated_pickup.py +++ b/tracking/models/estimated_delivery_date_response_estimated_pickup.py @@ -6,21 +6,26 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.estimated_delivery_date_response_estimated_pickup_order_processing_time import EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime +from tracking.models.estimated_delivery_date_response_estimated_pickup_order_processing_time import ( + EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime, +) class EstimatedDeliveryDateResponseEstimatedPickup(BaseModel): """ The local pickup time of the package.Either `pickup_time` or `estimated_pickup` is required. """ # noqa: E501 + order_time: Optional[str] = None order_cutoff_time: Optional[str] = None business_days: Optional[List[int]] = None - order_processing_time: Optional[EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime] = None + order_processing_time: Optional[ + EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime + ] = None pickup_time: Optional[str] = None def to_str(self, **kwargs) -> str: diff --git a/tracking/models/estimated_delivery_date_response_estimated_pickup_order_processing_time.py b/tracking/models/estimated_delivery_date_response_estimated_pickup_order_processing_time.py index d82be85..e148aec 100644 --- a/tracking/models/estimated_delivery_date_response_estimated_pickup_order_processing_time.py +++ b/tracking/models/estimated_delivery_date_response_estimated_pickup_order_processing_time.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime(BaseModel): """ EstimatedDeliveryDateResponseEstimatedPickupOrderProcessingTime """ # noqa: E501 + unit: Optional[str] = None value: Optional[float] = None diff --git a/tracking/models/estimated_delivery_date_response_origin_address.py b/tracking/models/estimated_delivery_date_response_origin_address.py index 3c3514a..43e1af7 100644 --- a/tracking/models/estimated_delivery_date_response_origin_address.py +++ b/tracking/models/estimated_delivery_date_response_origin_address.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class EstimatedDeliveryDateResponseOriginAddress(BaseModel): """ The location from where the package is picked up by the carrier to be delivered to the final destination. """ # noqa: E501 + country_region: Optional[str] = None state: Optional[str] = None city: Optional[str] = None diff --git a/tracking/models/estimated_delivery_date_response_weight.py b/tracking/models/estimated_delivery_date_response_weight.py index b43822e..066ba12 100644 --- a/tracking/models/estimated_delivery_date_response_weight.py +++ b/tracking/models/estimated_delivery_date_response_weight.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class EstimatedDeliveryDateResponseWeight(BaseModel): """ AfterShip uses this object to calculate the total weight of the order. """ # noqa: E501 + unit: Optional[str] = None value: Optional[float] = None diff --git a/tracking/models/get_courier_connections_by_id_response.py b/tracking/models/get_courier_connections_by_id_response.py index 3758736..75968eb 100644 --- a/tracking/models/get_courier_connections_by_id_response.py +++ b/tracking/models/get_courier_connections_by_id_response.py @@ -6,16 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.courier_connection import CourierConnection + class GetCourierConnectionsByIdResponse(BaseModel): """ This model represents user-created courier connection details. AfterShip will use this information to retrieve tracking updates from carriers based on the provided tracking numbers. """ + response_header: Dict[str, List[str]] = {} data: Optional[CourierConnection] = None @@ -34,4 +36,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/get_courier_connections_response.py b/tracking/models/get_courier_connections_response.py index 275a141..a900b27 100644 --- a/tracking/models/get_courier_connections_response.py +++ b/tracking/models/get_courier_connections_response.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.get_courier_connections_response_data import GetCourierConnectionsResponseData + class GetCourierConnectionsResponse(BaseModel): - """ - - """ + """ """ + response_header: Dict[str, List[str]] = {} data: Optional[GetCourierConnectionsResponseData] = None @@ -34,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/get_courier_connections_response_data.py b/tracking/models/get_courier_connections_response_data.py index 204b088..e0cb997 100644 --- a/tracking/models/get_courier_connections_response_data.py +++ b/tracking/models/get_courier_connections_response_data.py @@ -6,11 +6,13 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.get_courier_connections_response_data_pagination import GetCourierConnectionsResponseDataPagination +from tracking.models.get_courier_connections_response_data_pagination import ( + GetCourierConnectionsResponseDataPagination, +) from tracking.models.courier_connection import CourierConnection @@ -18,6 +20,7 @@ class GetCourierConnectionsResponseData(BaseModel): """ GetCourierConnectionsResponseData """ # noqa: E501 + pagination: Optional[GetCourierConnectionsResponseDataPagination] = None courier_connections: Optional[List[CourierConnection]] = None diff --git a/tracking/models/get_courier_connections_response_data_pagination.py b/tracking/models/get_courier_connections_response_data_pagination.py index cec40f5..f7f719c 100644 --- a/tracking/models/get_courier_connections_response_data_pagination.py +++ b/tracking/models/get_courier_connections_response_data_pagination.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class GetCourierConnectionsResponseDataPagination(BaseModel): """ GetCourierConnectionsResponseDataPagination """ # noqa: E501 + total: Optional[int] = None next_cursor: Optional[str] = None has_next_page: Optional[bool] = None diff --git a/tracking/models/get_couriers_response.py b/tracking/models/get_couriers_response.py index 88df888..6fa96db 100644 --- a/tracking/models/get_couriers_response.py +++ b/tracking/models/get_couriers_response.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.get_couriers_response_data import GetCouriersResponseData + class GetCouriersResponse(BaseModel): - """ - - """ + """ """ + response_header: Dict[str, List[str]] = {} data: Optional[GetCouriersResponseData] = None @@ -34,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/get_couriers_response_data.py b/tracking/models/get_couriers_response_data.py index 19d4a79..ed28b43 100644 --- a/tracking/models/get_couriers_response_data.py +++ b/tracking/models/get_couriers_response_data.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -17,6 +17,7 @@ class GetCouriersResponseData(BaseModel): """ GetCouriersResponseData """ # noqa: E501 + total: Optional[int] = None couriers: Optional[List[Courier]] = None diff --git a/tracking/models/get_tracking_by_id_response.py b/tracking/models/get_tracking_by_id_response.py index 4579fc7..5d4fbbe 100644 --- a/tracking/models/get_tracking_by_id_response.py +++ b/tracking/models/get_tracking_by_id_response.py @@ -6,16 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.tracking import Tracking + class GetTrackingByIdResponse(BaseModel): """ Object describes the tracking information.<div style="visibility:hidden; height: 0"></div> """ + response_header: Dict[str, List[str]] = {} data: Optional[Tracking] = None @@ -34,4 +36,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/get_trackings_response.py b/tracking/models/get_trackings_response.py index 45bf078..034ec16 100644 --- a/tracking/models/get_trackings_response.py +++ b/tracking/models/get_trackings_response.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.get_trackings_response_data import GetTrackingsResponseData + class GetTrackingsResponse(BaseModel): - """ - - """ + """ """ + response_header: Dict[str, List[str]] = {} data: Optional[GetTrackingsResponseData] = None @@ -34,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/get_trackings_response_data.py b/tracking/models/get_trackings_response_data.py index f9f4267..b2318bf 100644 --- a/tracking/models/get_trackings_response_data.py +++ b/tracking/models/get_trackings_response_data.py @@ -6,11 +6,13 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.get_trackings_response_data_pagination import GetTrackingsResponseDataPagination +from tracking.models.get_trackings_response_data_pagination import ( + GetTrackingsResponseDataPagination, +) from tracking.models.tracking import Tracking @@ -18,6 +20,7 @@ class GetTrackingsResponseData(BaseModel): """ GetTrackingsResponseData """ # noqa: E501 + pagination: Optional[GetTrackingsResponseDataPagination] = None trackings: Optional[List[Tracking]] = None diff --git a/tracking/models/get_trackings_response_data_pagination.py b/tracking/models/get_trackings_response_data_pagination.py index a68e29e..a39229b 100644 --- a/tracking/models/get_trackings_response_data_pagination.py +++ b/tracking/models/get_trackings_response_data_pagination.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class GetTrackingsResponseDataPagination(BaseModel): """ The Pagination holds the information for the pagination when the response contains multiple objects. """ # noqa: E501 + total: Optional[int] = None next_cursor: Optional[str] = None has_next_page: Optional[bool] = None diff --git a/tracking/models/mark_tracking_completed_by_id_request.py b/tracking/models/mark_tracking_completed_by_id_request.py index 22f4df1..a7fbbfb 100644 --- a/tracking/models/mark_tracking_completed_by_id_request.py +++ b/tracking/models/mark_tracking_completed_by_id_request.py @@ -6,17 +6,20 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self -from tracking.models.mark_tracking_completed_by_id_request_reason import MarkTrackingCompletedByIdRequestReason +from tracking.models.mark_tracking_completed_by_id_request_reason import ( + MarkTrackingCompletedByIdRequestReason, +) class MarkTrackingCompletedByIdRequest(BaseModel): """ MarkTrackingCompletedByIdRequest """ # noqa: E501 + reason: Optional[MarkTrackingCompletedByIdRequestReason] = None event_datetime: Optional[str] = None diff --git a/tracking/models/mark_tracking_completed_by_id_request_reason.py b/tracking/models/mark_tracking_completed_by_id_request_reason.py index f0549b1..b6acf4f 100644 --- a/tracking/models/mark_tracking_completed_by_id_request_reason.py +++ b/tracking/models/mark_tracking_completed_by_id_request_reason.py @@ -13,6 +13,7 @@ class MarkTrackingCompletedByIdRequestReason(Enum): allowed enum values """ + DELIVERED = "DELIVERED" LOST = "LOST" RETURNED_TO_SENDER = "RETURNED_TO_SENDER" diff --git a/tracking/models/mark_tracking_completed_by_id_response.py b/tracking/models/mark_tracking_completed_by_id_response.py index 9e61705..14adcdd 100644 --- a/tracking/models/mark_tracking_completed_by_id_response.py +++ b/tracking/models/mark_tracking_completed_by_id_response.py @@ -6,16 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.tracking import Tracking + class MarkTrackingCompletedByIdResponse(BaseModel): """ Object describes the tracking information.<div style="visibility:hidden; height: 0"></div> """ + response_header: Dict[str, List[str]] = {} data: Optional[Tracking] = None @@ -34,4 +36,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/meta.py b/tracking/models/meta.py index c3afbe2..fd69610 100644 --- a/tracking/models/meta.py +++ b/tracking/models/meta.py @@ -6,8 +6,8 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self from tracking.models.meta_type import MetaType @@ -17,6 +17,7 @@ class Meta(BaseModel): """ Meta data """ # noqa: E501 + code: Optional[int] = None message: Optional[str] = None type: Optional[MetaType] = None diff --git a/tracking/models/meta_type.py b/tracking/models/meta_type.py index 0105262..e03a71d 100644 --- a/tracking/models/meta_type.py +++ b/tracking/models/meta_type.py @@ -13,6 +13,7 @@ class MetaType(Enum): allowed enum values """ + BAD_REQUEST = "BadRequest" UNAUTHORIZED = "Unauthorized" FORBIDDEN = "Forbidden" diff --git a/tracking/models/post_courier_connections_request.py b/tracking/models/post_courier_connections_request.py index ced88e3..e1e3c2a 100644 --- a/tracking/models/post_courier_connections_request.py +++ b/tracking/models/post_courier_connections_request.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class PostCourierConnectionsRequest(BaseModel): """ PostCourierConnectionsRequest """ # noqa: E501 + courier_slug: Optional[str] = None credentials: Optional[dict] = None diff --git a/tracking/models/post_courier_connections_response.py b/tracking/models/post_courier_connections_response.py index 973d597..afb4af9 100644 --- a/tracking/models/post_courier_connections_response.py +++ b/tracking/models/post_courier_connections_response.py @@ -6,16 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.courier_connection import CourierConnection + class PostCourierConnectionsResponse(BaseModel): """ This model represents user-created courier connection details. AfterShip will use this information to retrieve tracking updates from carriers based on the provided tracking numbers. """ + response_header: Dict[str, List[str]] = {} data: Optional[CourierConnection] = None @@ -34,4 +36,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/predict_batch_request.py b/tracking/models/predict_batch_request.py index 6c99305..2812707 100644 --- a/tracking/models/predict_batch_request.py +++ b/tracking/models/predict_batch_request.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -17,6 +17,7 @@ class PredictBatchRequest(BaseModel): """ PredictBatchRequest """ # noqa: E501 + estimated_delivery_dates: Optional[List[EstimatedDeliveryDateRequest]] = None def to_str(self, **kwargs) -> str: diff --git a/tracking/models/predict_batch_response.py b/tracking/models/predict_batch_response.py index cccf680..dc0161a 100644 --- a/tracking/models/predict_batch_response.py +++ b/tracking/models/predict_batch_response.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.predict_batch_response_data import PredictBatchResponseData + class PredictBatchResponse(BaseModel): - """ - - """ + """ """ + response_header: Dict[str, List[str]] = {} data: Optional[PredictBatchResponseData] = None @@ -34,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/predict_batch_response_data.py b/tracking/models/predict_batch_response_data.py index b535f90..cea29ef 100644 --- a/tracking/models/predict_batch_response_data.py +++ b/tracking/models/predict_batch_response_data.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -17,6 +17,7 @@ class PredictBatchResponseData(BaseModel): """ PredictBatchResponseData """ # noqa: E501 + estimated_delivery_dates: Optional[List[EstimatedDeliveryDateResponse]] = None def to_str(self, **kwargs) -> str: diff --git a/tracking/models/predict_response.py b/tracking/models/predict_response.py index f33bd53..2ca0dc0 100644 --- a/tracking/models/predict_response.py +++ b/tracking/models/predict_response.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.estimated_delivery_date_response import EstimatedDeliveryDateResponse + class PredictResponse(BaseModel): - """ - - """ + """ """ + response_header: Dict[str, List[str]] = {} data: Optional[EstimatedDeliveryDateResponse] = None @@ -34,4 +34,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/put_courier_connections_by_id_request.py b/tracking/models/put_courier_connections_by_id_request.py index 01c979f..75eb2b3 100644 --- a/tracking/models/put_courier_connections_by_id_request.py +++ b/tracking/models/put_courier_connections_by_id_request.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class PutCourierConnectionsByIdRequest(BaseModel): """ PutCourierConnectionsByIdRequest """ # noqa: E501 + credentials: Optional[dict] = None def to_str(self, **kwargs) -> str: diff --git a/tracking/models/put_courier_connections_by_id_response.py b/tracking/models/put_courier_connections_by_id_response.py index 0898b2f..ee736d3 100644 --- a/tracking/models/put_courier_connections_by_id_response.py +++ b/tracking/models/put_courier_connections_by_id_response.py @@ -6,16 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.courier_connection import CourierConnection + class PutCourierConnectionsByIdResponse(BaseModel): """ This model represents user-created courier connection details. AfterShip will use this information to retrieve tracking updates from carriers based on the provided tracking numbers. """ + response_header: Dict[str, List[str]] = {} data: Optional[CourierConnection] = None @@ -34,4 +36,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/retrack_tracking_by_id_response.py b/tracking/models/retrack_tracking_by_id_response.py index af81cce..38fb7a2 100644 --- a/tracking/models/retrack_tracking_by_id_response.py +++ b/tracking/models/retrack_tracking_by_id_response.py @@ -6,16 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.tracking import Tracking + class RetrackTrackingByIdResponse(BaseModel): """ Object describes the tracking information.<div style="visibility:hidden; height: 0"></div> """ + response_header: Dict[str, List[str]] = {} data: Optional[Tracking] = None @@ -34,4 +36,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/models/tag.py b/tracking/models/tag.py index 417b017..33d6e39 100644 --- a/tracking/models/tag.py +++ b/tracking/models/tag.py @@ -13,6 +13,7 @@ class Tag(Enum): allowed enum values """ + PENDING = "Pending" INFO_RECEIVED = "InfoReceived" IN_TRANSIT = "InTransit" diff --git a/tracking/models/tracking.py b/tracking/models/tracking.py index 119d972..33793c9 100644 --- a/tracking/models/tracking.py +++ b/tracking/models/tracking.py @@ -6,18 +6,24 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.tracking_courier_estimated_delivery_date import TrackingCourierEstimatedDeliveryDate +from tracking.models.tracking_courier_estimated_delivery_date import ( + TrackingCourierEstimatedDeliveryDate, +) from tracking.models.tracking_shipment_weight import TrackingShipmentWeight from tracking.models.tracking_shipment_dimensions import TrackingShipmentDimensions from tracking.models.tag import Tag from tracking.models.checkpoint import Checkpoint from tracking.models.tracking_order_promised_delivery_date import TrackingOrderPromisedDeliveryDate -from tracking.models.tracking_aftership_estimated_delivery_date import TrackingAftershipEstimatedDeliveryDate -from tracking.models.tracking_custom_estimated_delivery_date import TrackingCustomEstimatedDeliveryDate +from tracking.models.tracking_aftership_estimated_delivery_date import ( + TrackingAftershipEstimatedDeliveryDate, +) +from tracking.models.tracking_custom_estimated_delivery_date import ( + TrackingCustomEstimatedDeliveryDate, +) from tracking.models.tracking_first_estimated_delivery import TrackingFirstEstimatedDelivery from tracking.models.tracking_latest_estimated_delivery import TrackingLatestEstimatedDelivery from tracking.models.tracking_carbon_emissions import TrackingCarbonEmissions @@ -36,6 +42,7 @@ class Tracking(BaseModel): """ Object describes the tracking information.
""" # noqa: E501 + id: Optional[str] = None legacy_id: Optional[str] = None created_at: Optional[str] = None diff --git a/tracking/models/tracking_aftership_estimated_delivery_date.py b/tracking/models/tracking_aftership_estimated_delivery_date.py index 09ea507..4ca6167 100644 --- a/tracking/models/tracking_aftership_estimated_delivery_date.py +++ b/tracking/models/tracking_aftership_estimated_delivery_date.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class TrackingAftershipEstimatedDeliveryDate(BaseModel): """ The estimated delivery date of the shipment provided by AfterShip’s AI and shown to the recipients. It uses the format `YYYY-MM-DD` based on the shipment recipient’s timezone. """ # noqa: E501 + estimated_delivery_date: Optional[str] = None confidence_code: Optional[float] = None estimated_delivery_date_min: Optional[str] = None diff --git a/tracking/models/tracking_carbon_emissions.py b/tracking/models/tracking_carbon_emissions.py index 915b764..27b04bd 100644 --- a/tracking/models/tracking_carbon_emissions.py +++ b/tracking/models/tracking_carbon_emissions.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class TrackingCarbonEmissions(BaseModel): """ The model contains the total amount of carbon emissions generated by the shipment. - AfterShip will provide this data only when it is available, and its availability is contingent upon the location and weight information that AfterShip can obtain.- The values will be accessible solely for shipments that have been successfully delivered. However, in the event of a shipping update after the delivery status has been achieved, the value may change.- It’s a paid service and only for Tracking Enterprise users, please contact your customer success manager if you want to know more. """ # noqa: E501 + unit: Optional[str] = None value: Optional[float] = None diff --git a/tracking/models/tracking_courier_estimated_delivery_date.py b/tracking/models/tracking_courier_estimated_delivery_date.py index 23c6482..223a3b5 100644 --- a/tracking/models/tracking_courier_estimated_delivery_date.py +++ b/tracking/models/tracking_courier_estimated_delivery_date.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class TrackingCourierEstimatedDeliveryDate(BaseModel): """ The field contains the estimated delivery date provided by the carrier. """ # noqa: E501 + estimated_delivery_date: Optional[str] = None estimated_delivery_date_min: Optional[str] = None estimated_delivery_date_max: Optional[str] = None diff --git a/tracking/models/tracking_custom_estimated_delivery_date.py b/tracking/models/tracking_custom_estimated_delivery_date.py index 1a3975b..2569727 100644 --- a/tracking/models/tracking_custom_estimated_delivery_date.py +++ b/tracking/models/tracking_custom_estimated_delivery_date.py @@ -6,17 +6,20 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self -from tracking.models.tracking_custom_estimated_delivery_date_type import TrackingCustomEstimatedDeliveryDateType +from tracking.models.tracking_custom_estimated_delivery_date_type import ( + TrackingCustomEstimatedDeliveryDateType, +) class TrackingCustomEstimatedDeliveryDate(BaseModel): """ Estimated delivery time of the shipment based on your . It uses the format `YYYY-MM-DD` based on the shipment recipient’s timezone. """ # noqa: E501 + type: Optional[TrackingCustomEstimatedDeliveryDateType] = None datetime: Optional[str] = None datetime_min: Optional[str] = None diff --git a/tracking/models/tracking_custom_estimated_delivery_date_type.py b/tracking/models/tracking_custom_estimated_delivery_date_type.py index 8956245..60f6f50 100644 --- a/tracking/models/tracking_custom_estimated_delivery_date_type.py +++ b/tracking/models/tracking_custom_estimated_delivery_date_type.py @@ -13,5 +13,6 @@ class TrackingCustomEstimatedDeliveryDateType(Enum): allowed enum values """ + RANGE = "range" SPECIFIC = "specific" diff --git a/tracking/models/tracking_customers.py b/tracking/models/tracking_customers.py index 92eccf0..f24cf00 100644 --- a/tracking/models/tracking_customers.py +++ b/tracking/models/tracking_customers.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class TrackingCustomers(BaseModel): """ TrackingCustomers """ # noqa: E501 + role: Optional[str] = None name: Optional[str] = None phone_number: Optional[str] = None diff --git a/tracking/models/tracking_first_estimated_delivery.py b/tracking/models/tracking_first_estimated_delivery.py index 169d23a..ef08524 100644 --- a/tracking/models/tracking_first_estimated_delivery.py +++ b/tracking/models/tracking_first_estimated_delivery.py @@ -6,18 +6,23 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self -from tracking.models.tracking_first_estimated_delivery_type import TrackingFirstEstimatedDeliveryType -from tracking.models.tracking_first_estimated_delivery_source import TrackingFirstEstimatedDeliverySource +from tracking.models.tracking_first_estimated_delivery_type import ( + TrackingFirstEstimatedDeliveryType, +) +from tracking.models.tracking_first_estimated_delivery_source import ( + TrackingFirstEstimatedDeliverySource, +) class TrackingFirstEstimatedDelivery(BaseModel): """ The shipment’s original estimated delivery date. It could be provided by the carrier, AfterShip AI, or based on your custom settings. The format of carrier EDDs may differ depending on how the carrier provides it:- YYYY-MM-DD- YYYY-MM-DDTHH:mm:ss- YYYY-MM-DDTHH:mm:ssZ AfterShip AI and custom EDDs always use the format `YYYY-MM-DD`. All EDDs use the shipment recipient’s timezone. """ # noqa: E501 + type: Optional[TrackingFirstEstimatedDeliveryType] = None source: Optional[TrackingFirstEstimatedDeliverySource] = None datetime: Optional[str] = None diff --git a/tracking/models/tracking_first_estimated_delivery_source.py b/tracking/models/tracking_first_estimated_delivery_source.py index 1556bad..6aeca6a 100644 --- a/tracking/models/tracking_first_estimated_delivery_source.py +++ b/tracking/models/tracking_first_estimated_delivery_source.py @@ -13,6 +13,7 @@ class TrackingFirstEstimatedDeliverySource(Enum): allowed enum values """ + CARRIER_EDD = "Carrier EDD" AFTER_SHIP_EDD = "AfterShip EDD" CUSTOM_EDD = "Custom EDD" diff --git a/tracking/models/tracking_first_estimated_delivery_type.py b/tracking/models/tracking_first_estimated_delivery_type.py index 01f4e51..3ed8494 100644 --- a/tracking/models/tracking_first_estimated_delivery_type.py +++ b/tracking/models/tracking_first_estimated_delivery_type.py @@ -13,5 +13,6 @@ class TrackingFirstEstimatedDeliveryType(Enum): allowed enum values """ + RANGE = "range" SPECIFIC = "specific" diff --git a/tracking/models/tracking_first_mile.py b/tracking/models/tracking_first_mile.py index 97bbe46..7a03d19 100644 --- a/tracking/models/tracking_first_mile.py +++ b/tracking/models/tracking_first_mile.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class TrackingFirstMile(BaseModel): """ - The field contains information about the first leg of the shipping starting from the carrier picking up the shipment from the shipper to the point where they hand it over to the last-mile carrier. Once AfterShip detects the shipment is multi-leg, we will populate the first-mile information under this object. + The field contains information about the first leg of the shipping starting from the carrier picking up the shipment from the shipper to the point where they hand it over to the last-mile carrier. Once AfterShip detects the shipment is multi-leg, we will populate the first-mile information under this object. """ # noqa: E501 + tracking_number: Optional[str] = None slug: Optional[str] = None transit_time: Optional[int] = None diff --git a/tracking/models/tracking_forward_shipment.py b/tracking/models/tracking_forward_shipment.py index dfebb77..ba26313 100644 --- a/tracking/models/tracking_forward_shipment.py +++ b/tracking/models/tracking_forward_shipment.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class TrackingForwardShipment(BaseModel): """ The original outbound shipment linked to this return. Use this to trace a return back to its source delivery.This field is only present when `shipment_direction = "return"` and AfterShip has detected a linked forward shipment. """ # noqa: E501 + id: Optional[str] = None def to_str(self, **kwargs) -> str: diff --git a/tracking/models/tracking_last_mile.py b/tracking/models/tracking_last_mile.py index eb3cb41..49c79f3 100644 --- a/tracking/models/tracking_last_mile.py +++ b/tracking/models/tracking_last_mile.py @@ -6,8 +6,8 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self from tracking.models.tracking_last_mile_source import TrackingLastMileSource @@ -17,6 +17,7 @@ class TrackingLastMile(BaseModel): """ This field contains information about the last leg of the shipment, starting from the carrier who hands it over to the last-mile carrier, all the way to delivery. Once AfterShip detects that the shipment involves multiple legs and identifies the last-mile carrier, we will populate the last-mile carrier information in this object. Alternatively, the user can provide this information in this field to specify the last-mile carrier, which is helpful if AfterShip is unable to detect it automatically. """ # noqa: E501 + tracking_number: Optional[str] = None slug: Optional[str] = None transit_time: Optional[int] = None diff --git a/tracking/models/tracking_last_mile_source.py b/tracking/models/tracking_last_mile_source.py index b7b1df1..6d04ea8 100644 --- a/tracking/models/tracking_last_mile_source.py +++ b/tracking/models/tracking_last_mile_source.py @@ -13,5 +13,6 @@ class TrackingLastMileSource(Enum): allowed enum values """ + SYSTEM = "system" USER = "user" diff --git a/tracking/models/tracking_latest_estimated_delivery.py b/tracking/models/tracking_latest_estimated_delivery.py index fdfd729..30d0c8a 100644 --- a/tracking/models/tracking_latest_estimated_delivery.py +++ b/tracking/models/tracking_latest_estimated_delivery.py @@ -6,18 +6,23 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self -from tracking.models.tracking_latest_estimated_delivery_type import TrackingLatestEstimatedDeliveryType -from tracking.models.tracking_latest_estimated_delivery_source import TrackingLatestEstimatedDeliverySource +from tracking.models.tracking_latest_estimated_delivery_type import ( + TrackingLatestEstimatedDeliveryType, +) +from tracking.models.tracking_latest_estimated_delivery_source import ( + TrackingLatestEstimatedDeliverySource, +) class TrackingLatestEstimatedDelivery(BaseModel): """ The most recently calculated estimated delivery date. It could be provided by the carrier, AfterShip AI, or based on your custom settings. The format of carrier EDDs may differ depending on how the carrier provides it:- YYYY-MM-DD- YYYY-MM-DDTHH:mm:ss- YYYY-MM-DDTHH:mm:ssZ AfterShip AI and custom EDDs always use the format `YYYY-MM-DD`. All EDDs use the shipment recipient’s timezone. """ # noqa: E501 + type: Optional[TrackingLatestEstimatedDeliveryType] = None source: Optional[TrackingLatestEstimatedDeliverySource] = None datetime: Optional[str] = None diff --git a/tracking/models/tracking_latest_estimated_delivery_source.py b/tracking/models/tracking_latest_estimated_delivery_source.py index f0d0167..080b55d 100644 --- a/tracking/models/tracking_latest_estimated_delivery_source.py +++ b/tracking/models/tracking_latest_estimated_delivery_source.py @@ -13,6 +13,7 @@ class TrackingLatestEstimatedDeliverySource(Enum): allowed enum values """ + CARRIER_EDD = "Carrier EDD" AFTER_SHIP_EDD = "AfterShip EDD" CUSTOM_EDD = "Custom EDD" diff --git a/tracking/models/tracking_latest_estimated_delivery_type.py b/tracking/models/tracking_latest_estimated_delivery_type.py index 5e6a9cb..676d5f4 100644 --- a/tracking/models/tracking_latest_estimated_delivery_type.py +++ b/tracking/models/tracking_latest_estimated_delivery_type.py @@ -13,5 +13,6 @@ class TrackingLatestEstimatedDeliveryType(Enum): allowed enum values """ + RANGE = "range" SPECIFIC = "specific" diff --git a/tracking/models/tracking_multi_piece_info.py b/tracking/models/tracking_multi_piece_info.py index 1d29636..b066d8a 100644 --- a/tracking/models/tracking_multi_piece_info.py +++ b/tracking/models/tracking_multi_piece_info.py @@ -6,7 +6,7 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self @@ -18,6 +18,7 @@ class TrackingMultiPieceInfo(BaseModel): """ Multi-piece shipment refers to a scenario where a single shipment order is fulfilled by multiple physical packages. Each piece has its own carrier-assigned tracking number, but all pieces belong to the same shipment. This commonly occurs when an order is too large to fit in one box, or when items are packed separately for handling reasons.This field contains multi-piece shipment metadata describing a group of packages that belong to the same shipment.This field returns a value only when your subscription plan includes a multi-piece feature. To enable, go to . """ # noqa: E501 + type: Optional[TrackingMultiPieceInfoType] = None pieces: Optional[List[TrackingMultiPieceInfoPieces]] = None diff --git a/tracking/models/tracking_multi_piece_info_pieces.py b/tracking/models/tracking_multi_piece_info_pieces.py index 46ea208..3ad1755 100644 --- a/tracking/models/tracking_multi_piece_info_pieces.py +++ b/tracking/models/tracking_multi_piece_info_pieces.py @@ -6,8 +6,8 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self from tracking.models.tracking_multi_piece_info_pieces_type import TrackingMultiPieceInfoPiecesType @@ -17,6 +17,7 @@ class TrackingMultiPieceInfoPieces(BaseModel): """ TrackingMultiPieceInfoPieces """ # noqa: E501 + tracking_id: Optional[str] = None tracking_number: Optional[str] = None type: Optional[TrackingMultiPieceInfoPiecesType] = None diff --git a/tracking/models/tracking_multi_piece_info_pieces_type.py b/tracking/models/tracking_multi_piece_info_pieces_type.py index d151230..57b35c7 100644 --- a/tracking/models/tracking_multi_piece_info_pieces_type.py +++ b/tracking/models/tracking_multi_piece_info_pieces_type.py @@ -13,5 +13,6 @@ class TrackingMultiPieceInfoPiecesType(Enum): allowed enum values """ + MASTER = "master" CHILD = "child" diff --git a/tracking/models/tracking_multi_piece_info_type.py b/tracking/models/tracking_multi_piece_info_type.py index 080a473..4725cba 100644 --- a/tracking/models/tracking_multi_piece_info_type.py +++ b/tracking/models/tracking_multi_piece_info_type.py @@ -13,5 +13,6 @@ class TrackingMultiPieceInfoType(Enum): allowed enum values """ + MASTER = "master" CHILD = "child" diff --git a/tracking/models/tracking_order_promised_delivery_date.py b/tracking/models/tracking_order_promised_delivery_date.py index d6f018b..95d1689 100644 --- a/tracking/models/tracking_order_promised_delivery_date.py +++ b/tracking/models/tracking_order_promised_delivery_date.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class TrackingOrderPromisedDeliveryDate(BaseModel): """ The promised delivery date of the order in shipment recipient’s timezone. """ # noqa: E501 + promised_delivery_date: Optional[str] = None promised_delivery_date_min: Optional[str] = None promised_delivery_date_max: Optional[str] = None diff --git a/tracking/models/tracking_proof_of_delivery.py b/tracking/models/tracking_proof_of_delivery.py index 08f387e..932d2a7 100644 --- a/tracking/models/tracking_proof_of_delivery.py +++ b/tracking/models/tracking_proof_of_delivery.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class TrackingProofOfDelivery(BaseModel): """ TrackingProofOfDelivery """ # noqa: E501 + type: Optional[str] = None url: Optional[str] = None diff --git a/tracking/models/tracking_response.py b/tracking/models/tracking_response.py index 41a0d46..44fd8d9 100644 --- a/tracking/models/tracking_response.py +++ b/tracking/models/tracking_response.py @@ -6,8 +6,8 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self from tracking.models.meta import Meta @@ -18,6 +18,7 @@ class TrackingResponse(BaseModel): """ Tracking response for returning single tracking """ # noqa: E501 + meta: Optional[Meta] = None data: Optional[Tracking] = None diff --git a/tracking/models/tracking_response_for_get_trackings.py b/tracking/models/tracking_response_for_get_trackings.py index afda145..61ccb63 100644 --- a/tracking/models/tracking_response_for_get_trackings.py +++ b/tracking/models/tracking_response_for_get_trackings.py @@ -6,18 +6,21 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self from tracking.models.meta import Meta -from tracking.models.tracking_response_for_get_trackings_data import TrackingResponseForGetTrackingsData +from tracking.models.tracking_response_for_get_trackings_data import ( + TrackingResponseForGetTrackingsData, +) class TrackingResponseForGetTrackings(BaseModel): """ Tracking response for getting tracking """ # noqa: E501 + meta: Optional[Meta] = None data: Optional[TrackingResponseForGetTrackingsData] = None diff --git a/tracking/models/tracking_response_for_get_trackings_data.py b/tracking/models/tracking_response_for_get_trackings_data.py index fc84fda..da1e4d3 100644 --- a/tracking/models/tracking_response_for_get_trackings_data.py +++ b/tracking/models/tracking_response_for_get_trackings_data.py @@ -6,11 +6,13 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.tracking_response_for_get_trackings_data_pagination import TrackingResponseForGetTrackingsDataPagination +from tracking.models.tracking_response_for_get_trackings_data_pagination import ( + TrackingResponseForGetTrackingsDataPagination, +) from tracking.models.tracking import Tracking @@ -18,6 +20,7 @@ class TrackingResponseForGetTrackingsData(BaseModel): """ TrackingResponseForGetTrackingsData """ # noqa: E501 + pagination: Optional[TrackingResponseForGetTrackingsDataPagination] = None trackings: Optional[List[Tracking]] = None diff --git a/tracking/models/tracking_response_for_get_trackings_data_pagination.py b/tracking/models/tracking_response_for_get_trackings_data_pagination.py index ae887bb..0f244de 100644 --- a/tracking/models/tracking_response_for_get_trackings_data_pagination.py +++ b/tracking/models/tracking_response_for_get_trackings_data_pagination.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class TrackingResponseForGetTrackingsDataPagination(BaseModel): """ The Pagination holds the information for the pagination when the response contains multiple objects. """ # noqa: E501 + total: Optional[int] = None next_cursor: Optional[str] = None has_next_page: Optional[bool] = None diff --git a/tracking/models/tracking_return_shipment.py b/tracking/models/tracking_return_shipment.py index 540fc30..3a2dfbd 100644 --- a/tracking/models/tracking_return_shipment.py +++ b/tracking/models/tracking_return_shipment.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class TrackingReturnShipment(BaseModel): """ The associated return shipment linked to the current outbound shipment.This field is only present when `shipment_direction = "forward"` and AfterShip has detected a linked return shipment. """ # noqa: E501 + id: Optional[str] = None tracking_number: Optional[str] = None slug: Optional[str] = None diff --git a/tracking/models/tracking_shipment_dimensions.py b/tracking/models/tracking_shipment_dimensions.py index 3cb1775..a6f9b34 100644 --- a/tracking/models/tracking_shipment_dimensions.py +++ b/tracking/models/tracking_shipment_dimensions.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class TrackingShipmentDimensions(BaseModel): """ Physical dimensions of the package (length, width and height). """ # noqa: E501 + unit: Optional[str] = None length: Optional[float] = None width: Optional[float] = None diff --git a/tracking/models/tracking_shipment_direction.py b/tracking/models/tracking_shipment_direction.py index 5603500..e89e521 100644 --- a/tracking/models/tracking_shipment_direction.py +++ b/tracking/models/tracking_shipment_direction.py @@ -13,6 +13,7 @@ class TrackingShipmentDirection(Enum): allowed enum values """ + FORWARD = "forward" RETURN = "return" NULL = "null" diff --git a/tracking/models/tracking_shipment_weight.py b/tracking/models/tracking_shipment_weight.py index 31c424f..6d3e716 100644 --- a/tracking/models/tracking_shipment_weight.py +++ b/tracking/models/tracking_shipment_weight.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class TrackingShipmentWeight(BaseModel): """ The shipment_weight field represents the total weight of the shipment. In scenarios where the carrier does not provide this information, you can provide the weight to AfterShip. We will prioritize the data provided by the carrier, if available. The shipment weight will be included in the Response and accessed through the GET API, Webhook, and CSV export. It will also be displayed on the AfterShip Tracking admin. Additionally, it plays a significant role in error-free shipment handling and carbon emission calculations, ensuring accurate and informed decision-making """ # noqa: E501 + unit: Optional[str] = None value: Optional[float] = None diff --git a/tracking/models/tracking_signature_requirement.py b/tracking/models/tracking_signature_requirement.py index 8622218..426ab12 100644 --- a/tracking/models/tracking_signature_requirement.py +++ b/tracking/models/tracking_signature_requirement.py @@ -13,6 +13,7 @@ class TrackingSignatureRequirement(Enum): allowed enum values """ + SIGNATURE_REQUIRED = "signature_required" ADULT_SIGNATURE_REQUIRED = "adult_signature_required" INDIRECT_SIGNATURE_REQUIRED = "indirect_signature_required" diff --git a/tracking/models/update_tracking_by_id_request.py b/tracking/models/update_tracking_by_id_request.py index 8decd8b..8bb9839 100644 --- a/tracking/models/update_tracking_by_id_request.py +++ b/tracking/models/update_tracking_by_id_request.py @@ -6,27 +6,38 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self -from tracking.models.update_tracking_by_id_request_order_promised_delivery_date import UpdateTrackingByIdRequestOrderPromisedDeliveryDate -from tracking.models.update_tracking_by_id_request_delivery_type import UpdateTrackingByIdRequestDeliveryType -from tracking.models.update_tracking_by_id_request_customers import UpdateTrackingByIdRequestCustomers -from tracking.models.update_tracking_by_id_request_shipment_direction import UpdateTrackingByIdRequestShipmentDirection +from tracking.models.update_tracking_by_id_request_order_promised_delivery_date import ( + UpdateTrackingByIdRequestOrderPromisedDeliveryDate, +) +from tracking.models.update_tracking_by_id_request_delivery_type import ( + UpdateTrackingByIdRequestDeliveryType, +) +from tracking.models.update_tracking_by_id_request_customers import ( + UpdateTrackingByIdRequestCustomers, +) +from tracking.models.update_tracking_by_id_request_shipment_direction import ( + UpdateTrackingByIdRequestShipmentDirection, +) class UpdateTrackingByIdRequest(BaseModel): """ UpdateTrackingByIdRequest """ # noqa: E501 + title: Optional[str] = None order_id: Optional[str] = None order_id_path: Optional[str] = None custom_fields: Optional[dict] = None note: Optional[str] = None language: Optional[str] = None - order_promised_delivery_date: Optional[UpdateTrackingByIdRequestOrderPromisedDeliveryDate] = None + order_promised_delivery_date: Optional[UpdateTrackingByIdRequestOrderPromisedDeliveryDate] = ( + None + ) delivery_type: Optional[UpdateTrackingByIdRequestDeliveryType] = None pickup_location: Optional[str] = None pickup_note: Optional[str] = None diff --git a/tracking/models/update_tracking_by_id_request_customers.py b/tracking/models/update_tracking_by_id_request_customers.py index a594371..dcdac90 100644 --- a/tracking/models/update_tracking_by_id_request_customers.py +++ b/tracking/models/update_tracking_by_id_request_customers.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class UpdateTrackingByIdRequestCustomers(BaseModel): """ UpdateTrackingByIdRequestCustomers """ # noqa: E501 + role: Optional[str] = None name: Optional[str] = None phone_number: Optional[str] = None diff --git a/tracking/models/update_tracking_by_id_request_delivery_type.py b/tracking/models/update_tracking_by_id_request_delivery_type.py index 494e926..d687b96 100644 --- a/tracking/models/update_tracking_by_id_request_delivery_type.py +++ b/tracking/models/update_tracking_by_id_request_delivery_type.py @@ -13,6 +13,7 @@ class UpdateTrackingByIdRequestDeliveryType(Enum): allowed enum values """ + PICKUP_AT_STORE = "pickup_at_store" PICKUP_AT_COURIER = "pickup_at_courier" DOOR_TO_DOOR = "door_to_door" diff --git a/tracking/models/update_tracking_by_id_request_order_promised_delivery_date.py b/tracking/models/update_tracking_by_id_request_order_promised_delivery_date.py index 8ebc5fe..19f6fa1 100644 --- a/tracking/models/update_tracking_by_id_request_order_promised_delivery_date.py +++ b/tracking/models/update_tracking_by_id_request_order_promised_delivery_date.py @@ -6,16 +6,16 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field -from typing import Any, Dict, List, Optional +from pydantic import BaseModel +from typing import Any, Dict, Optional from typing_extensions import Self - class UpdateTrackingByIdRequestOrderPromisedDeliveryDate(BaseModel): """ The promised delivery date of the order in shipment recipient’s timezone. """ # noqa: E501 + promised_delivery_date: Optional[str] = None promised_delivery_date_min: Optional[str] = None promised_delivery_date_max: Optional[str] = None diff --git a/tracking/models/update_tracking_by_id_request_shipment_direction.py b/tracking/models/update_tracking_by_id_request_shipment_direction.py index 977bb4e..0884c88 100644 --- a/tracking/models/update_tracking_by_id_request_shipment_direction.py +++ b/tracking/models/update_tracking_by_id_request_shipment_direction.py @@ -13,5 +13,6 @@ class UpdateTrackingByIdRequestShipmentDirection(Enum): allowed enum values """ + FORWARD = "forward" RETURN = "return" diff --git a/tracking/models/update_tracking_by_id_response.py b/tracking/models/update_tracking_by_id_response.py index 5138630..ab6b8cf 100644 --- a/tracking/models/update_tracking_by_id_response.py +++ b/tracking/models/update_tracking_by_id_response.py @@ -6,16 +6,18 @@ from __future__ import annotations import pprint -from pydantic import BaseModel, Field +from pydantic import BaseModel from typing import Any, Dict, List, Optional from typing_extensions import Self from tracking.models.tracking import Tracking + class UpdateTrackingByIdResponse(BaseModel): """ Object describes the tracking information.<div style="visibility:hidden; height: 0"></div> """ + response_header: Dict[str, List[str]] = {} data: Optional[Tracking] = None @@ -34,4 +36,4 @@ def from_json(cls, json_str: str, **kwargs) -> Optional[Self]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]], **kwargs) -> Optional[Self]: - return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None \ No newline at end of file + return cls.model_validate(obj, **kwargs) if isinstance(obj, Dict) else None diff --git a/tracking/request.py b/tracking/request.py index a50d09c..eb34516 100644 --- a/tracking/request.py +++ b/tracking/request.py @@ -27,10 +27,8 @@ def wrapper(*args, **kwargs): funcx = validate_call(func) return funcx(*args, **kwargs) except ValidationError as e: - raise BadRequestError( - code=ErrorCodeEnum.BAD_REQUEST, - message=e - ) + raise BadRequestError(code=ErrorCodeEnum.BAD_REQUEST, message=e) + return wrapper @@ -39,6 +37,7 @@ class ApiClient: :param configuration: .Configuration object for this client """ + _client = httpx.Client() def __init__(self, configuration: Optional[Configuration] = None) -> None: @@ -64,16 +63,17 @@ def _request(self, method, url, params=None, body=None, **kwargs) -> Union[dict, kwargs["timeout"] = self._config.timeout / 1000.0 request = self._client.build_request( - method=method, url=url, params=params, data=body, headers=user_headers, **kwargs) + method=method, url=url, params=params, data=body, headers=user_headers, **kwargs + ) request.headers = Authenticator( api_key=self._config.api_key, api_secret=self._config.api_secret, - auth_type=self._config.authentication_type + auth_type=self._config.authentication_type, ).sign( method=request.method, uri=request.url.raw.raw_path.decode("utf-8"), headers=request.headers, - body=body + body=body, ) return self._send_request_with_retry(ssl_ctx, request) diff --git a/tracking/response.py b/tracking/response.py index f6ffece..f65486b 100644 --- a/tracking/response.py +++ b/tracking/response.py @@ -4,7 +4,7 @@ # Do not edit the class manually. import json -from typing import Dict, Union +from typing import Union import httpx @@ -17,17 +17,17 @@ NotFoundError, InternalError, TooManyRequestsError, - TimedOutError + TimedOutError, ) error_mapping = { - 'BadRequest': BadRequestError, - 'Unauthorized': UnauthorizedError, - 'Forbidden': ForbiddenError, - 'NotFound': NotFoundError, - 'TooManyRequests': TooManyRequestsError, - 'InternalError': InternalError, - 'TimedOutError': TimedOutError, + "BadRequest": BadRequestError, + "Unauthorized": UnauthorizedError, + "Forbidden": ForbiddenError, + "NotFound": NotFoundError, + "TooManyRequests": TooManyRequestsError, + "InternalError": InternalError, + "TimedOutError": TimedOutError, } _error_meta_code_mapping = { @@ -75,7 +75,7 @@ def parse_response(response: httpx.Response) -> Union[dict, None]: error_cls = error_mapping[error_type] else: error_cls = UnknownError - + meta_code = json_data["meta"]["code"] error_code = _error_meta_code_mapping.get(str(meta_code)) if error_code is None: