-
-
Notifications
You must be signed in to change notification settings - Fork 93
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #85 from PurplShip/purplship-2020.11
Purplship 2020.11
- Loading branch information
Showing
200 changed files
with
5,009 additions
and
4,267 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,12 @@ | ||
# .coveragerc to control coverage.py | ||
[run] | ||
branch = True | ||
omit = | ||
*/purplship/extensions/boxknight/* | ||
*/purplship/extensions/dicom/* | ||
*/purplship/extensions/usps/* | ||
|
||
[report] | ||
include = | ||
*/purplship/carriers/* | ||
*/purplship/core/* | ||
*/purplship/package/* | ||
*/purplship/freight/* | ||
*/purplship/extensions/* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
from purplship.mappers.boxknight.mapper import Mapper | ||
from purplship.mappers.boxknight.proxy import Proxy | ||
from purplship.mappers.boxknight.settings import Settings |
99 changes: 99 additions & 0 deletions
99
extensions/boxknight/purplship/mappers/boxknight/mapper.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
from typing import List, Tuple | ||
from purplship.core.utils.serializable import Serializable, Deserializable | ||
from purplship.api.mapper import Mapper as BaseMapper | ||
from purplship.core.models import ( | ||
ShipmentCancelRequest, | ||
PickupUpdateRequest, | ||
PickupCancelRequest, | ||
ShipmentRequest, | ||
RateRequest, | ||
|
||
ConfirmationDetails, | ||
ShipmentDetails, | ||
PickupRequest, | ||
PickupDetails, | ||
RateDetails, | ||
Message, | ||
) | ||
from purplship.providers.boxknight import ( | ||
parse_shipment_cancel_response, | ||
parse_pickup_update_response, | ||
parse_pickup_cancel_response, | ||
parse_shipment_response, | ||
parse_pickup_response, | ||
parse_rate_response, | ||
|
||
shipment_cancel_request, | ||
pickup_update_request, | ||
pickup_cancel_request, | ||
shipment_request, | ||
pickup_request, | ||
rate_request, | ||
) | ||
from purplship.mappers.boxknight.settings import Settings | ||
|
||
|
||
class Mapper(BaseMapper): | ||
settings: Settings | ||
|
||
"""Request Mappers""" | ||
|
||
def create_rate_request( | ||
self, payload: RateRequest | ||
) -> Serializable: | ||
return rate_request(payload, self.settings) | ||
|
||
def create_shipment_request( | ||
self, payload: ShipmentRequest | ||
) -> Serializable: | ||
return shipment_request(payload, self.settings) | ||
|
||
def create_pickup_request( | ||
self, payload: PickupRequest | ||
) -> Serializable: | ||
return pickup_request(payload, self.settings) | ||
|
||
def create_pickup_update_request( | ||
self, payload: PickupUpdateRequest | ||
) -> Serializable: | ||
return pickup_update_request(payload, self.settings) | ||
|
||
def create_cancel_pickup_request( | ||
self, payload: PickupCancelRequest | ||
) -> Serializable: | ||
return pickup_cancel_request(payload, self.settings) | ||
|
||
def create_cancel_shipment_request(self, payload: ShipmentCancelRequest) -> Serializable[str]: | ||
return shipment_cancel_request(payload, self.settings) | ||
|
||
"""Response Parsers""" | ||
|
||
def parse_cancel_pickup_response( | ||
self, response: Deserializable[str] | ||
) -> Tuple[ConfirmationDetails, List[Message]]: | ||
return parse_pickup_cancel_response(response.deserialize(), self.settings) | ||
|
||
def parse_cancel_shipment_response( | ||
self, response: Deserializable | ||
) -> Tuple[ConfirmationDetails, List[Message]]: | ||
return parse_shipment_cancel_response(response.deserialize(), self.settings) | ||
|
||
def parse_pickup_response( | ||
self, response: Deserializable[str] | ||
) -> Tuple[PickupDetails, List[Message]]: | ||
return parse_pickup_response(response.deserialize(), self.settings) | ||
|
||
def parse_pickup_update_response( | ||
self, response: Deserializable[str] | ||
) -> Tuple[PickupDetails, List[Message]]: | ||
return parse_pickup_update_response(response.deserialize(), self.settings) | ||
|
||
def parse_rate_response( | ||
self, response: Deserializable[str] | ||
) -> Tuple[List[RateDetails], List[Message]]: | ||
return parse_rate_response(response.deserialize(), self.settings) | ||
|
||
def parse_shipment_response( | ||
self, response: Deserializable[str] | ||
) -> Tuple[ShipmentDetails, List[Message]]: | ||
return parse_shipment_response(response.deserialize(), self.settings) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
from typing import List | ||
from purplship.core.utils.serializable import Serializable, Deserializable | ||
from purplship.mappers.boxknight.settings import Settings | ||
from purplship.api.proxy import Proxy as BaseProxy | ||
|
||
|
||
class Proxy(BaseProxy): | ||
settings: Settings |
15 changes: 15 additions & 0 deletions
15
extensions/boxknight/purplship/mappers/boxknight/settings.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
"""Purplship BoxKnight client settings.""" | ||
|
||
import attr | ||
from purplship.providers.boxknight.utils import Settings as BaseSettings | ||
|
||
|
||
@attr.s(auto_attribs=True) | ||
class Settings(BaseSettings): | ||
"""BoxKnight connection settings.""" | ||
|
||
username: str | ||
password: str | ||
id: str = None | ||
test: bool = False | ||
carrier_id: str = "boxknight" |
16 changes: 16 additions & 0 deletions
16
extensions/boxknight/purplship/providers/boxknight/__init__.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
from purplship.providers.boxknight.utils import Settings | ||
from purplship.providers.boxknight.rate import parse_rate_response, rate_request | ||
from purplship.providers.boxknight.shipment import ( | ||
parse_shipment_cancel_response, | ||
parse_shipment_response, | ||
shipment_cancel_request, | ||
shipment_request, | ||
) | ||
from purplship.providers.boxknight.pickup import ( | ||
parse_pickup_cancel_response, | ||
parse_pickup_update_response, | ||
parse_pickup_response, | ||
pickup_update_request, | ||
pickup_cancel_request, | ||
pickup_request, | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
from purplship.providers.dicom.utils import Settings | ||
|
||
|
||
def parse_error_response(response: dict, settings: Settings): | ||
return [] |
3 changes: 3 additions & 0 deletions
3
extensions/boxknight/purplship/providers/boxknight/pickup/__init__.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
from purplship.providers.boxknight.pickup.create import parse_pickup_response, pickup_request | ||
from purplship.providers.boxknight.pickup.update import parse_pickup_update_response, pickup_update_request | ||
from purplship.providers.boxknight.pickup.cancel import parse_pickup_cancel_response, pickup_cancel_request |
24 changes: 24 additions & 0 deletions
24
extensions/boxknight/purplship/providers/boxknight/pickup/cancel.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
from typing import Tuple, List | ||
from purplship.core.utils import Serializable | ||
from purplship.core.models import ( | ||
PickupCancelRequest, | ||
ConfirmationDetails, | ||
Message | ||
) | ||
|
||
from purplship.providers.boxknight.error import parse_error_response | ||
from purplship.providers.boxknight.utils import Settings | ||
|
||
|
||
def parse_pickup_cancel_response(response: dict, settings: Settings) -> Tuple[ConfirmationDetails, List[Message]]: | ||
errors = parse_error_response(response, settings) | ||
details = None | ||
|
||
return details, errors | ||
|
||
|
||
def pickup_cancel_request(payload: PickupCancelRequest, _) -> Serializable: | ||
|
||
request = payload.confirmation_number | ||
|
||
return Serializable(request) |
53 changes: 53 additions & 0 deletions
53
extensions/boxknight/purplship/providers/boxknight/pickup/create.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
from typing import Tuple, List | ||
from pyboxknight.pickups import ( | ||
PickupRequest as BoxKnightPickupRequest, | ||
PickupRequestRecipientAddress, | ||
Recipient, | ||
) | ||
from purplship.core.utils import Serializable, concat_str, to_date | ||
from purplship.core.models import ( | ||
ShipmentDetails, | ||
PickupRequest, | ||
PickupDetails, | ||
Message, | ||
) | ||
|
||
from purplship.providers.boxknight.error import parse_error_response | ||
from purplship.providers.boxknight.utils import Settings | ||
|
||
|
||
def parse_pickup_response(response: dict, settings: Settings) -> Tuple[PickupDetails, List[Message]]: | ||
errors = parse_error_response(response, settings) | ||
details = None | ||
|
||
return details, errors | ||
|
||
|
||
def pickup_request(payload: PickupRequest, _) -> Serializable: | ||
shipments: List[ShipmentDetails] = payload.options.get('shipments', []) | ||
after = to_date(f"{payload.pickup_date} {payload.ready_time}", current_format="%Y-%m-%d %H:%M") | ||
before = to_date(f"{payload.pickup_date} {payload.ready_time}", current_format="%Y-%m-%d %H:%M") | ||
|
||
request = BoxKnightPickupRequest( | ||
packageCount=len(payload.parcels), | ||
recipient=Recipient( | ||
name=payload.address.person_name, | ||
phone=payload.address.phone_number, | ||
notes=None, | ||
email=payload.address.email, | ||
), | ||
recipientAddress=PickupRequestRecipientAddress( | ||
street=concat_str(payload.address.address_line1, payload.address.address_line2, join=True), | ||
city=payload.address.city, | ||
province=payload.address.state_code, | ||
country=payload.address.country_code, | ||
postalCode=payload.address.postal_code, | ||
unit=None | ||
), | ||
notes=payload.instruction, | ||
completeAfter=int(after.timestamp() * 1000.0), | ||
completeBefore=int(before.timestamp() * 1000.0), | ||
orderIds=[shipment.shipment_identifier for shipment in shipments], | ||
) | ||
|
||
return Serializable(request) |
29 changes: 29 additions & 0 deletions
29
extensions/boxknight/purplship/providers/boxknight/pickup/update.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
from typing import Tuple, List | ||
from pyboxknight.pickups import PickupUpdateRequest as BoxKnightPickupUpdateRequest | ||
from purplship.core.utils import Serializable | ||
from purplship.core.models import ( | ||
ShipmentDetails, | ||
PickupUpdateRequest, | ||
PickupDetails, | ||
Message | ||
) | ||
|
||
from purplship.providers.boxknight.error import parse_error_response | ||
from purplship.providers.boxknight.utils import Settings | ||
|
||
|
||
def parse_pickup_update_response(response: dict, settings: Settings) -> Tuple[PickupDetails, List[Message]]: | ||
errors = parse_error_response(response, settings) | ||
details = None | ||
|
||
return details, errors | ||
|
||
|
||
def pickup_update_request(payload: PickupUpdateRequest, _) -> Serializable: | ||
shipments: List[ShipmentDetails] = payload.options.get('shipments', []) | ||
|
||
request = BoxKnightPickupUpdateRequest( | ||
orderIds=[shipment.shipment_identifier for shipment in shipments] | ||
) | ||
|
||
return Serializable(request) |
30 changes: 30 additions & 0 deletions
30
extensions/boxknight/purplship/providers/boxknight/rate.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
from typing import Tuple, List | ||
from pyboxknight.rates import ( | ||
RateRequest as BoxKnightRateRequest, | ||
) | ||
from purplship.core.utils import Serializable | ||
from purplship.core.models import ( | ||
RateRequest, | ||
RateDetails, | ||
Message | ||
) | ||
|
||
from purplship.providers.boxknight.error import parse_error_response | ||
from purplship.providers.boxknight.utils import Settings | ||
|
||
|
||
def parse_rate_response(response: dict, settings: Settings) -> Tuple[List[RateDetails], List[Message]]: | ||
errors = parse_error_response(response, settings) | ||
details: List[RateDetails] = [] | ||
|
||
return details, errors | ||
|
||
|
||
def rate_request(payload: RateRequest, _) -> Serializable: | ||
|
||
request = BoxKnightRateRequest( | ||
postalCode=payload.recipient.postal_code, | ||
originPostalCode=payload.shipper.postal_code | ||
) | ||
|
||
return Serializable(request) |
2 changes: 2 additions & 0 deletions
2
extensions/boxknight/purplship/providers/boxknight/shipment/__init__.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
from purplship.providers.boxknight.shipment.create import parse_shipment_response, shipment_request | ||
from purplship.providers.boxknight.shipment.cancel import parse_shipment_cancel_response, shipment_cancel_request |
23 changes: 23 additions & 0 deletions
23
extensions/boxknight/purplship/providers/boxknight/shipment/cancel.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
from typing import Tuple, List | ||
from purplship.core.utils import Serializable | ||
from purplship.core.models import ( | ||
ShipmentCancelRequest, | ||
ConfirmationDetails, | ||
Message | ||
) | ||
|
||
from purplship.providers.boxknight.error import parse_error_response | ||
from purplship.providers.boxknight.utils import Settings | ||
|
||
|
||
def parse_shipment_cancel_response(response: dict, settings: Settings) -> Tuple[ConfirmationDetails, List[Message]]: | ||
errors = parse_error_response(response, settings) | ||
details = None | ||
|
||
return details, errors | ||
|
||
|
||
def shipment_cancel_request(payload: ShipmentCancelRequest, _) -> Serializable: | ||
request = payload.shipment_identifier | ||
|
||
return Serializable(request) |
Oops, something went wrong.