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,502 @@
1
+ #!/usr/bin/env python3
2
+ from typing import Any
3
+ from typing import Dict
4
+ from typing import Optional
5
+
6
+ from .. import result
7
+ from ..handler import SQLHandler
8
+ from ..result import FusionSQLResult
9
+ from .utils import dt_isoformat
10
+ from .utils import get_deployment
11
+
12
+
13
+ class ShowStageFilesHandler(SQLHandler):
14
+ """
15
+ SHOW STAGE FILES [ in ]
16
+ [ at_path ] [ <like> ]
17
+ [ <order-by> ]
18
+ [ <limit> ] [ recursive ] [ extended ];
19
+
20
+ # Deployment
21
+ in = { in_group | in_deployment }
22
+ in_group = IN GROUP { deployment_id | deployment_name }
23
+ in_deployment = IN { deployment_id | deployment_name }
24
+
25
+ # ID of deployment
26
+ deployment_id = ID '<deployment-id>'
27
+
28
+ # Name of deployment
29
+ deployment_name = '<deployment-name>'
30
+
31
+ # Stage path to list
32
+ at_path = AT '<path>'
33
+
34
+ # Should the listing be recursive?
35
+ recursive = RECURSIVE
36
+
37
+ # Should extended attributes be shown?
38
+ extended = EXTENDED
39
+
40
+ Description
41
+ -----------
42
+ Displays a list of files in a Stage.
43
+
44
+ Refer to `Stage <https://docs.singlestore.com/cloud/developer-resources/stage-storage-service/>`_
45
+ for more information.
46
+
47
+ Arguments
48
+ ---------
49
+ * ``<deployment-id>``: The ID of the deployment in which
50
+ the Stage is attached.
51
+ * ``<deployment-name>``: The name of the deployment in which
52
+ which the Stage is attached.
53
+ * ``<path>``: A path in the Stage.
54
+ * ``<pattern>``: A pattern similar to SQL LIKE clause.
55
+ Uses ``%`` as the wildcard character.
56
+
57
+ Remarks
58
+ -------
59
+ * Use the ``LIKE`` clause to specify a pattern and return only the
60
+ files that match the specified pattern.
61
+ * The ``LIMIT`` clause limits the number of results to the
62
+ specified number.
63
+ * Use the ``ORDER BY`` clause to sort the results by the specified
64
+ key. By default, the results are sorted in the ascending order.
65
+ * The ``AT`` clause specifies the path in the Stage to list
66
+ the files from.
67
+ * The ``IN`` clause specifies the ID or the name of the
68
+ deployment in which the Stage is attached.
69
+ * Use the ``RECURSIVE`` clause to list the files recursively.
70
+ * To return more information about the files, use the ``EXTENDED``
71
+ clause.
72
+
73
+ Examples
74
+ --------
75
+ The following command lists the files at a specific path::
76
+
77
+ SHOW STAGE FILES IN 'wsg1' AT "/data/";
78
+
79
+ The following command lists the files recursively with
80
+ additional information::
81
+
82
+ SHOW STAGE FILES IN 'wsg1' RECURSIVE EXTENDED;
83
+
84
+ See Also
85
+ --------
86
+ * ``UPLOAD FILE TO STAGE``
87
+ * ``DOWNLOAD STAGE FILE``
88
+
89
+ """ # noqa: E501
90
+
91
+ def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
92
+ wg = get_deployment(params)
93
+
94
+ res = FusionSQLResult()
95
+ res.add_field('Name', result.STRING)
96
+
97
+ if params['extended']:
98
+ res.add_field('Type', result.STRING)
99
+ res.add_field('Size', result.INTEGER)
100
+ res.add_field('Writable', result.STRING)
101
+ res.add_field('CreatedAt', result.DATETIME)
102
+ res.add_field('LastModifiedAt', result.DATETIME)
103
+
104
+ files = []
105
+ for x in wg.stage.listdir(
106
+ params['at_path'] or '/',
107
+ recursive=params['recursive'],
108
+ ):
109
+ info = wg.stage.info(x)
110
+ files.append(
111
+ tuple([
112
+ x, info.type, info.size or 0, info.writable,
113
+ dt_isoformat(info.created_at),
114
+ dt_isoformat(info.last_modified_at),
115
+ ]),
116
+ )
117
+ res.set_rows(files)
118
+
119
+ else:
120
+ res.set_rows([(x,) for x in wg.stage.listdir(
121
+ params['at_path'] or '/',
122
+ recursive=params['recursive'],
123
+ )])
124
+
125
+ if params['like']:
126
+ res = res.like(Name=params['like'])
127
+
128
+ return res.order_by(**params['order_by']).limit(params['limit'])
129
+
130
+
131
+ ShowStageFilesHandler.register(overwrite=True)
132
+
133
+
134
+ class UploadStageFileHandler(SQLHandler):
135
+ """
136
+ UPLOAD FILE TO STAGE stage_path
137
+ [ in ]
138
+ FROM local_path [ overwrite ];
139
+
140
+ # Path to stage file
141
+ stage_path = '<stage-path>'
142
+
143
+ # Deployment
144
+ in = { in_group | in_deployment }
145
+ in_group = IN GROUP { deployment_id | deployment_name }
146
+ in_deployment = IN { deployment_id | deployment_name }
147
+
148
+ # ID of deployment
149
+ deployment_id = ID '<deployment-id>'
150
+
151
+ # Name of deployment
152
+ deployment_name = '<deployment-name>'
153
+
154
+ # Path to local file
155
+ local_path = '<local-path>'
156
+
157
+ # Should an existing file be overwritten?
158
+ overwrite = OVERWRITE
159
+
160
+ Description
161
+ -----------
162
+ Uploads a file to a Stage.
163
+
164
+ Refer to `Stage <https://docs.singlestore.com/cloud/developer-resources/stage-storage-service/>`_
165
+ for more information.
166
+
167
+ Arguments
168
+ ---------
169
+ * ``<stage-path>``: The path in the Stage where the file is uploaded.
170
+ * ``<deployment-id>``: The ID of the deployment in which the Stage
171
+ is attached.
172
+ * ``<deployment-name>``: The name of the deployment in which
173
+ which the Stage is attached.
174
+ * ``<local-path>``: The path to the file to upload in the local
175
+ directory.
176
+
177
+ Remarks
178
+ -------
179
+ * The ``IN`` clause specifies the ID or the name of the workspace
180
+ group in which the Stage is attached.
181
+ * If the ``OVERWRITE`` clause is specified, any existing file at the
182
+ specified path in the Stage is overwritten.
183
+
184
+ Examples
185
+ --------
186
+ The following command uploads a file to a Stage and overwrites any
187
+ existing files at the specified path::
188
+
189
+ UPLOAD FILE TO STAGE '/data/stats.csv' IN 'wsg1'
190
+ FROM '/tmp/user/stats.csv' OVERWRITE;
191
+
192
+ See Also
193
+ --------
194
+ * ``DOWNLOAD STAGE FILE``
195
+
196
+ """ # noqa: E501
197
+
198
+ def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
199
+ wg = get_deployment(params)
200
+ wg.stage.upload_file(
201
+ params['local_path'], params['stage_path'],
202
+ overwrite=params['overwrite'],
203
+ )
204
+ return None
205
+
206
+
207
+ UploadStageFileHandler.register(overwrite=True)
208
+
209
+
210
+ class DownloadStageFileHandler(SQLHandler):
211
+ """
212
+ DOWNLOAD STAGE FILE stage_path
213
+ [ in ]
214
+ [ local_path ]
215
+ [ overwrite ]
216
+ [ encoding ];
217
+
218
+ # Path to stage file
219
+ stage_path = '<stage-path>'
220
+
221
+ # Deployment
222
+ in = { in_group | in_deployment }
223
+ in_group = IN GROUP { deployment_id | deployment_name }
224
+ in_deployment = IN { deployment_id | deployment_name }
225
+
226
+ # ID of deployment
227
+ deployment_id = ID '<deployment-id>'
228
+
229
+ # Name of deployment
230
+ deployment_name = '<deployment-name>'
231
+
232
+ # Path to local file
233
+ local_path = TO '<local-path>'
234
+
235
+ # Should an existing file be overwritten?
236
+ overwrite = OVERWRITE
237
+
238
+ # File encoding
239
+ encoding = ENCODING '<encoding>'
240
+
241
+ Description
242
+ -----------
243
+ Download a file from a Stage.
244
+
245
+ Refer to `Stage <https://docs.singlestore.com/cloud/developer-resources/stage-storage-service/>`_
246
+ for more information.
247
+
248
+ Arguments
249
+ ---------
250
+ * ``<stage-path>``: The path to the file to download in a Stage.
251
+ * ``<deployment-id>``: The ID of the deployment in which the
252
+ Stage is attached.
253
+ * ``<deployment-name>``: The name of the deployment in which
254
+ which the Stage is attached.
255
+ * ``<encoding>``: The encoding to apply to the downloaded file.
256
+ * ``<local-path>``: Specifies the path in the local directory
257
+ where the file is downloaded.
258
+
259
+ Remarks
260
+ -------
261
+ * If the ``OVERWRITE`` clause is specified, any existing file at
262
+ the download location is overwritten.
263
+ * The ``IN`` clause specifies the ID or the name of the
264
+ deployment in which the Stage is attached.
265
+ * By default, files are downloaded in binary encoding. To view
266
+ the contents of the file on the standard output, use the
267
+ ``ENCODING`` clause and specify an encoding.
268
+ * If ``<local-path>`` is not specified, the file is displayed
269
+ on the standard output.
270
+
271
+ Examples
272
+ --------
273
+ The following command displays the contents of the file on the
274
+ standard output::
275
+
276
+ DOWNLOAD STAGE FILE '/data/stats.csv' IN 'wsgroup1' ENCODING 'utf8';
277
+
278
+ The following command downloads a file to a specific location and
279
+ overwrites any existing file with the name ``stats.csv`` on the local storage::
280
+
281
+ DOWNLOAD STAGE FILE '/data/stats.csv' IN 'wsgroup1'
282
+ TO '/tmp/data.csv' OVERWRITE;
283
+
284
+ See Also
285
+ --------
286
+ * ``UPLOAD FILE TO STAGE``
287
+
288
+ """ # noqa: E501
289
+
290
+ def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
291
+ wg = get_deployment(params)
292
+
293
+ out = wg.stage.download_file(
294
+ params['stage_path'],
295
+ local_path=params['local_path'] or None,
296
+ overwrite=params['overwrite'],
297
+ encoding=params['encoding'] or None,
298
+ )
299
+
300
+ if not params['local_path']:
301
+ res = FusionSQLResult()
302
+ if params['encoding']:
303
+ res.add_field('Data', result.STRING)
304
+ else:
305
+ res.add_field('Data', result.BLOB)
306
+ res.set_rows([(out,)])
307
+ return res
308
+
309
+ return None
310
+
311
+
312
+ DownloadStageFileHandler.register(overwrite=True)
313
+
314
+
315
+ class DropStageFileHandler(SQLHandler):
316
+ """
317
+ DROP STAGE FILE stage_path
318
+ [ in ];
319
+
320
+ # Path to stage file
321
+ stage_path = '<stage-path>'
322
+
323
+ # Deployment
324
+ in = { in_group | in_deployment }
325
+ in_group = IN GROUP { deployment_id | deployment_name }
326
+ in_deployment = IN { deployment_id | deployment_name }
327
+
328
+ # ID of deployment
329
+ deployment_id = ID '<deployment-id>'
330
+
331
+ # Name of deployment
332
+ deployment_name = '<deployment-name>'
333
+
334
+ Description
335
+ -----------
336
+ Deletes a file from a Stage.
337
+
338
+ Refer to `Stage <https://docs.singlestore.com/cloud/developer-resources/stage-storage-service/>`_
339
+ for more information.
340
+
341
+ Arguments
342
+ ---------
343
+ * ``<stage-path>``: The path to the file to delete in a Stage.
344
+ * ``<deployment-id>``: The ID of the deployment in which the
345
+ Stage is attached.
346
+ * ``<deployment-name>``: The name of the deployment in which
347
+ which the Stage is attached.
348
+
349
+ Remarks
350
+ -------
351
+ * The ``IN`` clause specifies the ID or the name of the
352
+ deployment in which the Stage is attached.
353
+
354
+ Example
355
+ --------
356
+ The following command deletes a file from a Stage attached to
357
+ a deployment named **wsg1**::
358
+
359
+ DROP STAGE FILE '/data/stats.csv' IN 'wsg1';
360
+
361
+ See Also
362
+ --------
363
+ * ``DROP STAGE FOLDER``
364
+
365
+ """ # noqa: E501
366
+
367
+ def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
368
+ wg = get_deployment(params)
369
+ wg.stage.remove(params['stage_path'])
370
+ return None
371
+
372
+
373
+ DropStageFileHandler.register(overwrite=True)
374
+
375
+
376
+ class DropStageFolderHandler(SQLHandler):
377
+ """
378
+ DROP STAGE FOLDER stage_path
379
+ [ in ]
380
+ [ recursive ];
381
+
382
+ # Path to stage folder
383
+ stage_path = '<stage-path>'
384
+
385
+ # Deployment
386
+ in = { in_group | in_deployment }
387
+ in_group = IN GROUP { deployment_id | deployment_name }
388
+ in_deployment = IN { deployment_id | deployment_name }
389
+
390
+ # ID of deployment
391
+ deployment_id = ID '<deployment-id>'
392
+
393
+ # Name of deployment
394
+ deployment_name = '<deployment-name>'
395
+
396
+ # Should folders be deleted recursively?
397
+ recursive = RECURSIVE
398
+
399
+ Description
400
+ -----------
401
+ Deletes a folder from a Stage.
402
+
403
+ Refer to `Stage <https://docs.singlestore.com/cloud/developer-resources/stage-storage-service/>`_
404
+ for more information.
405
+
406
+ Arguments
407
+ ---------
408
+ * ``<stage-path>``: The path to the folder to delete in a Stage.
409
+ * ``<deployment-id>``: The ID of the deployment in which the
410
+ Stage is attached.
411
+ * ``<deployment-name>``: The name of the deployment in which
412
+ which the Stage is attached.
413
+
414
+ Remarks
415
+ -------
416
+ * The ``RECURSIVE`` clause indicates that the specified folder
417
+ is deleted recursively.
418
+
419
+ Example
420
+ -------
421
+ The following command recursively deletes a folder from a Stage
422
+ attached to a deployment named **wsg1**::
423
+
424
+ DROP STAGE FOLDER '/data/' IN 'wsg1' RECURSIVE;
425
+
426
+ See Also
427
+ --------
428
+ * ``DROP STAGE FILE``
429
+
430
+ """ # noqa: E501
431
+
432
+ def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
433
+ wg = get_deployment(params)
434
+ if params['recursive']:
435
+ wg.stage.removedirs(params['stage_path'])
436
+ else:
437
+ wg.stage.rmdir(params['stage_path'])
438
+ return None
439
+
440
+
441
+ DropStageFolderHandler.register(overwrite=True)
442
+
443
+
444
+ class CreateStageFolderHandler(SQLHandler):
445
+ """
446
+ CREATE STAGE FOLDER stage_path
447
+ [ in ]
448
+ [ overwrite ];
449
+
450
+ # Deployment
451
+ in = { in_group | in_deployment }
452
+ in_group = IN GROUP { deployment_id | deployment_name }
453
+ in_deployment = IN { deployment_id | deployment_name }
454
+
455
+ # ID of deployment
456
+ deployment_id = ID '<deployment-id>'
457
+
458
+ # Name of deployment
459
+ deployment_name = '<deployment-name>'
460
+
461
+ # Path to stage folder
462
+ stage_path = '<stage-path>'
463
+
464
+ # Should an existing folder be overwritten?
465
+ overwrite = OVERWRITE
466
+
467
+ Description
468
+ -----------
469
+ Creates a new folder at the specified path in a Stage.
470
+
471
+ Arguments
472
+ ---------
473
+ * ``<stage-path>``: The path in a Stage where the folder
474
+ is created. The path must end with a trailing slash (/).
475
+ * ``<deployment-id>``: The ID of the deployment in which
476
+ the Stage is attached.
477
+ * ``<deployment-name>``: The name of the deployment in
478
+ which the Stage is attached.
479
+
480
+ Remarks
481
+ -------
482
+ * If the ``OVERWRITE`` clause is specified, any existing
483
+ folder at the specified path is overwritten.
484
+ * The ``IN`` clause specifies the ID or the name of
485
+ the deployment in which the Stage is attached.
486
+
487
+ Example
488
+ -------
489
+ The following command creates a folder in a Stage attached
490
+ to a deployment named **wsg1**::
491
+
492
+ CREATE STAGE FOLDER `/data/csv/` IN 'wsg1';
493
+
494
+ """
495
+
496
+ def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
497
+ wg = get_deployment(params)
498
+ wg.stage.mkdir(params['stage_path'], overwrite=params['overwrite'])
499
+ return None
500
+
501
+
502
+ CreateStageFolderHandler.register(overwrite=True)