1
1
from typing import (
2
+ Any ,
2
3
List ,
3
4
Optional ,
4
5
)
5
6
7
+ from easypost .constant import _CARRIER_ACCOUNT_TYPES_WITH_CUSTOM_WORKFLOWS
6
8
from easypost .easypost_object import convert_to_easypost_object
7
9
from easypost .requestor import (
8
10
RequestMethod ,
16
18
)
17
19
18
20
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
+
19
29
class CarrierAccount (AllResource , CreateResource , UpdateResource , DeleteResource ):
20
30
@classmethod
21
31
def types (cls , api_key : Optional [str ] = None ) -> List [str ]:
@@ -24,11 +34,18 @@ def types(cls, api_key: Optional[str] = None) -> List[str]:
24
34
response , api_key = requestor .request (method = RequestMethod .GET , url = "/carrier_types" )
25
35
return convert_to_easypost_object (response = response , api_key = api_key )
26
36
37
+ # Overrides CreateResource.create
27
38
@classmethod
28
- def register (cls , api_key : Optional [str ] = None , ** params ) -> "CarrierAccount" :
39
+ def create (cls , api_key : Optional [str ] = None , ** params ) -> "CarrierAccount" :
29
40
"""Creates a Carrier Account that requires custom registration (eg: FedEx & UPS)."""
30
41
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 )
32
49
wrapped_params = {cls .snakecase_name (): params }
33
50
response , api_key = requestor .request (method = RequestMethod .POST , url = url , params = wrapped_params )
34
51
return convert_to_easypost_object (response = response , api_key = api_key )
0 commit comments