1313import rignore
1414import typer
1515from httpx import Client
16- from pydantic import BaseModel , EmailStr , TypeAdapter , ValidationError
16+ from pydantic import BaseModel , EmailStr , ValidationError
1717from rich .text import Text
1818from rich_toolkit import RichToolkit
1919from rich_toolkit .menu import Option
2424from fastapi_cloud_cli .utils .apps import AppConfig , get_app_config , write_app_config
2525from fastapi_cloud_cli .utils .auth import is_logged_in
2626from fastapi_cloud_cli .utils .cli import get_rich_toolkit , handle_http_errors
27+ from fastapi_cloud_cli .utils .pydantic_compat import (
28+ TypeAdapter ,
29+ model_dump ,
30+ model_validate ,
31+ )
2732
2833logger = logging .getLogger (__name__ )
2934
@@ -91,7 +96,7 @@ def _get_teams() -> List[Team]:
9196
9297 data = response .json ()["data" ]
9398
94- return [Team . model_validate (team ) for team in data ]
99+ return [model_validate (Team , team ) for team in data ]
95100
96101
97102class AppResponse (BaseModel ):
@@ -108,7 +113,7 @@ def _create_app(team_id: str, app_name: str) -> AppResponse:
108113
109114 response .raise_for_status ()
110115
111- return AppResponse . model_validate (response .json ())
116+ return model_validate (AppResponse , response .json ())
112117
113118
114119class DeploymentStatus (str , Enum ):
@@ -161,7 +166,7 @@ def _create_deployment(app_id: str) -> CreateDeploymentResponse:
161166 response = client .post (f"/apps/{ app_id } /deployments/" )
162167 response .raise_for_status ()
163168
164- return CreateDeploymentResponse . model_validate (response .json ())
169+ return model_validate (CreateDeploymentResponse , response .json ())
165170
166171
167172class RequestUploadResponse (BaseModel ):
@@ -186,7 +191,7 @@ def _upload_deployment(deployment_id: str, archive_path: Path) -> None:
186191 response = fastapi_client .post (f"/deployments/{ deployment_id } /upload" )
187192 response .raise_for_status ()
188193
189- upload_data = RequestUploadResponse . model_validate (response .json ())
194+ upload_data = model_validate (RequestUploadResponse , response .json ())
190195 logger .debug ("Received upload URL: %s" , upload_data .url )
191196
192197 # Upload the archive
@@ -221,7 +226,7 @@ def _get_app(app_slug: str) -> Optional[AppResponse]:
221226
222227 data = response .json ()
223228
224- return AppResponse . model_validate (data )
229+ return model_validate (AppResponse , data )
225230
226231
227232def _get_apps (team_id : str ) -> List [AppResponse ]:
@@ -231,7 +236,7 @@ def _get_apps(team_id: str) -> List[AppResponse]:
231236
232237 data = response .json ()["data" ]
233238
234- return [AppResponse . model_validate (app ) for app in data ]
239+ return [model_validate (AppResponse , app ) for app in data ]
235240
236241
237242def _stream_build_logs (deployment_id : str ) -> Generator [str , None , None ]:
@@ -416,9 +421,7 @@ def _send_waitlist_form(
416421 with toolkit .progress ("Sending your request..." ) as progress :
417422 with APIClient () as client :
418423 with handle_http_errors (progress ):
419- response = client .post (
420- "/users/waiting-list" , json = result .model_dump (mode = "json" )
421- )
424+ response = client .post ("/users/waiting-list" , json = model_dump (result ))
422425
423426 response .raise_for_status ()
424427
@@ -443,7 +446,7 @@ def _waitlist_form(toolkit: RichToolkit) -> None:
443446
444447 toolkit .print_line ()
445448
446- result = SignupToWaitingList ( email = email )
449+ result = model_validate ( SignupToWaitingList , { " email" : email } )
447450
448451 if toolkit .confirm (
449452 "Do you want to get access faster by giving us more information?" ,
@@ -467,11 +470,12 @@ def _waitlist_form(toolkit: RichToolkit) -> None:
467470 result = form .run () # type: ignore
468471
469472 try :
470- result = SignupToWaitingList .model_validate (
473+ result = model_validate (
474+ SignupToWaitingList ,
471475 {
472476 "email" : email ,
473477 ** result , # type: ignore
474- }
478+ },
475479 )
476480 except ValidationError :
477481 toolkit .print (
0 commit comments