singlestoredb 1.16.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- singlestoredb/__init__.py +75 -0
- singlestoredb/ai/__init__.py +2 -0
- singlestoredb/ai/chat.py +139 -0
- singlestoredb/ai/embeddings.py +128 -0
- singlestoredb/alchemy/__init__.py +90 -0
- singlestoredb/apps/__init__.py +3 -0
- singlestoredb/apps/_cloud_functions.py +90 -0
- singlestoredb/apps/_config.py +72 -0
- singlestoredb/apps/_connection_info.py +18 -0
- singlestoredb/apps/_dashboards.py +47 -0
- singlestoredb/apps/_process.py +32 -0
- singlestoredb/apps/_python_udfs.py +100 -0
- singlestoredb/apps/_stdout_supress.py +30 -0
- singlestoredb/apps/_uvicorn_util.py +36 -0
- singlestoredb/auth.py +245 -0
- singlestoredb/config.py +484 -0
- singlestoredb/connection.py +1487 -0
- singlestoredb/converters.py +950 -0
- singlestoredb/docstring/__init__.py +33 -0
- singlestoredb/docstring/attrdoc.py +126 -0
- singlestoredb/docstring/common.py +230 -0
- singlestoredb/docstring/epydoc.py +267 -0
- singlestoredb/docstring/google.py +412 -0
- singlestoredb/docstring/numpydoc.py +562 -0
- singlestoredb/docstring/parser.py +100 -0
- singlestoredb/docstring/py.typed +1 -0
- singlestoredb/docstring/rest.py +256 -0
- singlestoredb/docstring/tests/__init__.py +1 -0
- singlestoredb/docstring/tests/_pydoctor.py +21 -0
- singlestoredb/docstring/tests/test_epydoc.py +729 -0
- singlestoredb/docstring/tests/test_google.py +1007 -0
- singlestoredb/docstring/tests/test_numpydoc.py +1100 -0
- singlestoredb/docstring/tests/test_parse_from_object.py +109 -0
- singlestoredb/docstring/tests/test_parser.py +248 -0
- singlestoredb/docstring/tests/test_rest.py +547 -0
- singlestoredb/docstring/tests/test_util.py +70 -0
- singlestoredb/docstring/util.py +141 -0
- singlestoredb/exceptions.py +120 -0
- singlestoredb/functions/__init__.py +16 -0
- singlestoredb/functions/decorator.py +201 -0
- singlestoredb/functions/dtypes.py +1793 -0
- singlestoredb/functions/ext/__init__.py +1 -0
- singlestoredb/functions/ext/arrow.py +375 -0
- singlestoredb/functions/ext/asgi.py +2133 -0
- singlestoredb/functions/ext/json.py +420 -0
- singlestoredb/functions/ext/mmap.py +413 -0
- singlestoredb/functions/ext/rowdat_1.py +724 -0
- singlestoredb/functions/ext/timer.py +89 -0
- singlestoredb/functions/ext/utils.py +218 -0
- singlestoredb/functions/signature.py +1578 -0
- singlestoredb/functions/typing/__init__.py +41 -0
- singlestoredb/functions/typing/numpy.py +20 -0
- singlestoredb/functions/typing/pandas.py +2 -0
- singlestoredb/functions/typing/polars.py +2 -0
- singlestoredb/functions/typing/pyarrow.py +2 -0
- singlestoredb/functions/utils.py +421 -0
- singlestoredb/fusion/__init__.py +11 -0
- singlestoredb/fusion/graphql.py +213 -0
- singlestoredb/fusion/handler.py +916 -0
- singlestoredb/fusion/handlers/__init__.py +0 -0
- singlestoredb/fusion/handlers/export.py +525 -0
- singlestoredb/fusion/handlers/files.py +690 -0
- singlestoredb/fusion/handlers/job.py +660 -0
- singlestoredb/fusion/handlers/models.py +250 -0
- singlestoredb/fusion/handlers/stage.py +502 -0
- singlestoredb/fusion/handlers/utils.py +324 -0
- singlestoredb/fusion/handlers/workspace.py +956 -0
- singlestoredb/fusion/registry.py +249 -0
- singlestoredb/fusion/result.py +399 -0
- singlestoredb/http/__init__.py +27 -0
- singlestoredb/http/connection.py +1267 -0
- singlestoredb/magics/__init__.py +34 -0
- singlestoredb/magics/run_personal.py +137 -0
- singlestoredb/magics/run_shared.py +134 -0
- singlestoredb/management/__init__.py +9 -0
- singlestoredb/management/billing_usage.py +148 -0
- singlestoredb/management/cluster.py +462 -0
- singlestoredb/management/export.py +295 -0
- singlestoredb/management/files.py +1102 -0
- singlestoredb/management/inference_api.py +105 -0
- singlestoredb/management/job.py +887 -0
- singlestoredb/management/manager.py +373 -0
- singlestoredb/management/organization.py +226 -0
- singlestoredb/management/region.py +169 -0
- singlestoredb/management/utils.py +423 -0
- singlestoredb/management/workspace.py +1927 -0
- singlestoredb/mysql/__init__.py +177 -0
- singlestoredb/mysql/_auth.py +298 -0
- singlestoredb/mysql/charset.py +214 -0
- singlestoredb/mysql/connection.py +2032 -0
- singlestoredb/mysql/constants/CLIENT.py +38 -0
- singlestoredb/mysql/constants/COMMAND.py +32 -0
- singlestoredb/mysql/constants/CR.py +78 -0
- singlestoredb/mysql/constants/ER.py +474 -0
- singlestoredb/mysql/constants/EXTENDED_TYPE.py +3 -0
- singlestoredb/mysql/constants/FIELD_TYPE.py +48 -0
- singlestoredb/mysql/constants/FLAG.py +15 -0
- singlestoredb/mysql/constants/SERVER_STATUS.py +10 -0
- singlestoredb/mysql/constants/VECTOR_TYPE.py +6 -0
- singlestoredb/mysql/constants/__init__.py +0 -0
- singlestoredb/mysql/converters.py +271 -0
- singlestoredb/mysql/cursors.py +896 -0
- singlestoredb/mysql/err.py +92 -0
- singlestoredb/mysql/optionfile.py +20 -0
- singlestoredb/mysql/protocol.py +450 -0
- singlestoredb/mysql/tests/__init__.py +19 -0
- singlestoredb/mysql/tests/base.py +126 -0
- singlestoredb/mysql/tests/conftest.py +37 -0
- singlestoredb/mysql/tests/test_DictCursor.py +132 -0
- singlestoredb/mysql/tests/test_SSCursor.py +141 -0
- singlestoredb/mysql/tests/test_basic.py +452 -0
- singlestoredb/mysql/tests/test_connection.py +851 -0
- singlestoredb/mysql/tests/test_converters.py +58 -0
- singlestoredb/mysql/tests/test_cursor.py +141 -0
- singlestoredb/mysql/tests/test_err.py +16 -0
- singlestoredb/mysql/tests/test_issues.py +514 -0
- singlestoredb/mysql/tests/test_load_local.py +75 -0
- singlestoredb/mysql/tests/test_nextset.py +88 -0
- singlestoredb/mysql/tests/test_optionfile.py +27 -0
- singlestoredb/mysql/tests/thirdparty/__init__.py +6 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/__init__.py +9 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/capabilities.py +323 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/dbapi20.py +865 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_capabilities.py +110 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_dbapi20.py +224 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py +101 -0
- singlestoredb/mysql/times.py +23 -0
- singlestoredb/notebook/__init__.py +16 -0
- singlestoredb/notebook/_objects.py +213 -0
- singlestoredb/notebook/_portal.py +352 -0
- singlestoredb/py.typed +0 -0
- singlestoredb/pytest.py +352 -0
- singlestoredb/server/__init__.py +0 -0
- singlestoredb/server/docker.py +452 -0
- singlestoredb/server/free_tier.py +267 -0
- singlestoredb/tests/__init__.py +0 -0
- singlestoredb/tests/alltypes.sql +307 -0
- singlestoredb/tests/alltypes_no_nulls.sql +208 -0
- singlestoredb/tests/empty.sql +0 -0
- singlestoredb/tests/ext_funcs/__init__.py +702 -0
- singlestoredb/tests/local_infile.csv +3 -0
- singlestoredb/tests/test.ipynb +18 -0
- singlestoredb/tests/test.sql +680 -0
- singlestoredb/tests/test2.ipynb +18 -0
- singlestoredb/tests/test2.sql +1 -0
- singlestoredb/tests/test_basics.py +1332 -0
- singlestoredb/tests/test_config.py +318 -0
- singlestoredb/tests/test_connection.py +3103 -0
- singlestoredb/tests/test_dbapi.py +27 -0
- singlestoredb/tests/test_exceptions.py +45 -0
- singlestoredb/tests/test_ext_func.py +1472 -0
- singlestoredb/tests/test_ext_func_data.py +1101 -0
- singlestoredb/tests/test_fusion.py +1527 -0
- singlestoredb/tests/test_http.py +288 -0
- singlestoredb/tests/test_management.py +1599 -0
- singlestoredb/tests/test_plugin.py +33 -0
- singlestoredb/tests/test_results.py +171 -0
- singlestoredb/tests/test_types.py +132 -0
- singlestoredb/tests/test_udf.py +737 -0
- singlestoredb/tests/test_udf_returns.py +459 -0
- singlestoredb/tests/test_vectorstore.py +51 -0
- singlestoredb/tests/test_xdict.py +333 -0
- singlestoredb/tests/utils.py +141 -0
- singlestoredb/types.py +373 -0
- singlestoredb/utils/__init__.py +0 -0
- singlestoredb/utils/config.py +950 -0
- singlestoredb/utils/convert_rows.py +69 -0
- singlestoredb/utils/debug.py +13 -0
- singlestoredb/utils/dtypes.py +205 -0
- singlestoredb/utils/events.py +65 -0
- singlestoredb/utils/mogrify.py +151 -0
- singlestoredb/utils/results.py +585 -0
- singlestoredb/utils/xdict.py +425 -0
- singlestoredb/vectorstore.py +192 -0
- singlestoredb/warnings.py +5 -0
- singlestoredb-1.16.1.dist-info/METADATA +165 -0
- singlestoredb-1.16.1.dist-info/RECORD +183 -0
- singlestoredb-1.16.1.dist-info/WHEEL +5 -0
- singlestoredb-1.16.1.dist-info/entry_points.txt +2 -0
- singlestoredb-1.16.1.dist-info/licenses/LICENSE +201 -0
- singlestoredb-1.16.1.dist-info/top_level.txt +3 -0
- sqlx/__init__.py +4 -0
- sqlx/magic.py +113 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""SingleStoreDB export service."""
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import copy
|
|
6
|
+
import json
|
|
7
|
+
from typing import Any
|
|
8
|
+
from typing import Dict
|
|
9
|
+
from typing import List
|
|
10
|
+
from typing import Optional
|
|
11
|
+
from typing import Union
|
|
12
|
+
|
|
13
|
+
from .. import ManagementError
|
|
14
|
+
from .utils import vars_to_str
|
|
15
|
+
from .workspace import WorkspaceGroup
|
|
16
|
+
from .workspace import WorkspaceManager
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ExportService(object):
|
|
20
|
+
"""Export service."""
|
|
21
|
+
|
|
22
|
+
database: str
|
|
23
|
+
table: str
|
|
24
|
+
catalog_info: Dict[str, Any]
|
|
25
|
+
storage_info: Dict[str, Any]
|
|
26
|
+
columns: Optional[List[str]]
|
|
27
|
+
partition_by: Optional[List[Dict[str, str]]]
|
|
28
|
+
order_by: Optional[List[Dict[str, Dict[str, str]]]]
|
|
29
|
+
properties: Optional[Dict[str, Any]]
|
|
30
|
+
incremental: bool
|
|
31
|
+
refresh_interval: Optional[int]
|
|
32
|
+
export_id: Optional[str]
|
|
33
|
+
|
|
34
|
+
def __init__(
|
|
35
|
+
self,
|
|
36
|
+
workspace_group: WorkspaceGroup,
|
|
37
|
+
database: str,
|
|
38
|
+
table: str,
|
|
39
|
+
catalog_info: Union[str, Dict[str, Any]],
|
|
40
|
+
storage_info: Union[str, Dict[str, Any]],
|
|
41
|
+
columns: Optional[List[str]] = None,
|
|
42
|
+
partition_by: Optional[List[Dict[str, str]]] = None,
|
|
43
|
+
order_by: Optional[List[Dict[str, Dict[str, str]]]] = None,
|
|
44
|
+
incremental: bool = False,
|
|
45
|
+
refresh_interval: Optional[int] = None,
|
|
46
|
+
properties: Optional[Dict[str, Any]] = None,
|
|
47
|
+
):
|
|
48
|
+
#: Workspace group
|
|
49
|
+
self.workspace_group = workspace_group
|
|
50
|
+
|
|
51
|
+
#: Name of SingleStoreDB database
|
|
52
|
+
self.database = database
|
|
53
|
+
|
|
54
|
+
#: Name of SingleStoreDB table
|
|
55
|
+
self.table = table
|
|
56
|
+
|
|
57
|
+
#: List of columns to export
|
|
58
|
+
self.columns = columns
|
|
59
|
+
|
|
60
|
+
#: Catalog
|
|
61
|
+
if isinstance(catalog_info, str):
|
|
62
|
+
self.catalog_info = json.loads(catalog_info)
|
|
63
|
+
else:
|
|
64
|
+
self.catalog_info = copy.copy(catalog_info)
|
|
65
|
+
|
|
66
|
+
#: Storage
|
|
67
|
+
if isinstance(storage_info, str):
|
|
68
|
+
self.storage_info = json.loads(storage_info)
|
|
69
|
+
else:
|
|
70
|
+
self.storage_info = copy.copy(storage_info)
|
|
71
|
+
|
|
72
|
+
self.partition_by = partition_by or None
|
|
73
|
+
self.order_by = order_by or None
|
|
74
|
+
self.properties = properties or None
|
|
75
|
+
|
|
76
|
+
self.incremental = incremental
|
|
77
|
+
self.refresh_interval = refresh_interval
|
|
78
|
+
|
|
79
|
+
self.export_id = None
|
|
80
|
+
|
|
81
|
+
self._manager: Optional[WorkspaceManager] = workspace_group._manager
|
|
82
|
+
|
|
83
|
+
@classmethod
|
|
84
|
+
def from_export_id(
|
|
85
|
+
self,
|
|
86
|
+
workspace_group: WorkspaceGroup,
|
|
87
|
+
export_id: str,
|
|
88
|
+
) -> ExportService:
|
|
89
|
+
"""Create export service from export ID."""
|
|
90
|
+
out = ExportService(
|
|
91
|
+
workspace_group=workspace_group,
|
|
92
|
+
database='',
|
|
93
|
+
table='',
|
|
94
|
+
catalog_info={},
|
|
95
|
+
storage_info={},
|
|
96
|
+
)
|
|
97
|
+
out.export_id = export_id
|
|
98
|
+
return out
|
|
99
|
+
|
|
100
|
+
def __str__(self) -> str:
|
|
101
|
+
"""Return string representation."""
|
|
102
|
+
return vars_to_str(self)
|
|
103
|
+
|
|
104
|
+
def __repr__(self) -> str:
|
|
105
|
+
"""Return string representation."""
|
|
106
|
+
return str(self)
|
|
107
|
+
|
|
108
|
+
def create_cluster_identity(self) -> Dict[str, Any]:
|
|
109
|
+
"""Create a cluster identity."""
|
|
110
|
+
if self._manager is None:
|
|
111
|
+
raise ManagementError(
|
|
112
|
+
msg='No workspace manager is associated with this object.',
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
out = self._manager._post(
|
|
116
|
+
f'workspaceGroups/{self.workspace_group.id}/'
|
|
117
|
+
'egress/createEgressClusterIdentity',
|
|
118
|
+
json=dict(
|
|
119
|
+
catalogInfo=self.catalog_info,
|
|
120
|
+
storageInfo=self.storage_info,
|
|
121
|
+
),
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
return out.json()
|
|
125
|
+
|
|
126
|
+
def start(self, tags: Optional[List[str]] = None) -> 'ExportStatus':
|
|
127
|
+
"""Start the export process."""
|
|
128
|
+
if not self.table or not self.database:
|
|
129
|
+
raise ManagementError(
|
|
130
|
+
msg='Database and table must be set before starting the export.',
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
if self._manager is None:
|
|
134
|
+
raise ManagementError(
|
|
135
|
+
msg='No workspace manager is associated with this object.',
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
partition_spec = None
|
|
139
|
+
if self.partition_by:
|
|
140
|
+
partition_spec = dict(partitions=self.partition_by)
|
|
141
|
+
|
|
142
|
+
sort_order_spec = None
|
|
143
|
+
if self.order_by:
|
|
144
|
+
sort_order_spec = dict(keys=self.order_by)
|
|
145
|
+
|
|
146
|
+
out = self._manager._post(
|
|
147
|
+
f'workspaceGroups/{self.workspace_group.id}/egress/startTableEgress',
|
|
148
|
+
json={
|
|
149
|
+
k: v for k, v in dict(
|
|
150
|
+
databaseName=self.database,
|
|
151
|
+
tableName=self.table,
|
|
152
|
+
storageInfo=self.storage_info,
|
|
153
|
+
catalogInfo=self.catalog_info,
|
|
154
|
+
partitionSpec=partition_spec,
|
|
155
|
+
sortOrderSpec=sort_order_spec,
|
|
156
|
+
properties=self.properties,
|
|
157
|
+
incremental=self.incremental or None,
|
|
158
|
+
refreshInterval=self.refresh_interval
|
|
159
|
+
if self.refresh_interval is not None else None,
|
|
160
|
+
).items() if v is not None
|
|
161
|
+
},
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
self.export_id = str(out.json()['egressID'])
|
|
165
|
+
|
|
166
|
+
return ExportStatus(self.export_id, self.workspace_group)
|
|
167
|
+
|
|
168
|
+
def suspend(self) -> 'ExportStatus':
|
|
169
|
+
"""Suspend the export process."""
|
|
170
|
+
if self._manager is None:
|
|
171
|
+
raise ManagementError(
|
|
172
|
+
msg='No workspace manager is associated with this object.',
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
if self.export_id is None:
|
|
176
|
+
raise ManagementError(
|
|
177
|
+
msg='Export ID is not set. You must start the export first.',
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
self._manager._post(
|
|
181
|
+
f'workspaceGroups/{self.workspace_group.id}/egress/suspendTableEgress',
|
|
182
|
+
json=dict(egressID=self.export_id),
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
return ExportStatus(self.export_id, self.workspace_group)
|
|
186
|
+
|
|
187
|
+
def resume(self) -> 'ExportStatus':
|
|
188
|
+
"""Resume the export process."""
|
|
189
|
+
if self._manager is None:
|
|
190
|
+
raise ManagementError(
|
|
191
|
+
msg='No workspace manager is associated with this object.',
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
if self.export_id is None:
|
|
195
|
+
raise ManagementError(
|
|
196
|
+
msg='Export ID is not set. You must start the export first.',
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
self._manager._post(
|
|
200
|
+
f'workspaceGroups/{self.workspace_group.id}/egress/resumeTableEgress',
|
|
201
|
+
json=dict(egressID=self.export_id),
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
return ExportStatus(self.export_id, self.workspace_group)
|
|
205
|
+
|
|
206
|
+
def drop(self) -> None:
|
|
207
|
+
"""Drop the export process."""
|
|
208
|
+
if self._manager is None:
|
|
209
|
+
raise ManagementError(
|
|
210
|
+
msg='No workspace manager is associated with this object.',
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
if self.export_id is None:
|
|
214
|
+
raise ManagementError(
|
|
215
|
+
msg='Export ID is not set. You must start the export first.',
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
self._manager._delete(
|
|
219
|
+
f'workspaceGroups/{self.workspace_group.id}/egress/dropTableEgress',
|
|
220
|
+
json=dict(egressID=self.export_id),
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
return None
|
|
224
|
+
|
|
225
|
+
def status(self) -> ExportStatus:
|
|
226
|
+
"""Get the status of the export process."""
|
|
227
|
+
if self._manager is None:
|
|
228
|
+
raise ManagementError(
|
|
229
|
+
msg='No workspace manager is associated with this object.',
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
if self.export_id is None:
|
|
233
|
+
raise ManagementError(
|
|
234
|
+
msg='Export ID is not set. You must start the export first.',
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
return ExportStatus(self.export_id, self.workspace_group)
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
class ExportStatus(object):
|
|
241
|
+
|
|
242
|
+
export_id: str
|
|
243
|
+
|
|
244
|
+
def __init__(self, export_id: str, workspace_group: WorkspaceGroup):
|
|
245
|
+
self.export_id = export_id
|
|
246
|
+
self.workspace_group = workspace_group
|
|
247
|
+
self._manager: Optional[WorkspaceManager] = workspace_group._manager
|
|
248
|
+
|
|
249
|
+
def _info(self) -> Dict[str, Any]:
|
|
250
|
+
"""Return export status."""
|
|
251
|
+
if self._manager is None:
|
|
252
|
+
raise ManagementError(
|
|
253
|
+
msg='No workspace manager is associated with this object.',
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
out = self._manager._get(
|
|
257
|
+
f'workspaceGroups/{self.workspace_group.id}/egress/tableEgressStatus',
|
|
258
|
+
json=dict(egressID=self.export_id),
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
return out.json()
|
|
262
|
+
|
|
263
|
+
@property
|
|
264
|
+
def status(self) -> str:
|
|
265
|
+
"""Return export status."""
|
|
266
|
+
return self._info().get('status', 'Unknown')
|
|
267
|
+
|
|
268
|
+
@property
|
|
269
|
+
def message(self) -> str:
|
|
270
|
+
"""Return export status message."""
|
|
271
|
+
return self._info().get('statusMsg', '')
|
|
272
|
+
|
|
273
|
+
def __str__(self) -> str:
|
|
274
|
+
return self.status
|
|
275
|
+
|
|
276
|
+
def __repr__(self) -> str:
|
|
277
|
+
return self.status
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
def _get_exports(
|
|
281
|
+
workspace_group: WorkspaceGroup,
|
|
282
|
+
scope: str = 'all',
|
|
283
|
+
) -> List[ExportStatus]:
|
|
284
|
+
"""Get all exports in the workspace group."""
|
|
285
|
+
if workspace_group._manager is None:
|
|
286
|
+
raise ManagementError(
|
|
287
|
+
msg='No workspace manager is associated with this object.',
|
|
288
|
+
)
|
|
289
|
+
|
|
290
|
+
out = workspace_group._manager._get(
|
|
291
|
+
f'workspaceGroups/{workspace_group.id}/egress/tableEgressStatus',
|
|
292
|
+
json=dict(scope=scope),
|
|
293
|
+
)
|
|
294
|
+
|
|
295
|
+
return out.json()
|