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.
Files changed (183) hide show
  1. singlestoredb/__init__.py +75 -0
  2. singlestoredb/ai/__init__.py +2 -0
  3. singlestoredb/ai/chat.py +139 -0
  4. singlestoredb/ai/embeddings.py +128 -0
  5. singlestoredb/alchemy/__init__.py +90 -0
  6. singlestoredb/apps/__init__.py +3 -0
  7. singlestoredb/apps/_cloud_functions.py +90 -0
  8. singlestoredb/apps/_config.py +72 -0
  9. singlestoredb/apps/_connection_info.py +18 -0
  10. singlestoredb/apps/_dashboards.py +47 -0
  11. singlestoredb/apps/_process.py +32 -0
  12. singlestoredb/apps/_python_udfs.py +100 -0
  13. singlestoredb/apps/_stdout_supress.py +30 -0
  14. singlestoredb/apps/_uvicorn_util.py +36 -0
  15. singlestoredb/auth.py +245 -0
  16. singlestoredb/config.py +484 -0
  17. singlestoredb/connection.py +1487 -0
  18. singlestoredb/converters.py +950 -0
  19. singlestoredb/docstring/__init__.py +33 -0
  20. singlestoredb/docstring/attrdoc.py +126 -0
  21. singlestoredb/docstring/common.py +230 -0
  22. singlestoredb/docstring/epydoc.py +267 -0
  23. singlestoredb/docstring/google.py +412 -0
  24. singlestoredb/docstring/numpydoc.py +562 -0
  25. singlestoredb/docstring/parser.py +100 -0
  26. singlestoredb/docstring/py.typed +1 -0
  27. singlestoredb/docstring/rest.py +256 -0
  28. singlestoredb/docstring/tests/__init__.py +1 -0
  29. singlestoredb/docstring/tests/_pydoctor.py +21 -0
  30. singlestoredb/docstring/tests/test_epydoc.py +729 -0
  31. singlestoredb/docstring/tests/test_google.py +1007 -0
  32. singlestoredb/docstring/tests/test_numpydoc.py +1100 -0
  33. singlestoredb/docstring/tests/test_parse_from_object.py +109 -0
  34. singlestoredb/docstring/tests/test_parser.py +248 -0
  35. singlestoredb/docstring/tests/test_rest.py +547 -0
  36. singlestoredb/docstring/tests/test_util.py +70 -0
  37. singlestoredb/docstring/util.py +141 -0
  38. singlestoredb/exceptions.py +120 -0
  39. singlestoredb/functions/__init__.py +16 -0
  40. singlestoredb/functions/decorator.py +201 -0
  41. singlestoredb/functions/dtypes.py +1793 -0
  42. singlestoredb/functions/ext/__init__.py +1 -0
  43. singlestoredb/functions/ext/arrow.py +375 -0
  44. singlestoredb/functions/ext/asgi.py +2133 -0
  45. singlestoredb/functions/ext/json.py +420 -0
  46. singlestoredb/functions/ext/mmap.py +413 -0
  47. singlestoredb/functions/ext/rowdat_1.py +724 -0
  48. singlestoredb/functions/ext/timer.py +89 -0
  49. singlestoredb/functions/ext/utils.py +218 -0
  50. singlestoredb/functions/signature.py +1578 -0
  51. singlestoredb/functions/typing/__init__.py +41 -0
  52. singlestoredb/functions/typing/numpy.py +20 -0
  53. singlestoredb/functions/typing/pandas.py +2 -0
  54. singlestoredb/functions/typing/polars.py +2 -0
  55. singlestoredb/functions/typing/pyarrow.py +2 -0
  56. singlestoredb/functions/utils.py +421 -0
  57. singlestoredb/fusion/__init__.py +11 -0
  58. singlestoredb/fusion/graphql.py +213 -0
  59. singlestoredb/fusion/handler.py +916 -0
  60. singlestoredb/fusion/handlers/__init__.py +0 -0
  61. singlestoredb/fusion/handlers/export.py +525 -0
  62. singlestoredb/fusion/handlers/files.py +690 -0
  63. singlestoredb/fusion/handlers/job.py +660 -0
  64. singlestoredb/fusion/handlers/models.py +250 -0
  65. singlestoredb/fusion/handlers/stage.py +502 -0
  66. singlestoredb/fusion/handlers/utils.py +324 -0
  67. singlestoredb/fusion/handlers/workspace.py +956 -0
  68. singlestoredb/fusion/registry.py +249 -0
  69. singlestoredb/fusion/result.py +399 -0
  70. singlestoredb/http/__init__.py +27 -0
  71. singlestoredb/http/connection.py +1267 -0
  72. singlestoredb/magics/__init__.py +34 -0
  73. singlestoredb/magics/run_personal.py +137 -0
  74. singlestoredb/magics/run_shared.py +134 -0
  75. singlestoredb/management/__init__.py +9 -0
  76. singlestoredb/management/billing_usage.py +148 -0
  77. singlestoredb/management/cluster.py +462 -0
  78. singlestoredb/management/export.py +295 -0
  79. singlestoredb/management/files.py +1102 -0
  80. singlestoredb/management/inference_api.py +105 -0
  81. singlestoredb/management/job.py +887 -0
  82. singlestoredb/management/manager.py +373 -0
  83. singlestoredb/management/organization.py +226 -0
  84. singlestoredb/management/region.py +169 -0
  85. singlestoredb/management/utils.py +423 -0
  86. singlestoredb/management/workspace.py +1927 -0
  87. singlestoredb/mysql/__init__.py +177 -0
  88. singlestoredb/mysql/_auth.py +298 -0
  89. singlestoredb/mysql/charset.py +214 -0
  90. singlestoredb/mysql/connection.py +2032 -0
  91. singlestoredb/mysql/constants/CLIENT.py +38 -0
  92. singlestoredb/mysql/constants/COMMAND.py +32 -0
  93. singlestoredb/mysql/constants/CR.py +78 -0
  94. singlestoredb/mysql/constants/ER.py +474 -0
  95. singlestoredb/mysql/constants/EXTENDED_TYPE.py +3 -0
  96. singlestoredb/mysql/constants/FIELD_TYPE.py +48 -0
  97. singlestoredb/mysql/constants/FLAG.py +15 -0
  98. singlestoredb/mysql/constants/SERVER_STATUS.py +10 -0
  99. singlestoredb/mysql/constants/VECTOR_TYPE.py +6 -0
  100. singlestoredb/mysql/constants/__init__.py +0 -0
  101. singlestoredb/mysql/converters.py +271 -0
  102. singlestoredb/mysql/cursors.py +896 -0
  103. singlestoredb/mysql/err.py +92 -0
  104. singlestoredb/mysql/optionfile.py +20 -0
  105. singlestoredb/mysql/protocol.py +450 -0
  106. singlestoredb/mysql/tests/__init__.py +19 -0
  107. singlestoredb/mysql/tests/base.py +126 -0
  108. singlestoredb/mysql/tests/conftest.py +37 -0
  109. singlestoredb/mysql/tests/test_DictCursor.py +132 -0
  110. singlestoredb/mysql/tests/test_SSCursor.py +141 -0
  111. singlestoredb/mysql/tests/test_basic.py +452 -0
  112. singlestoredb/mysql/tests/test_connection.py +851 -0
  113. singlestoredb/mysql/tests/test_converters.py +58 -0
  114. singlestoredb/mysql/tests/test_cursor.py +141 -0
  115. singlestoredb/mysql/tests/test_err.py +16 -0
  116. singlestoredb/mysql/tests/test_issues.py +514 -0
  117. singlestoredb/mysql/tests/test_load_local.py +75 -0
  118. singlestoredb/mysql/tests/test_nextset.py +88 -0
  119. singlestoredb/mysql/tests/test_optionfile.py +27 -0
  120. singlestoredb/mysql/tests/thirdparty/__init__.py +6 -0
  121. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/__init__.py +9 -0
  122. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/capabilities.py +323 -0
  123. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/dbapi20.py +865 -0
  124. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_capabilities.py +110 -0
  125. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_dbapi20.py +224 -0
  126. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py +101 -0
  127. singlestoredb/mysql/times.py +23 -0
  128. singlestoredb/notebook/__init__.py +16 -0
  129. singlestoredb/notebook/_objects.py +213 -0
  130. singlestoredb/notebook/_portal.py +352 -0
  131. singlestoredb/py.typed +0 -0
  132. singlestoredb/pytest.py +352 -0
  133. singlestoredb/server/__init__.py +0 -0
  134. singlestoredb/server/docker.py +452 -0
  135. singlestoredb/server/free_tier.py +267 -0
  136. singlestoredb/tests/__init__.py +0 -0
  137. singlestoredb/tests/alltypes.sql +307 -0
  138. singlestoredb/tests/alltypes_no_nulls.sql +208 -0
  139. singlestoredb/tests/empty.sql +0 -0
  140. singlestoredb/tests/ext_funcs/__init__.py +702 -0
  141. singlestoredb/tests/local_infile.csv +3 -0
  142. singlestoredb/tests/test.ipynb +18 -0
  143. singlestoredb/tests/test.sql +680 -0
  144. singlestoredb/tests/test2.ipynb +18 -0
  145. singlestoredb/tests/test2.sql +1 -0
  146. singlestoredb/tests/test_basics.py +1332 -0
  147. singlestoredb/tests/test_config.py +318 -0
  148. singlestoredb/tests/test_connection.py +3103 -0
  149. singlestoredb/tests/test_dbapi.py +27 -0
  150. singlestoredb/tests/test_exceptions.py +45 -0
  151. singlestoredb/tests/test_ext_func.py +1472 -0
  152. singlestoredb/tests/test_ext_func_data.py +1101 -0
  153. singlestoredb/tests/test_fusion.py +1527 -0
  154. singlestoredb/tests/test_http.py +288 -0
  155. singlestoredb/tests/test_management.py +1599 -0
  156. singlestoredb/tests/test_plugin.py +33 -0
  157. singlestoredb/tests/test_results.py +171 -0
  158. singlestoredb/tests/test_types.py +132 -0
  159. singlestoredb/tests/test_udf.py +737 -0
  160. singlestoredb/tests/test_udf_returns.py +459 -0
  161. singlestoredb/tests/test_vectorstore.py +51 -0
  162. singlestoredb/tests/test_xdict.py +333 -0
  163. singlestoredb/tests/utils.py +141 -0
  164. singlestoredb/types.py +373 -0
  165. singlestoredb/utils/__init__.py +0 -0
  166. singlestoredb/utils/config.py +950 -0
  167. singlestoredb/utils/convert_rows.py +69 -0
  168. singlestoredb/utils/debug.py +13 -0
  169. singlestoredb/utils/dtypes.py +205 -0
  170. singlestoredb/utils/events.py +65 -0
  171. singlestoredb/utils/mogrify.py +151 -0
  172. singlestoredb/utils/results.py +585 -0
  173. singlestoredb/utils/xdict.py +425 -0
  174. singlestoredb/vectorstore.py +192 -0
  175. singlestoredb/warnings.py +5 -0
  176. singlestoredb-1.16.1.dist-info/METADATA +165 -0
  177. singlestoredb-1.16.1.dist-info/RECORD +183 -0
  178. singlestoredb-1.16.1.dist-info/WHEEL +5 -0
  179. singlestoredb-1.16.1.dist-info/entry_points.txt +2 -0
  180. singlestoredb-1.16.1.dist-info/licenses/LICENSE +201 -0
  181. singlestoredb-1.16.1.dist-info/top_level.txt +3 -0
  182. sqlx/__init__.py +4 -0
  183. sqlx/magic.py +113 -0
@@ -0,0 +1,324 @@
1
+ #!/usr/bin/env python
2
+ import datetime
3
+ import os
4
+ from typing import Any
5
+ from typing import Dict
6
+ from typing import Optional
7
+ from typing import Union
8
+
9
+ from ...exceptions import ManagementError
10
+ from ...management import files as mgmt_files
11
+ from ...management import manage_workspaces
12
+ from ...management.files import FilesManager
13
+ from ...management.files import FileSpace
14
+ from ...management.files import manage_files
15
+ from ...management.workspace import StarterWorkspace
16
+ from ...management.workspace import Workspace
17
+ from ...management.workspace import WorkspaceGroup
18
+ from ...management.workspace import WorkspaceManager
19
+
20
+
21
+ def get_workspace_manager() -> WorkspaceManager:
22
+ """Return a new workspace manager."""
23
+ return manage_workspaces()
24
+
25
+
26
+ def get_files_manager() -> FilesManager:
27
+ """Return a new files manager."""
28
+ return manage_files()
29
+
30
+
31
+ def dt_isoformat(dt: Optional[datetime.datetime]) -> Optional[str]:
32
+ """Convert datetime to string."""
33
+ if dt is None:
34
+ return None
35
+ return dt.isoformat()
36
+
37
+
38
+ def get_workspace_group(params: Dict[str, Any]) -> WorkspaceGroup:
39
+ """
40
+ Find a workspace group matching group_id or group_name.
41
+
42
+ This function will get a workspace group or ID from the
43
+ following parameters:
44
+
45
+ * params['group_name']
46
+ * params['group_id']
47
+ * params['group']['group_name']
48
+ * params['group']['group_id']
49
+ * params['in_group']['group_name']
50
+ * params['in_group']['group_id']
51
+
52
+ Or, from the SINGLESTOREDB_WORKSPACE_GROUP environment variable.
53
+
54
+ """
55
+ manager = get_workspace_manager()
56
+
57
+ group_name = params.get('group_name') or \
58
+ (params.get('in_group') or {}).get('group_name') or \
59
+ (params.get('group') or {}).get('group_name')
60
+ if group_name:
61
+ workspace_groups = [
62
+ x for x in manager.workspace_groups
63
+ if x.name == group_name
64
+ ]
65
+
66
+ if not workspace_groups:
67
+ raise KeyError(
68
+ f'no workspace group found with name: {group_name}',
69
+ )
70
+
71
+ if len(workspace_groups) > 1:
72
+ ids = ', '.join(x.id for x in workspace_groups)
73
+ raise ValueError(
74
+ f'more than one workspace group with given name was found: {ids}',
75
+ )
76
+
77
+ return workspace_groups[0]
78
+
79
+ group_id = params.get('group_id') or \
80
+ (params.get('in_group') or {}).get('group_id') or \
81
+ (params.get('group') or {}).get('group_id')
82
+ if group_id:
83
+ try:
84
+ return manager.get_workspace_group(group_id)
85
+ except ManagementError as exc:
86
+ if exc.errno == 404:
87
+ raise KeyError(f'no workspace group found with ID: {group_id}')
88
+ raise
89
+
90
+ if os.environ.get('SINGLESTOREDB_WORKSPACE_GROUP'):
91
+ try:
92
+ return manager.get_workspace_group(
93
+ os.environ['SINGLESTOREDB_WORKSPACE_GROUP'],
94
+ )
95
+ except ManagementError as exc:
96
+ if exc.errno == 404:
97
+ raise KeyError(
98
+ 'no workspace found with ID: '
99
+ f'{os.environ["SINGLESTOREDB_WORKSPACE_GROUP"]}',
100
+ )
101
+ raise
102
+
103
+ if os.environ.get('SINGLESTOREDB_CLUSTER'):
104
+ raise ValueError('clusters and shared workspaces are not currently supported')
105
+
106
+ raise KeyError('no workspace group was specified')
107
+
108
+
109
+ def get_workspace(params: Dict[str, Any]) -> Workspace:
110
+ """
111
+ Retrieve the specified workspace.
112
+
113
+ This function will get a workspace group or ID from the
114
+ following parameters:
115
+
116
+ * params['workspace_name']
117
+ * params['workspace_id']
118
+ * params['workspace']['workspace_name']
119
+ * params['workspace']['workspace_id']
120
+
121
+ Or, from the SINGLESTOREDB_WORKSPACE environment variable.
122
+
123
+ """
124
+ manager = get_workspace_manager()
125
+ workspace_name = params.get('workspace_name') or \
126
+ (params.get('workspace') or {}).get('workspace_name')
127
+ if workspace_name:
128
+ wg = get_workspace_group(params)
129
+ workspaces = [
130
+ x for x in wg.workspaces
131
+ if x.name == workspace_name
132
+ ]
133
+
134
+ if not workspaces:
135
+ raise KeyError(
136
+ f'no workspace found with name: {workspace_name}',
137
+ )
138
+
139
+ if len(workspaces) > 1:
140
+ ids = ', '.join(x.id for x in workspaces)
141
+ raise ValueError(
142
+ f'more than one workspace with given name was found: {ids}',
143
+ )
144
+
145
+ return workspaces[0]
146
+
147
+ workspace_id = params.get('workspace_id') or \
148
+ (params.get('workspace') or {}).get('workspace_id')
149
+ if workspace_id:
150
+ try:
151
+ return manager.get_workspace(workspace_id)
152
+ except ManagementError as exc:
153
+ if exc.errno == 404:
154
+ raise KeyError(f'no workspace found with ID: {workspace_id}')
155
+ raise
156
+
157
+ if os.environ.get('SINGLESTOREDB_WORKSPACE'):
158
+ try:
159
+ return manager.get_workspace(
160
+ os.environ['SINGLESTOREDB_WORKSPACE'],
161
+ )
162
+ except ManagementError as exc:
163
+ if exc.errno == 404:
164
+ raise KeyError(
165
+ 'no workspace found with ID: '
166
+ f'{os.environ["SINGLESTOREDB_WORKSPACE"]}',
167
+ )
168
+ raise
169
+
170
+ if os.environ.get('SINGLESTOREDB_CLUSTER'):
171
+ raise ValueError('clusters and shared workspaces are not currently supported')
172
+
173
+ raise KeyError('no workspace was specified')
174
+
175
+
176
+ def get_deployment(
177
+ params: Dict[str, Any],
178
+ ) -> Union[WorkspaceGroup, StarterWorkspace]:
179
+ """
180
+ Find a starter workspace matching deployment_id or deployment_name.
181
+
182
+ This function will get a starter workspace or ID from the
183
+ following parameters:
184
+
185
+ * params['deployment_name']
186
+ * params['deployment_id']
187
+ * params['group']['deployment_name']
188
+ * params['group']['deployment_id']
189
+ * params['in_deployment']['deployment_name']
190
+ * params['in_deployment']['deployment_id']
191
+ * params['in']['in_group']['deployment_name']
192
+ * params['in']['in_group']['deployment_id']
193
+ * params['in']['in_deployment']['deployment_name']
194
+ * params['in']['in_deployment']['deployment_id']
195
+
196
+ Or, from the SINGLESTOREDB_WORKSPACE_GROUP
197
+ or SINGLESTOREDB_CLUSTER environment variables.
198
+
199
+ """
200
+ manager = get_workspace_manager()
201
+
202
+ #
203
+ # Search for deployment by name
204
+ #
205
+ deployment_name = params.get('deployment_name') or \
206
+ (params.get('in_deployment') or {}).get('deployment_name') or \
207
+ (params.get('group') or {}).get('deployment_name') or \
208
+ ((params.get('in') or {}).get('in_group') or {}).get('deployment_name') or \
209
+ ((params.get('in') or {}).get('in_deployment') or {}).get('deployment_name')
210
+
211
+ if deployment_name:
212
+ # Standard workspace group
213
+ workspace_groups = [
214
+ x for x in manager.workspace_groups
215
+ if x.name == deployment_name
216
+ ]
217
+
218
+ if len(workspace_groups) == 1:
219
+ return workspace_groups[0]
220
+
221
+ elif len(workspace_groups) > 1:
222
+ ids = ', '.join(x.id for x in workspace_groups)
223
+ raise ValueError(
224
+ f'more than one workspace group with given name was found: {ids}',
225
+ )
226
+
227
+ # Starter workspace
228
+ starter_workspaces = [
229
+ x for x in manager.starter_workspaces
230
+ if x.name == deployment_name
231
+ ]
232
+
233
+ if len(starter_workspaces) == 1:
234
+ return starter_workspaces[0]
235
+
236
+ elif len(starter_workspaces) > 1:
237
+ ids = ', '.join(x.id for x in starter_workspaces)
238
+ raise ValueError(
239
+ f'more than one starter workspace with given name was found: {ids}',
240
+ )
241
+
242
+ raise KeyError(f'no deployment found with name: {deployment_name}')
243
+
244
+ #
245
+ # Search for deployment by ID
246
+ #
247
+ deployment_id = params.get('deployment_id') or \
248
+ (params.get('in_deployment') or {}).get('deployment_id') or \
249
+ (params.get('group') or {}).get('deployment_id') or \
250
+ ((params.get('in') or {}).get('in_group') or {}).get('deployment_id') or \
251
+ ((params.get('in') or {}).get('in_deployment') or {}).get('deployment_id')
252
+
253
+ if deployment_id:
254
+ try:
255
+ # Standard workspace group
256
+ return manager.get_workspace_group(deployment_id)
257
+ except ManagementError as exc:
258
+ if exc.errno == 404:
259
+ try:
260
+ # Starter workspace
261
+ return manager.get_starter_workspace(deployment_id)
262
+ except ManagementError as exc:
263
+ if exc.errno == 404:
264
+ raise KeyError(f'no deployment found with ID: {deployment_id}')
265
+ raise
266
+ else:
267
+ raise
268
+
269
+ # Use workspace group from environment
270
+ if os.environ.get('SINGLESTOREDB_WORKSPACE_GROUP'):
271
+ try:
272
+ return manager.get_workspace_group(
273
+ os.environ['SINGLESTOREDB_WORKSPACE_GROUP'],
274
+ )
275
+ except ManagementError as exc:
276
+ if exc.errno == 404:
277
+ raise KeyError(
278
+ 'no workspace found with ID: '
279
+ f'{os.environ["SINGLESTOREDB_WORKSPACE_GROUP"]}',
280
+ )
281
+ raise
282
+
283
+ # Use cluster from environment
284
+ if os.environ.get('SINGLESTOREDB_CLUSTER'):
285
+ try:
286
+ return manager.get_starter_workspace(
287
+ os.environ['SINGLESTOREDB_CLUSTER'],
288
+ )
289
+ except ManagementError as exc:
290
+ if exc.errno == 404:
291
+ raise KeyError(
292
+ 'no starter workspace found with ID: '
293
+ f'{os.environ["SINGLESTOREDB_CLUSTER"]}',
294
+ )
295
+ raise
296
+
297
+ raise KeyError('no deployment was specified')
298
+
299
+
300
+ def get_file_space(params: Dict[str, Any]) -> FileSpace:
301
+ """
302
+ Retrieve the specified file space.
303
+
304
+ This function will get a file space from the
305
+ following parameters:
306
+
307
+ * params['file_location']
308
+ """
309
+ manager = get_files_manager()
310
+
311
+ file_location = params.get('file_location')
312
+ if file_location:
313
+ file_location_lower_case = file_location.lower()
314
+
315
+ if file_location_lower_case == mgmt_files.PERSONAL_SPACE:
316
+ return manager.personal_space
317
+ elif file_location_lower_case == mgmt_files.SHARED_SPACE:
318
+ return manager.shared_space
319
+ elif file_location_lower_case == mgmt_files.MODELS_SPACE:
320
+ return manager.models_space
321
+ else:
322
+ raise ValueError(f'invalid file location: {file_location}')
323
+
324
+ raise KeyError('no file space was specified')