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,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()