singlestoredb 1.10.0__cp38-abi3-win32.whl → 1.11.0__cp38-abi3-win32.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.
Potentially problematic release.
This version of singlestoredb might be problematic. Click here for more details.
- _singlestoredb_accel.pyd +0 -0
- singlestoredb/__init__.py +1 -1
- singlestoredb/fusion/handlers/models.py +250 -0
- singlestoredb/fusion/handlers/utils.py +5 -5
- singlestoredb/management/files.py +89 -26
- singlestoredb/mysql/connection.py +1 -0
- singlestoredb/utils/events.py +16 -0
- {singlestoredb-1.10.0.dist-info → singlestoredb-1.11.0.dist-info}/METADATA +1 -1
- {singlestoredb-1.10.0.dist-info → singlestoredb-1.11.0.dist-info}/RECORD +13 -12
- {singlestoredb-1.10.0.dist-info → singlestoredb-1.11.0.dist-info}/LICENSE +0 -0
- {singlestoredb-1.10.0.dist-info → singlestoredb-1.11.0.dist-info}/WHEEL +0 -0
- {singlestoredb-1.10.0.dist-info → singlestoredb-1.11.0.dist-info}/entry_points.txt +0 -0
- {singlestoredb-1.10.0.dist-info → singlestoredb-1.11.0.dist-info}/top_level.txt +0 -0
_singlestoredb_accel.pyd
CHANGED
|
Binary file
|
singlestoredb/__init__.py
CHANGED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
import os
|
|
3
|
+
from typing import Any
|
|
4
|
+
from typing import Dict
|
|
5
|
+
from typing import Optional
|
|
6
|
+
|
|
7
|
+
from ..handler import SQLHandler
|
|
8
|
+
from ..result import FusionSQLResult
|
|
9
|
+
from .files import ShowFilesHandler
|
|
10
|
+
from .utils import get_file_space
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ShowModelsHandler(ShowFilesHandler):
|
|
14
|
+
"""
|
|
15
|
+
SHOW MODELS
|
|
16
|
+
[ at_path ] [ <like> ]
|
|
17
|
+
[ <order-by> ]
|
|
18
|
+
[ <limit> ] [ recursive ] [ extended ];
|
|
19
|
+
|
|
20
|
+
# File path to list
|
|
21
|
+
at_path = AT '<path>'
|
|
22
|
+
|
|
23
|
+
# Should the listing be recursive?
|
|
24
|
+
recursive = RECURSIVE
|
|
25
|
+
|
|
26
|
+
# Should extended attributes be shown?
|
|
27
|
+
extended = EXTENDED
|
|
28
|
+
|
|
29
|
+
Description
|
|
30
|
+
-----------
|
|
31
|
+
Displays the list of models in models space.
|
|
32
|
+
|
|
33
|
+
Arguments
|
|
34
|
+
---------
|
|
35
|
+
* ``<path>``: A path in the models space.
|
|
36
|
+
* ``<pattern>``: A pattern similar to SQL LIKE clause.
|
|
37
|
+
Uses ``%`` as the wildcard character.
|
|
38
|
+
|
|
39
|
+
Remarks
|
|
40
|
+
-------
|
|
41
|
+
* Use the ``LIKE`` clause to specify a pattern and return only the
|
|
42
|
+
files that match the specified pattern.
|
|
43
|
+
* The ``LIMIT`` clause limits the number of results to the
|
|
44
|
+
specified number.
|
|
45
|
+
* Use the ``ORDER BY`` clause to sort the results by the specified
|
|
46
|
+
key. By default, the results are sorted in the ascending order.
|
|
47
|
+
* The ``AT PATH`` clause specifies the path in the models
|
|
48
|
+
space to list the files from.
|
|
49
|
+
* To return more information about the files, use the ``EXTENDED``
|
|
50
|
+
clause.
|
|
51
|
+
|
|
52
|
+
Examples
|
|
53
|
+
--------
|
|
54
|
+
The following command lists the models::
|
|
55
|
+
|
|
56
|
+
SHOW MODELS;
|
|
57
|
+
|
|
58
|
+
The following command lists the models with additional information::
|
|
59
|
+
|
|
60
|
+
SHOW MODELS EXTENDED;
|
|
61
|
+
|
|
62
|
+
See Also
|
|
63
|
+
--------
|
|
64
|
+
* ``UPLOAD MODEL model_name FROM path``
|
|
65
|
+
* ``DOWNLOAD MODEL model_name``
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
""" # noqa: E501
|
|
69
|
+
|
|
70
|
+
def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
|
|
71
|
+
params['file_location'] = 'MODELS'
|
|
72
|
+
|
|
73
|
+
return super().run(params)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
ShowModelsHandler.register(overwrite=True)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class UploadModelHandler(SQLHandler):
|
|
80
|
+
"""
|
|
81
|
+
UPLOAD MODEL model_name
|
|
82
|
+
FROM local_path [ overwrite ];
|
|
83
|
+
|
|
84
|
+
# Model Name
|
|
85
|
+
model_name = '<model-name>'
|
|
86
|
+
|
|
87
|
+
# Path to local file or directory
|
|
88
|
+
local_path = '<local-path>'
|
|
89
|
+
|
|
90
|
+
# Should an existing file be overwritten?
|
|
91
|
+
overwrite = OVERWRITE
|
|
92
|
+
|
|
93
|
+
Description
|
|
94
|
+
-----------
|
|
95
|
+
Uploads a file or folder to models space.
|
|
96
|
+
|
|
97
|
+
Arguments
|
|
98
|
+
---------
|
|
99
|
+
* ``<model-name>``: Model name.
|
|
100
|
+
* ``<local-path>``: The path to the file or folder to upload in the local
|
|
101
|
+
directory.
|
|
102
|
+
|
|
103
|
+
Remarks
|
|
104
|
+
-------
|
|
105
|
+
* If the ``OVERWRITE`` clause is specified, any existing file at the
|
|
106
|
+
specified path in the models space is overwritten.
|
|
107
|
+
|
|
108
|
+
Examples
|
|
109
|
+
--------
|
|
110
|
+
The following command uploads a file to models space and overwrite any
|
|
111
|
+
existing files at the specified path::
|
|
112
|
+
|
|
113
|
+
UPLOAD MODEL model_name
|
|
114
|
+
FROM 'llama3/' OVERWRITE;
|
|
115
|
+
|
|
116
|
+
See Also
|
|
117
|
+
--------
|
|
118
|
+
* ``DOWNLOAD MODEL model_name``
|
|
119
|
+
|
|
120
|
+
""" # noqa: E501
|
|
121
|
+
|
|
122
|
+
def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
|
|
123
|
+
params['file_location'] = 'MODELS'
|
|
124
|
+
|
|
125
|
+
model_name = params['model_name']
|
|
126
|
+
local_path = params['local_path']
|
|
127
|
+
|
|
128
|
+
file_space = get_file_space(params)
|
|
129
|
+
|
|
130
|
+
if os.path.isdir(local_path):
|
|
131
|
+
file_space.upload_folder(
|
|
132
|
+
local_path=local_path,
|
|
133
|
+
path=os.path.join(model_name, ''),
|
|
134
|
+
overwrite=params['overwrite'],
|
|
135
|
+
)
|
|
136
|
+
else:
|
|
137
|
+
file_space.upload_file(
|
|
138
|
+
local_path=local_path,
|
|
139
|
+
path=os.path.join(model_name, local_path),
|
|
140
|
+
overwrite=params['overwrite'],
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
return None
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
UploadModelHandler.register(overwrite=True)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
class DownloadModelHandler(SQLHandler):
|
|
150
|
+
"""
|
|
151
|
+
DOWNLOAD MODEL model_name
|
|
152
|
+
[ local_path ]
|
|
153
|
+
[ overwrite ];
|
|
154
|
+
|
|
155
|
+
# Model Name
|
|
156
|
+
model_name = '<model-name>'
|
|
157
|
+
|
|
158
|
+
# Path to local directory
|
|
159
|
+
local_path = TO '<local-path>'
|
|
160
|
+
|
|
161
|
+
# Should an existing directory be overwritten?
|
|
162
|
+
overwrite = OVERWRITE
|
|
163
|
+
|
|
164
|
+
Description
|
|
165
|
+
-----------
|
|
166
|
+
Download a model from models space.
|
|
167
|
+
|
|
168
|
+
Arguments
|
|
169
|
+
---------
|
|
170
|
+
* ``<model-name>``: Model name to download in models space.
|
|
171
|
+
* ``<local-path>``: Specifies the path in the local directory
|
|
172
|
+
where the model is downloaded.
|
|
173
|
+
|
|
174
|
+
Remarks
|
|
175
|
+
-------
|
|
176
|
+
* If the ``OVERWRITE`` clause is specified, any existing file or folder at
|
|
177
|
+
the download location is overwritten.
|
|
178
|
+
* If ``<local-path>`` is not specified, the model is downloaded to the current location.
|
|
179
|
+
|
|
180
|
+
Examples
|
|
181
|
+
--------
|
|
182
|
+
The following command displays the contents of the file on the
|
|
183
|
+
standard output::
|
|
184
|
+
|
|
185
|
+
DOWNLOAD MODEL llama3;
|
|
186
|
+
|
|
187
|
+
The following command downloads a model to a specific location and
|
|
188
|
+
overwrites any existing models folder with the name ``local_llama3`` on the local storage::
|
|
189
|
+
|
|
190
|
+
DOWNLOAD MODEL llama3
|
|
191
|
+
TO 'local_llama3' OVERWRITE;
|
|
192
|
+
|
|
193
|
+
See Also
|
|
194
|
+
--------
|
|
195
|
+
* ``UPLOAD MODEL model_name FROM local_path``
|
|
196
|
+
|
|
197
|
+
""" # noqa: E501
|
|
198
|
+
|
|
199
|
+
def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
|
|
200
|
+
params['file_location'] = 'MODELS'
|
|
201
|
+
|
|
202
|
+
file_space = get_file_space(params)
|
|
203
|
+
|
|
204
|
+
model_name = params['model_name']
|
|
205
|
+
file_space.download_folder(
|
|
206
|
+
path=os.path.join(model_name, ''),
|
|
207
|
+
local_path=params['local_path'] or model_name,
|
|
208
|
+
overwrite=params['overwrite'],
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
return None
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
DownloadModelHandler.register(overwrite=True)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
class DropModelsHandler(SQLHandler):
|
|
218
|
+
"""
|
|
219
|
+
DROP MODEL model_name;
|
|
220
|
+
|
|
221
|
+
# Model Name
|
|
222
|
+
model_name = '<model-name>'
|
|
223
|
+
|
|
224
|
+
Description
|
|
225
|
+
-----------
|
|
226
|
+
Deletes a model from models space.
|
|
227
|
+
|
|
228
|
+
Arguments
|
|
229
|
+
---------
|
|
230
|
+
* ``<model-name>``: Model name to delete in models space.
|
|
231
|
+
|
|
232
|
+
Example
|
|
233
|
+
--------
|
|
234
|
+
The following commands deletes a model from a model space::
|
|
235
|
+
|
|
236
|
+
DROP MODEL llama3;
|
|
237
|
+
|
|
238
|
+
""" # noqa: E501
|
|
239
|
+
|
|
240
|
+
def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
|
|
241
|
+
params['file_location'] = 'MODELS'
|
|
242
|
+
path = os.path.join(params['model_name'], '')
|
|
243
|
+
|
|
244
|
+
file_space = get_file_space(params)
|
|
245
|
+
file_space.removedirs(path=path)
|
|
246
|
+
|
|
247
|
+
return None
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
DropModelsHandler.register(overwrite=True)
|
|
@@ -11,6 +11,7 @@ from ...management import manage_workspaces
|
|
|
11
11
|
from ...management.files import FilesManager
|
|
12
12
|
from ...management.files import FileSpace
|
|
13
13
|
from ...management.files import manage_files
|
|
14
|
+
from ...management.files import MODELS_SPACE
|
|
14
15
|
from ...management.files import PERSONAL_SPACE
|
|
15
16
|
from ...management.files import SHARED_SPACE
|
|
16
17
|
from ...management.workspace import StarterWorkspace
|
|
@@ -296,15 +297,14 @@ def get_file_space(params: Dict[str, Any]) -> FileSpace:
|
|
|
296
297
|
file_location = params.get('file_location')
|
|
297
298
|
if file_location:
|
|
298
299
|
file_location_lower_case = file_location.lower()
|
|
299
|
-
if (
|
|
300
|
-
file_location_lower_case != PERSONAL_SPACE and
|
|
301
|
-
file_location_lower_case != SHARED_SPACE
|
|
302
|
-
):
|
|
303
|
-
raise ValueError(f'invalid file location: {file_location}')
|
|
304
300
|
|
|
305
301
|
if file_location_lower_case == PERSONAL_SPACE:
|
|
306
302
|
return manager.personal_space
|
|
307
303
|
elif file_location_lower_case == SHARED_SPACE:
|
|
308
304
|
return manager.shared_space
|
|
305
|
+
elif file_location_lower_case == MODELS_SPACE:
|
|
306
|
+
return manager.models_space
|
|
307
|
+
else:
|
|
308
|
+
raise ValueError(f'invalid file location: {file_location}')
|
|
309
309
|
|
|
310
310
|
raise KeyError('no file space was specified')
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import datetime
|
|
6
|
+
import glob
|
|
6
7
|
import io
|
|
7
8
|
import os
|
|
8
9
|
import re
|
|
@@ -23,9 +24,9 @@ from .utils import PathLike
|
|
|
23
24
|
from .utils import to_datetime
|
|
24
25
|
from .utils import vars_to_str
|
|
25
26
|
|
|
26
|
-
|
|
27
27
|
PERSONAL_SPACE = 'personal'
|
|
28
28
|
SHARED_SPACE = 'shared'
|
|
29
|
+
MODELS_SPACE = 'models'
|
|
29
30
|
|
|
30
31
|
|
|
31
32
|
class FilesObject(object):
|
|
@@ -35,8 +36,8 @@ class FilesObject(object):
|
|
|
35
36
|
It can belong to either a workspace stage or personal/shared space.
|
|
36
37
|
|
|
37
38
|
This object is not instantiated directly. It is used in the results
|
|
38
|
-
of various operations in ``WorkspaceGroup.stage``, ``FilesManager.personal_space
|
|
39
|
-
and ``FilesManager.
|
|
39
|
+
of various operations in ``WorkspaceGroup.stage``, ``FilesManager.personal_space``,
|
|
40
|
+
``FilesManager.shared_space`` and ``FilesManager.models_space`` methods.
|
|
40
41
|
|
|
41
42
|
"""
|
|
42
43
|
|
|
@@ -513,6 +514,11 @@ class FilesManager(Manager):
|
|
|
513
514
|
"""Return the shared file space."""
|
|
514
515
|
return FileSpace(SHARED_SPACE, self)
|
|
515
516
|
|
|
517
|
+
@property
|
|
518
|
+
def models_space(self) -> FileSpace:
|
|
519
|
+
"""Return the models file space."""
|
|
520
|
+
return FileSpace(MODELS_SPACE, self)
|
|
521
|
+
|
|
516
522
|
|
|
517
523
|
def manage_files(
|
|
518
524
|
access_token: Optional[str] = None,
|
|
@@ -551,7 +557,8 @@ class FileSpace(FileLocation):
|
|
|
551
557
|
FileSpace manager.
|
|
552
558
|
|
|
553
559
|
This object is not instantiated directly.
|
|
554
|
-
It is returned by ``FilesManager.personal_space
|
|
560
|
+
It is returned by ``FilesManager.personal_space``, ``FilesManager.shared_space``
|
|
561
|
+
or ``FileManger.models_space``.
|
|
555
562
|
|
|
556
563
|
"""
|
|
557
564
|
|
|
@@ -687,10 +694,36 @@ class FileSpace(FileLocation):
|
|
|
687
694
|
ignore all '*.pyc' files in the directory tree
|
|
688
695
|
|
|
689
696
|
"""
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
697
|
+
if not os.path.isdir(local_path):
|
|
698
|
+
raise NotADirectoryError(f'local path is not a directory: {local_path}')
|
|
699
|
+
|
|
700
|
+
if not path:
|
|
701
|
+
path = local_path
|
|
702
|
+
|
|
703
|
+
ignore_files = set()
|
|
704
|
+
if ignore:
|
|
705
|
+
if isinstance(ignore, list):
|
|
706
|
+
for item in ignore:
|
|
707
|
+
ignore_files.update(glob.glob(str(item), recursive=recursive))
|
|
708
|
+
else:
|
|
709
|
+
ignore_files.update(glob.glob(str(ignore), recursive=recursive))
|
|
710
|
+
|
|
711
|
+
for dir_path, _, files in os.walk(str(local_path)):
|
|
712
|
+
for fname in files:
|
|
713
|
+
if ignore_files and fname in ignore_files:
|
|
714
|
+
continue
|
|
715
|
+
|
|
716
|
+
local_file_path = os.path.join(dir_path, fname)
|
|
717
|
+
remote_path = os.path.join(
|
|
718
|
+
path,
|
|
719
|
+
local_file_path.lstrip(str(local_path)),
|
|
720
|
+
)
|
|
721
|
+
self.upload_file(
|
|
722
|
+
local_path=local_file_path,
|
|
723
|
+
path=remote_path,
|
|
724
|
+
overwrite=overwrite,
|
|
725
|
+
)
|
|
726
|
+
return self.info(path)
|
|
694
727
|
|
|
695
728
|
def _upload(
|
|
696
729
|
self,
|
|
@@ -875,15 +908,30 @@ class FileSpace(FileLocation):
|
|
|
875
908
|
return False
|
|
876
909
|
raise
|
|
877
910
|
|
|
878
|
-
def
|
|
911
|
+
def _listdir(self, path: PathLike, *, recursive: bool = False) -> List[str]:
|
|
879
912
|
"""
|
|
880
|
-
Return the names of files in
|
|
913
|
+
Return the names of files in a directory.
|
|
914
|
+
|
|
881
915
|
Parameters
|
|
882
916
|
----------
|
|
917
|
+
path : Path or str
|
|
918
|
+
Path to the folder
|
|
919
|
+
recursive : bool, optional
|
|
920
|
+
Should folders be listed recursively?
|
|
921
|
+
|
|
883
922
|
"""
|
|
884
923
|
res = self._manager._get(
|
|
885
|
-
f'files/fs/{self._location}',
|
|
924
|
+
f'files/fs/{self._location}/{path}',
|
|
886
925
|
).json()
|
|
926
|
+
|
|
927
|
+
if recursive:
|
|
928
|
+
out = []
|
|
929
|
+
for item in res['content'] or []:
|
|
930
|
+
out.append(item['path'])
|
|
931
|
+
if item['type'] == 'directory':
|
|
932
|
+
out.extend(self._listdir(item['path'], recursive=recursive))
|
|
933
|
+
return out
|
|
934
|
+
|
|
887
935
|
return [x['path'] for x in res['content'] or []]
|
|
888
936
|
|
|
889
937
|
def listdir(
|
|
@@ -905,13 +953,17 @@ class FileSpace(FileLocation):
|
|
|
905
953
|
List[str]
|
|
906
954
|
|
|
907
955
|
"""
|
|
908
|
-
|
|
909
|
-
|
|
956
|
+
path = re.sub(r'^(\./|/)+', r'', str(path))
|
|
957
|
+
path = re.sub(r'/+$', r'', path) + '/'
|
|
910
958
|
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
)
|
|
959
|
+
if not self.is_dir(path):
|
|
960
|
+
raise NotADirectoryError(f'path is not a directory: {path}')
|
|
961
|
+
|
|
962
|
+
out = self._listdir(path, recursive=recursive)
|
|
963
|
+
if path != '/':
|
|
964
|
+
path_n = len(path.split('/')) - 1
|
|
965
|
+
out = ['/'.join(x.split('/')[path_n:]) for x in out]
|
|
966
|
+
return out
|
|
915
967
|
|
|
916
968
|
def download_file(
|
|
917
969
|
self,
|
|
@@ -973,17 +1025,28 @@ class FileSpace(FileLocation):
|
|
|
973
1025
|
Parameters
|
|
974
1026
|
----------
|
|
975
1027
|
path : Path or str
|
|
976
|
-
|
|
1028
|
+
Directory path
|
|
977
1029
|
local_path : Path or str
|
|
978
1030
|
Path to local directory target location
|
|
979
1031
|
overwrite : bool, optional
|
|
980
1032
|
Should an existing directory / files be overwritten if they exist?
|
|
981
1033
|
|
|
982
1034
|
"""
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
1035
|
+
|
|
1036
|
+
if local_path is not None and not overwrite and os.path.exists(local_path):
|
|
1037
|
+
raise OSError('target path already exists; use overwrite=True to replace')
|
|
1038
|
+
|
|
1039
|
+
if not self.is_dir(path):
|
|
1040
|
+
raise NotADirectoryError(f'path is not a directory: {path}')
|
|
1041
|
+
|
|
1042
|
+
files = self.listdir(path, recursive=True)
|
|
1043
|
+
for f in files:
|
|
1044
|
+
remote_path = os.path.join(path, f)
|
|
1045
|
+
if self.is_dir(remote_path):
|
|
1046
|
+
continue
|
|
1047
|
+
target = os.path.normpath(os.path.join(local_path, f))
|
|
1048
|
+
os.makedirs(os.path.dirname(target), exist_ok=True)
|
|
1049
|
+
self.download_file(remote_path, target, overwrite=overwrite)
|
|
987
1050
|
|
|
988
1051
|
def remove(self, path: PathLike) -> None:
|
|
989
1052
|
"""
|
|
@@ -1010,10 +1073,10 @@ class FileSpace(FileLocation):
|
|
|
1010
1073
|
Path to the file location
|
|
1011
1074
|
|
|
1012
1075
|
"""
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
)
|
|
1076
|
+
if not self.is_dir(path):
|
|
1077
|
+
raise NotADirectoryError('path is not a directory')
|
|
1078
|
+
|
|
1079
|
+
self._manager._delete(f'files/fs/{self._location}/{path}')
|
|
1017
1080
|
|
|
1018
1081
|
def rmdir(self, path: PathLike) -> None:
|
|
1019
1082
|
"""
|
singlestoredb/utils/events.py
CHANGED
|
@@ -27,6 +27,22 @@ def subscribe(func: Callable[[Dict[str, Any]], None]) -> None:
|
|
|
27
27
|
_subscribers.add(func)
|
|
28
28
|
|
|
29
29
|
|
|
30
|
+
def unsubscribe(func: Callable[[Dict[str, Any]], None]) -> None:
|
|
31
|
+
"""
|
|
32
|
+
Unsubscribe from SingleStore portal events.
|
|
33
|
+
|
|
34
|
+
Parameters
|
|
35
|
+
----------
|
|
36
|
+
func : Callable
|
|
37
|
+
The function to call when an event is received
|
|
38
|
+
|
|
39
|
+
"""
|
|
40
|
+
try:
|
|
41
|
+
_subscribers.remove(func)
|
|
42
|
+
except KeyError:
|
|
43
|
+
pass
|
|
44
|
+
|
|
45
|
+
|
|
30
46
|
def _event_handler(stream: Any, ident: Any, msg: Dict[str, Any]) -> None:
|
|
31
47
|
"""Handle request on the control stream."""
|
|
32
48
|
if not _subscribers or not isinstance(msg, dict):
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
_singlestoredb_accel.pyd,sha256=
|
|
2
|
-
singlestoredb/__init__.py,sha256=
|
|
1
|
+
_singlestoredb_accel.pyd,sha256=q-aACKhILot_NGYzmm6WYE3LH_OiU9RANrIBd6YFfO4,59904
|
|
2
|
+
singlestoredb/__init__.py,sha256=Hn7bg_Mioi5UgJH2ZaXgIbOsFdb9Xa1wqDeJvmNEYCU,1712
|
|
3
3
|
singlestoredb/auth.py,sha256=RmYiH0Wlc2RXc4pTlRMysxtBI445ggCIwojWKC_eDLE,7844
|
|
4
4
|
singlestoredb/config.py,sha256=n6ludREIoiZDEzSGmv0xouv_zHFnznKNKxSvjzgQ3Lk,12876
|
|
5
5
|
singlestoredb/connection.py,sha256=I3A0VkA_E6pfUNCzIvj0KTb5zn6-htBAPsu6OVXO9-I,47150
|
|
@@ -39,8 +39,9 @@ singlestoredb/fusion/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
|
|
|
39
39
|
singlestoredb/fusion/handlers/export.py,sha256=Vf0idiFTluEhDpt7ozWSdYwQcOeXz2-J6-91ax8F834,7189
|
|
40
40
|
singlestoredb/fusion/handlers/files.py,sha256=sXO5OFS5QsmwNOnMY3G5xpMPqh4_WkssW3dOB6uI4VQ,19669
|
|
41
41
|
singlestoredb/fusion/handlers/job.py,sha256=3enfxHwERH7T4u0FEwOPN0IL0GtepaCYgEsisiy3Df4,21753
|
|
42
|
+
singlestoredb/fusion/handlers/models.py,sha256=XWaPJQc3GQIOAcjNcxBSGUBJ3xu2qkzQ4ILa40TFQmY,6486
|
|
42
43
|
singlestoredb/fusion/handlers/stage.py,sha256=PP-SSP204lwpmnycSXXSmFPzoN535JVuwglDCbaQ8Lw,14789
|
|
43
|
-
singlestoredb/fusion/handlers/utils.py,sha256=
|
|
44
|
+
singlestoredb/fusion/handlers/utils.py,sha256=qwKGKi7hVlxoROZnAdOgqN3Fw4EHxMynfCdUWKvjFvo,10374
|
|
44
45
|
singlestoredb/fusion/handlers/workspace.py,sha256=NxoEY5xd5lCQmXiim4nhAYCL0agHo1H_rGPpqa31hiw,28397
|
|
45
46
|
singlestoredb/http/__init__.py,sha256=4cEDvLloGc3LSpU-PnIwacyu0n5oIIIE6xk2SPyWD_w,939
|
|
46
47
|
singlestoredb/http/connection.py,sha256=LFUeWx7maS7xhQLqEX3pgvIGoosqyJTovtWwJ1DyDSA,40721
|
|
@@ -51,7 +52,7 @@ singlestoredb/management/__init__.py,sha256=A66ZnFyX--PsAZ2tvtYUfIUBvVGDBFQsnVc6
|
|
|
51
52
|
singlestoredb/management/billing_usage.py,sha256=0UHFSPCrN0nyeGFFM-HXS3NP8pYmYo2BCCahDEPXvzg,3883
|
|
52
53
|
singlestoredb/management/cluster.py,sha256=auBzNYIXvnI6rq3DNpPgJhwWoT6JsyZRikjpON23Pxg,14867
|
|
53
54
|
singlestoredb/management/export.py,sha256=Ksrb8_sxeqva4NElaGxdPQUWQga2yOEkf0wnw5M-iGc,4302
|
|
54
|
-
singlestoredb/management/files.py,sha256=
|
|
55
|
+
singlestoredb/management/files.py,sha256=ly9Hwe0kVWqws8dvjuoIH0fURi8TadTTZPIFKTxnuWI,31677
|
|
55
56
|
singlestoredb/management/job.py,sha256=Npfe1JLYJlggGBrXLniPKwKUKF1i3alvSY1SFtvauSs,25498
|
|
56
57
|
singlestoredb/management/manager.py,sha256=8zU0d7NG83PYMhoAs2JriTqbqh-R2tLX7VZoeZtcogY,9148
|
|
57
58
|
singlestoredb/management/organization.py,sha256=JBsNC4R3boUKdYvyCZyfGoVMC1mD6SPuMI1UssBVoOM,5611
|
|
@@ -61,7 +62,7 @@ singlestoredb/management/workspace.py,sha256=erII_7SA4vdJkTPBKB6aa88mYujmXTYdNeQ
|
|
|
61
62
|
singlestoredb/mysql/__init__.py,sha256=CbpwzNUJPAmKPpIobC0-ugBta_RgHCMq7X7N75QLReY,4669
|
|
62
63
|
singlestoredb/mysql/_auth.py,sha256=YaqqyvAHmeraBv3BM207rNveUVPM-mPnW20ts_ynVWg,8341
|
|
63
64
|
singlestoredb/mysql/charset.py,sha256=mnCdMpvdub1S2mm2PSk2j5JddgsWRjsVLtGx-y9TskE,10724
|
|
64
|
-
singlestoredb/mysql/connection.py,sha256=
|
|
65
|
+
singlestoredb/mysql/connection.py,sha256=lzwf31pFioWCUaMBB_TahB9VsemKMS0l3DrUqO3ZCJE,74764
|
|
65
66
|
singlestoredb/mysql/converters.py,sha256=vebFFm6IrC0WgY-5Eh-esaPizY5cq3vDOUlEKGaYM-U,7771
|
|
66
67
|
singlestoredb/mysql/cursors.py,sha256=pkrP-1t8IhBJRnYpdM7Rdm-332nOq1RYTDJ_yg_q5HI,27682
|
|
67
68
|
singlestoredb/mysql/err.py,sha256=aDbmfq08gWVmfgIea735wSeiFdvYbB5wusgd3qTVq1s,2480
|
|
@@ -131,15 +132,15 @@ singlestoredb/utils/config.py,sha256=WVQ567ZzqzlTGueQH5fEpm5tPZuz8y7qvpEQUB-vPjk
|
|
|
131
132
|
singlestoredb/utils/convert_rows.py,sha256=gkZeZazeJvimCYEQ1FdAC-AmMDwmFGCuP6mi653bpns,1885
|
|
132
133
|
singlestoredb/utils/debug.py,sha256=y7dnJeJGt3U_BWXz9pLt1qNQREpPtumYX_sk1DiqG6Y,362
|
|
133
134
|
singlestoredb/utils/dtypes.py,sha256=_P2fTX2Fgv9Bcl-2L6KivhWgLzyu91sDamxVnmG92Mw,6103
|
|
134
|
-
singlestoredb/utils/events.py,sha256=
|
|
135
|
+
singlestoredb/utils/events.py,sha256=Wpp4Z5kw6f7axGAerMirEhgjcAArboQtMc4aqXzfKIc,1519
|
|
135
136
|
singlestoredb/utils/mogrify.py,sha256=gCcn99-vgsGVjTUV7RHJ6hH4vCNrsGB_Xo4z8kiSPDQ,4201
|
|
136
137
|
singlestoredb/utils/results.py,sha256=wR70LhCqlobniZf52r67zYLBOKjWHQm68NAskdRQND8,15862
|
|
137
138
|
singlestoredb/utils/xdict.py,sha256=-wi1lSPTnY99fhVMBhPKJ8cCsQhNG4GMUfkEBDKYgCw,13321
|
|
138
139
|
sqlx/__init__.py,sha256=4Sdn8HN-Hf8v0_wCt60DCckCg8BvgM3-9r4YVfZycRE,89
|
|
139
140
|
sqlx/magic.py,sha256=6VBlotgjautjev599tHaTYOfcfOA9m6gV_-P1_Qc4lI,3622
|
|
140
|
-
singlestoredb-1.
|
|
141
|
-
singlestoredb-1.
|
|
142
|
-
singlestoredb-1.
|
|
143
|
-
singlestoredb-1.
|
|
144
|
-
singlestoredb-1.
|
|
145
|
-
singlestoredb-1.
|
|
141
|
+
singlestoredb-1.11.0.dist-info/LICENSE,sha256=Bojenzui8aPNjlF3w4ojguDP7sTf8vFV_9Gc2UAG1sg,11542
|
|
142
|
+
singlestoredb-1.11.0.dist-info/METADATA,sha256=8tDiZ6TwCEXStAL2L0YaT2LGv5f3B2XrT-KU6K5XS4A,5711
|
|
143
|
+
singlestoredb-1.11.0.dist-info/WHEEL,sha256=c4k7z5HB0t-y0nBCv6KyJ6KCjn8SEGPddD0lhaPtU3E,96
|
|
144
|
+
singlestoredb-1.11.0.dist-info/entry_points.txt,sha256=bSLaTWB5zGjpVYPAaI46MkkDup0su-eb3uAhCNYuRV0,48
|
|
145
|
+
singlestoredb-1.11.0.dist-info/top_level.txt,sha256=lA65Vf4qAMfg_s1oG3LEO90h4t1Z-SPDbRqkevI3bSY,40
|
|
146
|
+
singlestoredb-1.11.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|