1010from rich_toolkit .progress import Progress
1111from rich_toolkit .styles import MinimalStyle , TaggedStyle
1212
13- from .auth import Identity
13+ from .auth import Identity , delete_auth_config
1414
1515logger = logging .getLogger (__name__ )
1616
@@ -68,10 +68,50 @@ def get_rich_toolkit(minimal: bool = False) -> RichToolkit:
6868 return RichToolkit (theme = theme )
6969
7070
71+ def handle_unauthorized () -> str :
72+ message = "The specified token is not valid. "
73+
74+ identity = Identity ()
75+
76+ if identity .auth_mode == "user" :
77+ delete_auth_config ()
78+
79+ message += "Use `fastapi login` to generate a new token."
80+ else :
81+ message += "Make sure to use a valid token."
82+
83+ return message
84+
85+
86+ def handle_http_error (error : HTTPError , default_message : Optional [str ] = None ) -> str :
87+ message : Optional [str ] = None
88+
89+ if isinstance (error , HTTPStatusError ):
90+ status_code = error .response .status_code
91+
92+ # Handle validation errors from Pydantic models, this should make it easier to debug :)
93+ if status_code == 422 :
94+ logger .debug (error .response .json ()) # pragma: no cover
95+
96+ elif status_code == 401 :
97+ message = handle_unauthorized ()
98+
99+ elif status_code == 403 :
100+ message = "You don't have permissions for this resource"
101+
102+ if not message :
103+ message = (
104+ default_message
105+ or f"Something went wrong while contacting the FastAPI Cloud server. Please try again later. \n \n { error } "
106+ )
107+
108+ return message
109+
110+
71111@contextlib .contextmanager
72112def handle_http_errors (
73113 progress : Progress ,
74- message : Optional [str ] = None ,
114+ default_message : Optional [str ] = None ,
75115) -> Generator [None , None , None ]:
76116 try :
77117 yield
@@ -86,25 +126,7 @@ def handle_http_errors(
86126 except HTTPError as e :
87127 logger .debug (e )
88128
89- # Handle validation errors from Pydantic models, this should make it easier to debug :)
90- if isinstance (e , HTTPStatusError ) and e .response .status_code == 422 :
91- logger .debug (e .response .json ()) # pragma: no cover
92-
93- if isinstance (e , HTTPStatusError ) and e .response .status_code in (401 , 403 ):
94- message = "The specified token is not valid. "
95-
96- identity = Identity ()
97-
98- if identity .auth_mode == "user" :
99- message += "Use `fastapi login` to generate a new token."
100- else :
101- message += "Make sure to use a valid token."
102-
103- else :
104- message = (
105- message
106- or f"Something went wrong while contacting the FastAPI Cloud server. Please try again later. \n \n { e } "
107- )
129+ message = handle_http_error (e , default_message )
108130
109131 progress .set_error (message )
110132
0 commit comments