11from typing import (
2+ Any ,
23 List ,
34 Optional ,
45)
56
7+ from easypost .constant import _CARRIER_ACCOUNT_TYPES_WITH_CUSTOM_WORKFLOWS
68from easypost .easypost_object import convert_to_easypost_object
79from easypost .requestor import (
810 RequestMethod ,
1618)
1719
1820
21+ def _select_carrier_account_creation_endpoint (carrier_account_type : Optional [Any ]) -> str :
22+ """Determines which API endpoint to use for the creation call."""
23+ if carrier_account_type in _CARRIER_ACCOUNT_TYPES_WITH_CUSTOM_WORKFLOWS :
24+ return "/carrier_accounts/register"
25+
26+ return "/carrier_accounts"
27+
28+
1929class CarrierAccount (AllResource , CreateResource , UpdateResource , DeleteResource ):
2030 @classmethod
2131 def types (cls , api_key : Optional [str ] = None ) -> List [str ]:
@@ -24,11 +34,18 @@ def types(cls, api_key: Optional[str] = None) -> List[str]:
2434 response , api_key = requestor .request (method = RequestMethod .GET , url = "/carrier_types" )
2535 return convert_to_easypost_object (response = response , api_key = api_key )
2636
37+ # Overrides CreateResource.create
2738 @classmethod
28- def register (cls , api_key : Optional [str ] = None , ** params ) -> "CarrierAccount" :
39+ def create (cls , api_key : Optional [str ] = None , ** params ) -> "CarrierAccount" :
2940 """Creates a Carrier Account that requires custom registration (eg: FedEx & UPS)."""
3041 requestor = Requestor (local_api_key = api_key )
31- url = f"{ cls .class_url ()} /register"
42+
43+ carrier_account_type = params .get ("type" )
44+
45+ if carrier_account_type is None :
46+ raise ValueError ("Missing required parameter 'type'" )
47+
48+ url = _select_carrier_account_creation_endpoint (carrier_account_type = carrier_account_type )
3249 wrapped_params = {cls .snakecase_name (): params }
3350 response , api_key = requestor .request (method = RequestMethod .POST , url = url , params = wrapped_params )
3451 return convert_to_easypost_object (response = response , api_key = api_key )
0 commit comments