singlestoredb 1.10.0__cp38-abi3-win_amd64.whl → 1.11.0__cp38-abi3-win_amd64.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 CHANGED
Binary file
singlestoredb/__init__.py CHANGED
@@ -13,7 +13,7 @@ Examples
13
13
 
14
14
  """
15
15
 
16
- __version__ = '1.10.0'
16
+ __version__ = '1.11.0'
17
17
 
18
18
  from typing import Any
19
19
 
@@ -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.shared_space`` methods.
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`` or ``FilesManager.shared_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
- raise ManagementError(
691
- msg='Operation not supported: directories are currently not allowed '
692
- 'in Files API',
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 _list_root_dir(self) -> List[str]:
911
+ def _listdir(self, path: PathLike, *, recursive: bool = False) -> List[str]:
879
912
  """
880
- Return the names of files in the root directory.
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
- if path == '' or path == '/':
909
- return self._list_root_dir()
956
+ path = re.sub(r'^(\./|/)+', r'', str(path))
957
+ path = re.sub(r'/+$', r'', path) + '/'
910
958
 
911
- raise ManagementError(
912
- msg='Operation not supported: directories are currently not allowed '
913
- 'in Files API',
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
- Path to the file
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
- raise ManagementError(
984
- msg='Operation not supported: directories are currently not allowed '
985
- 'in Files API',
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
- raise ManagementError(
1014
- msg='Operation not supported: directories are currently not allowed '
1015
- 'in Files API',
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
  """
@@ -729,6 +729,7 @@ class Connection(BaseConnection):
729
729
  return
730
730
  if self._closed:
731
731
  raise err.Error('Already closed')
732
+ events.unsubscribe(self._handle_event)
732
733
  self._closed = True
733
734
  if self._sock is None:
734
735
  return
@@ -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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: singlestoredb
3
- Version: 1.10.0
3
+ Version: 1.11.0
4
4
  Summary: Interface to the SingleStoreDB database and workspace management APIs
5
5
  Home-page: https://github.com/singlestore-labs/singlestoredb-python
6
6
  Author: SingleStore
@@ -1,5 +1,5 @@
1
- _singlestoredb_accel.pyd,sha256=cTNWxsBsHk77ryPm-wj9wFEi3q0MJgQ5JFOGo8KsfdM,59392
2
- singlestoredb/__init__.py,sha256=tic3Nv74hrvLzFMKed_-mr9zHudZrMogLBcwzs988lk,1712
1
+ _singlestoredb_accel.pyd,sha256=YuyyOkJKfNWvP8UqILRk6CXXaqsNBUh9F8Q3b5OKZlc,59392
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=OffWWj8FkZgqr5ijY3WQ6cwaAB7a7Z5cYxLeOAfU_JE,10356
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=9uVWe6yc48B9J1GHcMxQ4GEHOnIVlFzEXuKhWFuuZH0,29256
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=mmTF9X7cPbmTS7yPHHbkjwQGpOPSbpDgZ3MNd2MyXkA,74716
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=rC9cHAetua_E1f-EiFkFM-gJzQSQIH5Uk-4sspC3KjI,1188
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.10.0.dist-info/LICENSE,sha256=Bojenzui8aPNjlF3w4ojguDP7sTf8vFV_9Gc2UAG1sg,11542
141
- singlestoredb-1.10.0.dist-info/METADATA,sha256=WMO1XteYPWWD3omXLyDKKoz10HINKtWZ5Hqdo75Z8rQ,5711
142
- singlestoredb-1.10.0.dist-info/WHEEL,sha256=UyMHzmWA0xVqVPKfTiLs2eN3OWWZUl-kQemNbpIqlKo,100
143
- singlestoredb-1.10.0.dist-info/entry_points.txt,sha256=bSLaTWB5zGjpVYPAaI46MkkDup0su-eb3uAhCNYuRV0,48
144
- singlestoredb-1.10.0.dist-info/top_level.txt,sha256=lA65Vf4qAMfg_s1oG3LEO90h4t1Z-SPDbRqkevI3bSY,40
145
- singlestoredb-1.10.0.dist-info/RECORD,,
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=UyMHzmWA0xVqVPKfTiLs2eN3OWWZUl-kQemNbpIqlKo,100
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,,