@@ -80,8 +80,10 @@ def fields(x: Any) -> Any:
8080
8181class ShowWorkspacesHandler (SQLHandler ):
8282 """
83- SHOW WORKSPACES IN GROUP { group_id | group_name }
84- [ <like> ] [ <extended> ] [ <order-by> ] [ <limit> ];
83+ SHOW WORKSPACES [ in_group ] [ <like> ] [ <extended> ] [ <order-by> ] [ <limit> ];
84+
85+ # Workspace group
86+ in_group = IN GROUP { group_id | group_name }
8587
8688 # ID of group
8789 group_id = ID '<group-id>'
@@ -198,10 +200,12 @@ def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
198200
199201class CreateWorkspaceHandler (SQLHandler ):
200202 """
201- CREATE WORKSPACE [ if_not_exists ] workspace_name
202- IN GROUP { group_id | group_name }
203+ CREATE WORKSPACE [ if_not_exists ] workspace_name [ in_group ]
203204 WITH SIZE size [ wait_on_active ];
204205
206+ # Create workspace in workspace group
207+ in_group = IN GROUP { group_id | group_name }
208+
205209 # Only run command if workspace doesn't already exist
206210 if_not_exists = IF NOT EXISTS
207211
@@ -264,15 +268,15 @@ class DropWorkspaceGroupHandler(SQLHandler):
264268 """
265269
266270 def run (self , params : Dict [str , Any ]) -> Optional [FusionSQLResult ]:
267- manager = get_workspace_manager ()
268-
269271 try :
270- name_or_id = params ['group_name' ] or params ['group_id' ]
271- wg = manager .workspace_groups [name_or_id ]
272- wg .terminate (wait_on_terminated = params ['wait_on_terminated' ])
272+ workspace_group = get_workspace_group (params )
273+ if workspace_group .terminated_at is not None :
274+ raise KeyError
275+ workspace_group .terminate (wait_on_terminated = params ['wait_on_terminated' ])
273276
274277 except KeyError :
275278 if not params ['if_exists' ]:
279+ name_or_id = params ['group_id' ] or params ['group_name' ]
276280 raise KeyError (f"could not find workspace group '{ name_or_id } '" )
277281
278282 return None
@@ -284,7 +288,10 @@ def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
284288class DropWorkspaceHandler (SQLHandler ):
285289 """
286290 DROP WORKSPACE [ if_exists ] { workspace_id | workspace_name }
287- IN GROUP { group_id | group_name } [ wait_on_terminated ];
291+ [ in_group ] [ wait_on_terminated ];
292+
293+ # Workspace group
294+ in_group = IN GROUP { group_id | group_name }
288295
289296 # Only drop workspace if it exists
290297 if_exists = IF EXISTS
@@ -307,16 +314,15 @@ class DropWorkspaceHandler(SQLHandler):
307314 """
308315
309316 def run (self , params : Dict [str , Any ]) -> Optional [FusionSQLResult ]:
310- manager = get_workspace_manager ()
311-
312317 try :
318+ workspace_group = get_workspace_group (params )
313319 workspace_name_or_id = params ['workspace_name' ] or params ['workspace_id' ]
314- group_name_or_id = params ['group_name' ] or params ['group_id' ]
315- wg = manager .workspace_groups [group_name_or_id ]
316- ws = wg .workspaces [workspace_name_or_id ]
320+ ws = workspace_group .workspaces [workspace_name_or_id ]
317321 ws .terminate (wait_on_terminated = params ['wait_on_terminated' ])
318322
319323 except KeyError :
324+ group_name_or_id = params ['in_group' ].get ('group_id' , None ) or \
325+ params ['in_group' ].get ('group_name' , None )
320326 if not params ['if_exists' ]:
321327 raise KeyError (
322328 f"could not find workspace '{ workspace_name_or_id } ' "
0 commit comments