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