1+ from __future__ import annotations
2+
13import getpass
24import json
35import logging
1517
1618
1719def authenticate (
18- user_name : T . Optional [ str ] = None ,
19- user_email : T . Optional [ str ] = None ,
20- user_password : T . Optional [ str ] = None ,
21- jwt : T . Optional [ str ] = None ,
20+ user_name : str | None = None ,
21+ user_email : str | None = None ,
22+ user_password : str | None = None ,
23+ jwt : str | None = None ,
2224 delete : bool = False ,
2325):
2426 """
2527 Prompt for authentication information and save it to the config file
2628 """
2729
28- # we still have to accept --user_name for the back compatibility
30+ # We still have to accept --user_name for the back compatibility
2931 profile_name = user_name
3032
3133 all_user_items = config .list_all_users ()
@@ -49,10 +51,6 @@ def authenticate(
4951 assert profile_name is not None , "profile_name should be set"
5052
5153 if delete :
52- if profile_name not in all_user_items :
53- raise exceptions .MapillaryBadParameterError (
54- f'Profile "{ profile_name } " not found'
55- )
5654 config .remove_config (profile_name )
5755 LOG .info ('Profile "%s" deleted' , profile_name )
5856 else :
@@ -66,12 +64,12 @@ def authenticate(
6664
6765 if jwt :
6866 user_items : types .UserItem = {"user_upload_token" : jwt }
67+ user_items = _authenticate_profile (_validate_profile (user_items ))
6968 else :
7069 user_items = _prompt_login (
7170 user_email = user_email , user_password = user_password
7271 )
73-
74- user_items = _validate_and_update_profile (profile_name , user_items )
72+ _validate_profile (user_items )
7573
7674 # Update the config with the new user items
7775 config .update_config (profile_name , user_items )
@@ -88,8 +86,8 @@ def authenticate(
8886
8987
9088def fetch_user_items (
91- user_name : T . Optional [ str ] = None ,
92- organization_key : T . Optional [ str ] = None ,
89+ user_name : str | None = None ,
90+ organization_key : str | None = None ,
9391) -> types .UserItem :
9492 """
9593 Read user information from the config file,
@@ -130,7 +128,8 @@ def fetch_user_items(
130128
131129 assert profile_name is not None , "profile_name should be set"
132130
133- user_items = _validate_and_update_profile (profile_name , user_items )
131+ user_items = _authenticate_profile (_validate_profile (user_items ))
132+
134133 LOG .info (
135134 'Uploading to profile "%s": %s' , profile_name , api_v4 ._sanitize (user_items )
136135 )
@@ -155,16 +154,17 @@ def _prompt(message: str) -> str:
155154 return input ()
156155
157156
158- def _validate_and_update_profile (
159- profile_name : str , user_items : types .UserItem
160- ) -> types .UserItem :
157+ def _validate_profile (user_items : types .UserItem ) -> types .UserItem :
161158 try :
162159 jsonschema .validate (user_items , types .UserItemSchema )
163160 except jsonschema .ValidationError as ex :
164161 raise exceptions .MapillaryBadParameterError (
165- f' Invalid profile " { profile_name } " : { ex .message } '
162+ f" Invalid profile format : { ex .message } "
166163 )
164+ return user_items
165+
167166
167+ def _authenticate_profile (user_items : types .UserItem ) -> types .UserItem :
168168 try :
169169 resp = api_v4 .fetch_user_or_me (
170170 user_access_token = user_items ["user_upload_token" ]
@@ -198,7 +198,7 @@ def _validate_profile_name(profile_name: str):
198198 )
199199
200200
201- def _list_all_profiles (profiles : T . Dict [str , types .UserItem ]) -> None :
201+ def _list_all_profiles (profiles : dict [str , types .UserItem ]) -> None :
202202 _echo ("Existing Mapillary profiles:" )
203203
204204 # Header
@@ -247,8 +247,8 @@ def _is_login_retryable(ex: requests.HTTPError) -> bool:
247247
248248
249249def _prompt_login (
250- user_email : T . Optional [ str ] = None ,
251- user_password : T . Optional [ str ] = None ,
250+ user_email : str | None = None ,
251+ user_password : str | None = None ,
252252) -> types .UserItem :
253253 _enabled = _prompt_enabled ()
254254
0 commit comments