Puprlship is a modern development kit that simplifies the integration of shipping carriers services into an app.
The key features are:
- Unified API: A standardized set of models representing the common shipping data (
Address
,Parcel
,Shipment
...) - Intuitive API: A library that abstracts and unifies the typical shipping API services (
Rating
,Pickup
,Tracking
...) - Multi-carrier: Integrate Purplship once and connect to multiple shipping carrier APIs
- Custom carrier: A framework to integrate a shipping carrier services within hours instead of months
For a complete shipping management REST API with a dashboard checkout purplship-server.
Python 3.6+
# install purplship core
pip install purplship
# install the purplship canadapost extention
pip install purplship.canadapost
Additional extensions:
Available carriers
purplship.canadapost
purplship.dhl_express
purplship.fedex_express
purplship.purolator_courier
purplship.ups_package
- Fetch shipping rates
import purplship
from purplship.core.models import Address, Parcel, RateRequest
from purplship.mappers.canadapost.settings import Settings
# Initialize a carrier gateway
canadapost = purplship.gateway["canadapost"].create(
Settings(
username="username",
password="password",
customer_number="123456789",
test=True
)
)
# Fetching shipment rates
# Provide the shipper's address
shipper = Address(
postal_code="V6M2V9",
city="Vancouver",
country_code="CA",
state_code="BC",
address_line1="5840 Oak St"
)
# Provide the recipient's address
recipient = Address(
postal_code="E1C4Z8",
city="Moncton",
country_code="CA",
state_code="NB",
residential=False,
address_line1="125 Church St"
)
# Specify your package dimensions and weight
parcel = Parcel(
height=3.0,
length=6.0,
width=3.0,
weight=0.5,
weight_unit='KG',
dimension_unit='CM'
)
# Prepare a rate request
rate_request = RateRequest(
shipper=shipper,
recipient=recipient,
parcels=[parcel],
)
# Send a rate request using a carrier gateway
response = purplship.Rating.fetch(rate_request).from_(canadapost)
# Parse the returned response
rates, messages = response.parse()
print(rates)
# [
# RateDetails(
# carrier_name="canadapost",
# carrier_id="canadapost",
# currency="CAD",
# transit_days=2,
# service="canadapost_xpresspost",
# discount=1.38,
# base_charge=12.26,
# total_charge=13.64,
# duties_and_taxes=0.0,
# extra_charges=[
# ChargeDetails(name="Automation discount", amount=-0.37, currency="CAD"),
# ChargeDetails(name="Fuel surcharge", amount=1.75, currency="CAD"),
# ],
# meta=None,
# id=None,
# )
# ]
We encourage you to contribute to Purplship! Please check out the Contributing to Purplship guide for guidelines about how to proceed. Join us!
Do you want to extend Purplship and integrate a custom carrier, check out Extending Purplship
This project is licensed under the terms of the LGPL v3
license.
Please see LICENSE.md for licensing details.
- Daniel K. | @DanHK91 | danielk.xyz
- Purplship Team | hello@purplship.com | purplship.com