1+ import asyncio
12import time
23from typing import Any , Dict , List , Optional
34
45import typer
6+ import websockets
57from rich import print
68
7- from .client import JobClient , SetupClient , cycleops_client
9+ from .client import JobClient , SetupClient , WebSocketClient , cycleops_client
810from .exceptions import NotFound
911from .utils import display_error_message , display_success_message
1012
@@ -180,33 +182,37 @@ def deploy(
180182
181183 try :
182184 setup = get_setup (setup_identifier )
183-
184185 job = setup_client .deploy (setup ["id" ])
185- report_queued = print if wait else display_success_message
186- report_queued (f"Setup { setup ['id' ]} has been queued for deployment" )
187-
188- while wait :
189- match status := job ["status" ]:
190- case "Initialized" :
191- print (f"Setup { setup ['id' ]} has been initialized" )
192- case "Deploying" :
193- print (f"Setup { setup ['id' ]} is being deployed" )
194- case "Deployed" :
195- display_success_message (
196- f"Setup { setup ['id' ]} has been deployed successfully"
197- )
198- break
199- case "Failed" :
200- display_error_message (job )
201- raise Exception (f"Setup { setup ['id' ]} could not be deployed" )
202- case _:
203- print (f"Setup { setup ['id' ]} is in status { status } " )
204- time .sleep (3 )
205- job = job_client .retrieve (job ["id" ])
206186 except Exception as error :
207187 display_error_message (error )
208188 raise typer .Abort ()
209189
190+ deployment_scheduled_message = (
191+ f"Setup { setup_identifier } has been queued for deployment"
192+ )
193+
194+ if not wait :
195+ display_success_message (deployment_scheduled_message )
196+ return
197+
198+ print (f"{ deployment_scheduled_message } \n " )
199+
200+ try :
201+ display_job_logs (job ["id" ])
202+ except websockets .exceptions .ConnectionClosed :
203+ job = job_client .retrieve (job ["id" ])
204+
205+ match job ["status" ]:
206+ case "Deployed" :
207+ display_success_message (
208+ f"Setup { setup_identifier } has been deployed successfully"
209+ )
210+ case "Failed" :
211+ display_error_message (f"Setup { setup_identifier } could not be deployed" )
212+ case _:
213+ print (f"Setup { setup_identifier } is in status { job ['status' ]} " )
214+ return
215+
210216
211217def get_setup (setup_identifier : str ) -> Optional [Dict [str , Any ]]:
212218 """
@@ -221,3 +227,13 @@ def get_setup(setup_identifier: str) -> Optional[Dict[str, Any]]:
221227 setup = setup_client .retrieve (setup_identifier )
222228
223229 return setup
230+
231+
232+ def display_job_logs (job_id : str ) -> None :
233+ """
234+ Displays the deployements logs of the specified job
235+ """
236+
237+ websocket_client = WebSocketClient (job_id )
238+
239+ asyncio .get_event_loop ().run_until_complete (websocket_client .run ())
0 commit comments