Skip to content

Commit 15d9ee0

Browse files
committed
Make workspace group optional if it is specified in the environment
1 parent 7fee8ef commit 15d9ee0

File tree

2 files changed

+39
-19
lines changed

2 files changed

+39
-19
lines changed

singlestoredb/fusion/handlers/utils.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#!/usr/bin/env python
22
import datetime
3+
import os
34
from typing import Any
45
from typing import Dict
56
from typing import Optional
@@ -26,15 +27,16 @@ def get_workspace_group(params: Dict[str, Any]) -> WorkspaceGroup:
2627
"""Find a workspace group matching group_id or group_name."""
2728
manager = get_workspace_manager()
2829

29-
if params['group_name']:
30+
group_name = params.get('group_name') or params.get('in_group', {}).get('group_name')
31+
if group_name:
3032
workspace_groups = [
3133
x for x in manager.workspace_groups
32-
if x.name == params['group_name']
34+
if x.name == group_name
3335
]
3436

3537
if not workspace_groups:
3638
raise KeyError(
37-
'no workspace group found with name "{}"'.format(params['group_name']),
39+
'no workspace group found with name "{}"'.format(group_name),
3840
)
3941

4042
if len(workspace_groups) > 1:
@@ -45,4 +47,16 @@ def get_workspace_group(params: Dict[str, Any]) -> WorkspaceGroup:
4547

4648
return workspace_groups[0]
4749

48-
return manager.get_workspace_group(params['group_id'])
50+
group_id = params.get('group_id') or params.get('in_group', {}).get('group_id')
51+
if group_id:
52+
return manager.get_workspace_group(group_id)
53+
54+
if os.environ.get('SINGLESTOREDB_WORKSPACE_GROUP'):
55+
return manager.get_workspace_group(
56+
os.environ['SINGLESTOREDB_WORKSPACE_GROUP'],
57+
)
58+
59+
if os.environ.get('SINGLESTOREDB_CLUSTER'):
60+
raise ValueError('clusters and shared workspaces are not currently supported')
61+
62+
raise KeyError('no workspace group was specified')

singlestoredb/fusion/handlers/workspace.py

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,10 @@ def fields(x: Any) -> Any:
8080

8181
class 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

199201
class 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]:
284288
class 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

Comments
 (0)