singlestoredb 1.11.0__cp38-abi3-win32.whl → 1.12.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.

@@ -0,0 +1,267 @@
1
+ #!/usr/bin/env python
2
+ """Utilities for running SingleStoreDB in the free tier."""
3
+ from __future__ import annotations
4
+
5
+ import atexit
6
+ import os
7
+ import platform
8
+ import signal
9
+ import subprocess
10
+ import urllib.parse
11
+ from types import TracebackType
12
+ from typing import Any
13
+ from typing import Dict
14
+ from typing import List
15
+ from typing import Optional
16
+ from typing import Type
17
+
18
+ import requests
19
+
20
+ from .. import connect
21
+ from ..connection import Connection
22
+
23
+ try:
24
+ import pymongo
25
+ has_pymongo = True
26
+ except ImportError:
27
+ has_pymongo = False
28
+
29
+
30
+ class SingleStoreDB:
31
+ """
32
+ Manager for SingleStoreDB server running in Docker.
33
+
34
+ Parameters
35
+ -----------
36
+ global_vars : dict, optional
37
+ Global variables to set in the SingleStoreDB server.
38
+ init_sql : str, optional
39
+ Path to an SQL file to run on startup.
40
+
41
+ """
42
+
43
+ user: str
44
+ password: str
45
+ kai_enabled: bool
46
+ server_port: int
47
+ data_api_port: int
48
+ kai_port: Optional[int]
49
+
50
+ def __init__(self) -> None:
51
+ r = requests.get('https://shell.singlestore.com/api/session')
52
+
53
+ self._cookies = r.cookies.get_dict()
54
+
55
+ if 'userSessionID' in self._cookies:
56
+ self._session_id = self._cookies['userSessionID']
57
+ else:
58
+ self._session_id = ''
59
+
60
+ d = r.json()
61
+
62
+ self._connected = True
63
+ self.kai_enabled = True
64
+ self.kai_port = 27017
65
+ self.server_port = 3333
66
+ self.data_api_port = 443
67
+ self.user = d['user']
68
+ self.password = d['password']
69
+ self._database = d['databaseName']
70
+ self._endpoint = d['endpoint']
71
+ self._workspace_id = d['workspaceID']
72
+
73
+ self._saved_server_urls: Dict[str, Optional[str]] = {}
74
+
75
+ # Make sure container gets cleaned up at exit
76
+ atexit.register(self.stop)
77
+ signal.signal(signal.SIGINT, self.stop)
78
+ signal.signal(signal.SIGTERM, self.stop)
79
+
80
+ self._set_server_urls()
81
+
82
+ def __str__(self) -> str:
83
+ return f"SingleStoreDB('{self.connection_url}')"
84
+
85
+ def __repr__(self) -> str:
86
+ return str(self)
87
+
88
+ def _set_server_urls(self) -> None:
89
+ self._saved_server_urls['DATABASE_URL'] = os.environ.get('DATABASE_URL')
90
+ os.environ['DATABASE_URL'] = self.connection_url
91
+ self._saved_server_urls['SINGLESTOREDB_URL'] = os.environ.get('SINGLESTOREDB_URL')
92
+ os.environ['SINGLESTOREDB_URL'] = self.connection_url
93
+
94
+ def _restore_server_urls(self) -> None:
95
+ try:
96
+ for k, v in self._saved_server_urls.items():
97
+ if v is None:
98
+ del os.environ[k]
99
+ else:
100
+ os.environ[k] = v
101
+ except KeyError:
102
+ pass
103
+
104
+ def logs(self) -> List[str]:
105
+ return []
106
+
107
+ @property
108
+ def connection_url(self) -> str:
109
+ """Connection URL for the SingleStoreDB server."""
110
+ dbname = f'/{self._database}' if self._database else ''
111
+ password = urllib.parse.quote_plus(self.password)
112
+ return f'singlestoredb://{self.user}:{password}@' + \
113
+ f'{self._endpoint}:{self.server_port}{dbname}'
114
+
115
+ @property
116
+ def http_connection_url(self) -> str:
117
+ """HTTP Connection URL for the SingleStoreDB server."""
118
+ dbname = f'/{self._database}' if self._database else ''
119
+ password = urllib.parse.quote_plus(self.password)
120
+ return f'singlestoredb+https://{self.user}:{password}@' + \
121
+ f'{self._endpoint}:{self.data_api_port}{dbname}'
122
+
123
+ def connect(
124
+ self,
125
+ use_data_api: bool = False,
126
+ **kwargs: Any,
127
+ ) -> Connection:
128
+ """
129
+ Connect to the SingleStoreDB server.
130
+
131
+ Parameters
132
+ -----------
133
+ use_data_api : bool, optional
134
+ Use the Data API for the connection.
135
+ **kwargs : Any, optional
136
+ Additional keyword arguments to pass to the connection.
137
+
138
+ Returns
139
+ --------
140
+ Connection : Connection to the SingleStoreDB server.
141
+
142
+ """
143
+ if use_data_api:
144
+ return connect(self.http_connection_url, **kwargs)
145
+ return connect(self.connection_url, **kwargs)
146
+
147
+ @property
148
+ def kai_url(self) -> Optional[str]:
149
+ """Connection URL for the Kai (MongoDB) server."""
150
+ if not self.kai_enabled:
151
+ return None
152
+ password = urllib.parse.quote_plus(self.password)
153
+ endpoint = self._endpoint.replace('shared-dml', 'shared-mongo')
154
+ return f'mongodb://{self.user}^{self._database}:{password}@' + \
155
+ f'{endpoint}:{self.kai_port}/' + \
156
+ '?authMechanism=PLAIN&tls=true&loadBalanced=true' + \
157
+ f'&dbName={self._database}'
158
+
159
+ def connect_kai(self) -> 'pymongo.MongoClient':
160
+ """Connect to the Kai (MongoDB) server."""
161
+ if not self.kai_enabled:
162
+ raise RuntimeError('kai is not enabled')
163
+ if not has_pymongo:
164
+ raise RuntimeError('pymongo is not installed')
165
+ return pymongo.MongoClient(self.kai_url)
166
+
167
+ def open_shell(self) -> None:
168
+ """Open a shell in the SingleStoreDB server."""
169
+ if platform.platform().lower().startswith('macos'):
170
+ subprocess.call(
171
+ ' '.join([
172
+ 'osascript', '-e',
173
+ 'tell app "Terminal" to do script "' +
174
+ ' '.join([
175
+ 'mysql', '-h', self._endpoint,
176
+ '-P', str(self.server_port),
177
+ '-u', self.user,
178
+ f'--password=\'{self.password}\'',
179
+ self._database,
180
+ ]) +
181
+ '"',
182
+ ]), shell=True,
183
+ )
184
+ elif platform.platform().lower().startswith('linux'):
185
+ subprocess.call(
186
+ ' '.join([
187
+ 'gnome-terminal', '--',
188
+ 'mysql', '-h', self._endpoint,
189
+ '-P', str(self.server_port),
190
+ '-u', self.user,
191
+ f'--password="{self.password}"',
192
+ self._database,
193
+ ]), shell=True,
194
+ )
195
+ elif platform.platform().lower().startswith('windows'):
196
+ subprocess.call(
197
+ ' '.join([
198
+ 'start', 'cmd', '/k'
199
+ 'mysql', '-h', self._endpoint,
200
+ '-P', str(self.server_port),
201
+ '-u', self.user,
202
+ f'--password="{self.password}"',
203
+ self._database,
204
+ ]), shell=True,
205
+ )
206
+ else:
207
+ raise RuntimeError('unsupported platform')
208
+
209
+ def open_mongosh(self) -> None:
210
+ """Open a mongosh in the SingleStoreDB server."""
211
+ if not self.kai_enabled:
212
+ raise RuntimeError('kai interface is not enabled')
213
+ if platform.platform().lower().startswith('macos'):
214
+ subprocess.call([
215
+ 'osascript', '-e',
216
+ 'tell app "Terminal" to do script "' +
217
+ ' '.join(['mongosh', str(self.kai_url)]) +
218
+ '"',
219
+ ])
220
+ elif platform.platform().lower().startswith('linux'):
221
+ subprocess.call([
222
+ 'gnome-terminal', '--',
223
+ 'mongosh', str(self.kai_url),
224
+ ])
225
+ elif platform.platform().lower().startswith('windows'):
226
+ subprocess.call([
227
+ 'start', 'cmd', '/k'
228
+ 'mongosh', str(self.kai_url),
229
+ ])
230
+ else:
231
+ raise RuntimeError('unsupported platform')
232
+
233
+ def __enter__(self) -> SingleStoreDB:
234
+ return self
235
+
236
+ def __exit__(
237
+ self,
238
+ exc_type: Optional[Type[BaseException]],
239
+ exc_val: Optional[BaseException],
240
+ exc_tb: Optional[TracebackType],
241
+ ) -> Optional[bool]:
242
+ self.stop()
243
+ return None
244
+
245
+ def stop(self, *args: Any) -> None:
246
+ """Stop the SingleStoreDB server."""
247
+ if self._connected is not None:
248
+ self._restore_server_urls()
249
+ try:
250
+ requests.get(
251
+ 'https://shell.singlestore.com/api/terminate',
252
+ cookies=self._cookies,
253
+ )
254
+ finally:
255
+ self._connected = False
256
+
257
+
258
+ def start() -> SingleStoreDB:
259
+ """
260
+ Manager for SingleStoreDB server running in Docker.
261
+
262
+ Returns
263
+ -------
264
+ SingleStoreDB
265
+
266
+ """
267
+ return SingleStoreDB()
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # type: ignore
3
3
  """SingleStoreDB UDF testing."""
4
+ import dataclasses
4
5
  import datetime
5
6
  import re
6
7
  import unittest
@@ -11,9 +12,11 @@ from typing import TypeVar
11
12
  from typing import Union
12
13
 
13
14
  import numpy as np
15
+ import pydantic
14
16
 
15
17
  from ..functions import dtypes as dt
16
18
  from ..functions import signature as sig
19
+ from ..functions import tvf
17
20
  from ..functions import udf
18
21
 
19
22
 
@@ -28,7 +31,7 @@ def to_sql(x):
28
31
  out = sig.signature_to_sql(sig.get_signature(x))
29
32
  out = re.sub(r'^CREATE EXTERNAL FUNCTION ', r'', out)
30
33
  out = re.sub(r' AS REMOTE SERVICE.+$', r'', out)
31
- return out
34
+ return out.strip()
32
35
 
33
36
 
34
37
  class TestUDF(unittest.TestCase):
@@ -99,27 +102,27 @@ class TestUDF(unittest.TestCase):
99
102
 
100
103
  # Tuple
101
104
  def foo() -> Tuple[int, float, str]: ...
102
- assert to_sql(foo) == '`foo`() RETURNS RECORD(a BIGINT NOT NULL, ' \
103
- 'b DOUBLE NOT NULL, ' \
104
- 'c TEXT NOT NULL) NOT NULL'
105
+ assert to_sql(foo) == '`foo`() RETURNS RECORD(`a` BIGINT NOT NULL, ' \
106
+ '`b` DOUBLE NOT NULL, ' \
107
+ '`c` TEXT NOT NULL) NOT NULL'
105
108
 
106
109
  # Optional tuple
107
110
  def foo() -> Optional[Tuple[int, float, str]]: ...
108
- assert to_sql(foo) == '`foo`() RETURNS RECORD(a BIGINT NOT NULL, ' \
109
- 'b DOUBLE NOT NULL, ' \
110
- 'c TEXT NOT NULL) NULL'
111
+ assert to_sql(foo) == '`foo`() RETURNS RECORD(`a` BIGINT NOT NULL, ' \
112
+ '`b` DOUBLE NOT NULL, ' \
113
+ '`c` TEXT NOT NULL) NULL'
111
114
 
112
115
  # Optional tuple with optional element
113
116
  def foo() -> Optional[Tuple[int, float, Optional[str]]]: ...
114
- assert to_sql(foo) == '`foo`() RETURNS RECORD(a BIGINT NOT NULL, ' \
115
- 'b DOUBLE NOT NULL, ' \
116
- 'c TEXT NULL) NULL'
117
+ assert to_sql(foo) == '`foo`() RETURNS RECORD(`a` BIGINT NOT NULL, ' \
118
+ '`b` DOUBLE NOT NULL, ' \
119
+ '`c` TEXT NULL) NULL'
117
120
 
118
121
  # Optional tuple with optional union element
119
122
  def foo() -> Optional[Tuple[int, Optional[Union[float, int]], str]]: ...
120
- assert to_sql(foo) == '`foo`() RETURNS RECORD(a BIGINT NOT NULL, ' \
121
- 'b DOUBLE NULL, ' \
122
- 'c TEXT NOT NULL) NULL'
123
+ assert to_sql(foo) == '`foo`() RETURNS RECORD(`a` BIGINT NOT NULL, ' \
124
+ '`b` DOUBLE NULL, ' \
125
+ '`c` TEXT NOT NULL) NULL'
123
126
 
124
127
  # Unknown type
125
128
  def foo() -> set: ...
@@ -182,21 +185,21 @@ class TestUDF(unittest.TestCase):
182
185
 
183
186
  # Tuple
184
187
  def foo(x: Tuple[int, float, str]) -> None: ...
185
- assert to_sql(foo) == '`foo`(`x` RECORD(a BIGINT NOT NULL, ' \
186
- 'b DOUBLE NOT NULL, ' \
187
- 'c TEXT NOT NULL) NOT NULL) RETURNS NULL'
188
+ assert to_sql(foo) == '`foo`(`x` RECORD(`a` BIGINT NOT NULL, ' \
189
+ '`b` DOUBLE NOT NULL, ' \
190
+ '`c` TEXT NOT NULL) NOT NULL) RETURNS NULL'
188
191
 
189
192
  # Optional tuple with optional element
190
193
  def foo(x: Optional[Tuple[int, float, Optional[str]]]) -> None: ...
191
- assert to_sql(foo) == '`foo`(`x` RECORD(a BIGINT NOT NULL, ' \
192
- 'b DOUBLE NOT NULL, ' \
193
- 'c TEXT NULL) NULL) RETURNS NULL'
194
+ assert to_sql(foo) == '`foo`(`x` RECORD(`a` BIGINT NOT NULL, ' \
195
+ '`b` DOUBLE NOT NULL, ' \
196
+ '`c` TEXT NULL) NULL) RETURNS NULL'
194
197
 
195
198
  # Optional tuple with optional union element
196
199
  def foo(x: Optional[Tuple[int, Optional[Union[float, int]], str]]) -> None: ...
197
- assert to_sql(foo) == '`foo`(`x` RECORD(a BIGINT NOT NULL, ' \
198
- 'b DOUBLE NULL, ' \
199
- 'c TEXT NOT NULL) NULL) RETURNS NULL'
200
+ assert to_sql(foo) == '`foo`(`x` RECORD(`a` BIGINT NOT NULL, ' \
201
+ '`b` DOUBLE NULL, ' \
202
+ '`c` TEXT NOT NULL) NULL) RETURNS NULL'
200
203
 
201
204
  # Unknown type
202
205
  def foo(x: set) -> None: ...
@@ -391,16 +394,6 @@ class TestUDF(unittest.TestCase):
391
394
  '`y` DOUBLE NOT NULL, ' \
392
395
  '`z` CHAR(30) NULL) RETURNS SMALLINT NOT NULL'
393
396
 
394
- # Override parameter with incorrect type
395
- with self.assertRaises(TypeError):
396
- @udf(args=dict(x=int))
397
- def foo(x: int, y: float, z: str) -> int: ...
398
-
399
- # Override return value with incorrect type
400
- with self.assertRaises(TypeError):
401
- @udf(returns=int)
402
- def foo(x: int, y: float, z: str) -> int: ...
403
-
404
397
  # Change function name
405
398
  @udf(name='hello_world')
406
399
  def foo(x: int) -> int: ...
@@ -412,6 +405,65 @@ class TestUDF(unittest.TestCase):
412
405
  assert to_sql(foo) == '`hello``_``world`(`x` BIGINT NOT NULL) ' \
413
406
  'RETURNS BIGINT NOT NULL'
414
407
 
408
+ @dataclasses.dataclass
409
+ class MyData:
410
+ one: Optional[int]
411
+ two: str
412
+ three: float
413
+
414
+ @udf
415
+ def foo(x: int) -> MyData: ...
416
+ assert to_sql(foo) == '`foo`(`x` BIGINT NOT NULL) ' \
417
+ 'RETURNS RECORD(`one` BIGINT NULL, `two` TEXT NOT NULL, ' \
418
+ '`three` DOUBLE NOT NULL) NOT NULL'
419
+
420
+ @udf(returns=MyData)
421
+ def foo(x: int) -> Tuple[int, int, int]: ...
422
+ assert to_sql(foo) == '`foo`(`x` BIGINT NOT NULL) ' \
423
+ 'RETURNS RECORD(`one` BIGINT NULL, `two` TEXT NOT NULL, ' \
424
+ '`three` DOUBLE NOT NULL) NOT NULL'
425
+
426
+ @tvf
427
+ def foo(x: int) -> MyData: ...
428
+ assert to_sql(foo) == '`foo`(`x` BIGINT NOT NULL) ' \
429
+ 'RETURNS TABLE(`one` BIGINT NULL, `two` TEXT NOT NULL, ' \
430
+ '`three` DOUBLE NOT NULL)'
431
+
432
+ @tvf(returns=MyData)
433
+ def foo(x: int) -> Tuple[int, int, int]: ...
434
+ assert to_sql(foo) == '`foo`(`x` BIGINT NOT NULL) ' \
435
+ 'RETURNS TABLE(`one` BIGINT NULL, `two` TEXT NOT NULL, ' \
436
+ '`three` DOUBLE NOT NULL)'
437
+
438
+ class MyData(pydantic.BaseModel):
439
+ one: Optional[int]
440
+ two: str
441
+ three: float
442
+
443
+ @udf
444
+ def foo(x: int) -> MyData: ...
445
+ assert to_sql(foo) == '`foo`(`x` BIGINT NOT NULL) ' \
446
+ 'RETURNS RECORD(`one` BIGINT NULL, `two` TEXT NOT NULL, ' \
447
+ '`three` DOUBLE NOT NULL) NOT NULL'
448
+
449
+ @udf(returns=MyData)
450
+ def foo(x: int) -> Tuple[int, int, int]: ...
451
+ assert to_sql(foo) == '`foo`(`x` BIGINT NOT NULL) ' \
452
+ 'RETURNS RECORD(`one` BIGINT NULL, `two` TEXT NOT NULL, ' \
453
+ '`three` DOUBLE NOT NULL) NOT NULL'
454
+
455
+ @tvf
456
+ def foo(x: int) -> MyData: ...
457
+ assert to_sql(foo) == '`foo`(`x` BIGINT NOT NULL) ' \
458
+ 'RETURNS TABLE(`one` BIGINT NULL, `two` TEXT NOT NULL, ' \
459
+ '`three` DOUBLE NOT NULL)'
460
+
461
+ @tvf(returns=MyData)
462
+ def foo(x: int) -> Tuple[int, int, int]: ...
463
+ assert to_sql(foo) == '`foo`(`x` BIGINT NOT NULL) ' \
464
+ 'RETURNS TABLE(`one` BIGINT NULL, `two` TEXT NOT NULL, ' \
465
+ '`three` DOUBLE NOT NULL)'
466
+
415
467
  def test_dtypes(self):
416
468
  assert dt.BOOL() == 'BOOL NULL'
417
469
  assert dt.BOOL(nullable=False) == 'BOOL NOT NULL'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: singlestoredb
3
- Version: 1.11.0
3
+ Version: 1.12.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
@@ -26,6 +26,8 @@ Provides-Extra: dataframe
26
26
  Requires-Dist: ibis-singlestoredb ; extra == 'dataframe'
27
27
  Provides-Extra: dbt
28
28
  Requires-Dist: dbt-singlestore ; extra == 'dbt'
29
+ Provides-Extra: docker
30
+ Requires-Dist: docker ; extra == 'docker'
29
31
  Provides-Extra: ed22519
30
32
  Requires-Dist: PyNaCl >=1.4.0 ; extra == 'ed22519'
31
33
  Provides-Extra: gssapi
@@ -1,9 +1,9 @@
1
- _singlestoredb_accel.pyd,sha256=q-aACKhILot_NGYzmm6WYE3LH_OiU9RANrIBd6YFfO4,59904
2
- singlestoredb/__init__.py,sha256=Hn7bg_Mioi5UgJH2ZaXgIbOsFdb9Xa1wqDeJvmNEYCU,1712
1
+ _singlestoredb_accel.pyd,sha256=W1PsIB7jfTDB49AL2PgldrRvEESTG3DXGIyaB7ssitg,61440
2
+ singlestoredb/__init__.py,sha256=Iara1fKCSwiFNw9PtYKuw07k0DG97Wp-6ppI8jcJti0,1712
3
3
  singlestoredb/auth.py,sha256=RmYiH0Wlc2RXc4pTlRMysxtBI445ggCIwojWKC_eDLE,7844
4
- singlestoredb/config.py,sha256=n6ludREIoiZDEzSGmv0xouv_zHFnznKNKxSvjzgQ3Lk,12876
5
- singlestoredb/connection.py,sha256=I3A0VkA_E6pfUNCzIvj0KTb5zn6-htBAPsu6OVXO9-I,47150
6
- singlestoredb/converters.py,sha256=7_Of1f3Ow-JUoY1pHFlMPYxvt8llzdk-7X8qk5z2xJM,21631
4
+ singlestoredb/config.py,sha256=5OY9RDlGBrBWAHsGrg0X4v0y_QwNb7G6FSQooMgT8rY,13032
5
+ singlestoredb/connection.py,sha256=Ty_idVYH50Qx-j8WXy7NeB-DYLAcpdjGYTrTHkKzG9U,47309
6
+ singlestoredb/converters.py,sha256=6gN3_RzSbw0Aimd5cGgBNPNq1yiHb1a_NK8qC9DmOQ0,21636
7
7
  singlestoredb/exceptions.py,sha256=WCCJrNSsU-hD-621Jpd6bwmvGftQ7byXkk-XKXlaxpg,3354
8
8
  singlestoredb/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  singlestoredb/pytest.py,sha256=TH364xRCN7_QaN0oRQDHixrEcDx_ZBgu3bmY0tvKrYU,9357
@@ -19,13 +19,13 @@ singlestoredb/apps/_dashboards.py,sha256=qEdDivjwS68Uukay0Qw-3awHZFpkcqapzd3vLaV
19
19
  singlestoredb/apps/_process.py,sha256=eMiBO4piaRX1S6zdnMx0X0E4J7E1XrXndnVW0GRYq1Y,976
20
20
  singlestoredb/apps/_stdout_supress.py,sha256=QRV-IHQQMvWMeJfqORuVE2-Il6ohO2Ti4IokFoTCJWE,689
21
21
  singlestoredb/apps/_uvicorn_util.py,sha256=Petkmq5keBPfXZsHBrnZfY3O2rUHvb3Cw6o-BRz5MP0,994
22
- singlestoredb/functions/__init__.py,sha256=EVxqWOCcXiIX4Yj7rljAYBBoVbTvm2KSuKSkMBDnEeU,42
23
- singlestoredb/functions/decorator.py,sha256=M103c1JAZfyGFQAU4uJ_J8XGGH3InhcfrNUCoEORNFQ,5335
22
+ singlestoredb/functions/__init__.py,sha256=Ehyp1pa40cvizzSYNGZ4UP4tiEcyfaxf_LI-oyt-Lro,84
23
+ singlestoredb/functions/decorator.py,sha256=6c0uIknQNZrN5LAj-mWUw25Bcnl-_dRel6RMDzn2vK8,11816
24
24
  singlestoredb/functions/dtypes.py,sha256=5IwMSaSzxtSowxXrm5hZXW1lpNm6QILxiU4mAUEkBO0,32854
25
- singlestoredb/functions/signature.py,sha256=gnD1JID0XVKU6p5UaPMb492A7nzJiSzFiRn18LeLWhY,19635
25
+ singlestoredb/functions/signature.py,sha256=np4DHtfLM-S38srVu9KzsJZnI7tiwrl0UtMnA8F6rZ0,23162
26
26
  singlestoredb/functions/ext/__init__.py,sha256=5ppI8IZN_zOwoJFdu_Oq9ipxtyHw9n6OMVAa_s9T_yY,24
27
27
  singlestoredb/functions/ext/arrow.py,sha256=mQhwaMpvCH_dP92WIhP_j-stu272n4UAHsFUOBTgnq0,9436
28
- singlestoredb/functions/ext/asgi.py,sha256=W4z-XyMvdNrEnEYicrP1hfLldI4H9FIEFIVvf4eXSA4,41195
28
+ singlestoredb/functions/ext/asgi.py,sha256=ENwGjjLxFYjv6HFB5WdX4YT5GSs5sn3mirOLgAM0wTY,44807
29
29
  singlestoredb/functions/ext/json.py,sha256=CROdj37cuJhAZ-CM93EI-SoLb4kxFcMGudsJ5QGyCoI,10831
30
30
  singlestoredb/functions/ext/mmap.py,sha256=zo6eweOFCZp0KIzAeL1vvuSjqvQhE8ybVhHbU0ZICt4,14124
31
31
  singlestoredb/functions/ext/rowdat_1.py,sha256=KYj_y5JWm3_B2-QC47HK-CNOrzujBqGUwLJfE49jwRg,23050
@@ -34,24 +34,24 @@ singlestoredb/fusion/__init__.py,sha256=FHWtrg6OJFTf6Ye197V5sU6ssryr2h6FBcDIgXP7
34
34
  singlestoredb/fusion/graphql.py,sha256=SHqsPe4xgawdsTPHEtJGQlybYGWqPrGMmyK-v20RLac,5420
35
35
  singlestoredb/fusion/handler.py,sha256=ohnU0BIoJ9AHrVLlCHI-3E4Icqoocxqip8T-XyYxBWQ,28293
36
36
  singlestoredb/fusion/registry.py,sha256=_eT1gd38VPlFKs5f9Pu6lqQyoDQ_ixW5O56QwYLQ89Y,6361
37
- singlestoredb/fusion/result.py,sha256=EcFY5Qv43ySlQsfl_JB-I3ko7PzVdjuhhoKN96uHSAM,12171
37
+ singlestoredb/fusion/result.py,sha256=KAwhXxXVgfkAWekCFY8-Y03ANKDiTflYRXyEc_1Id0k,12189
38
38
  singlestoredb/fusion/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- singlestoredb/fusion/handlers/export.py,sha256=Vf0idiFTluEhDpt7ozWSdYwQcOeXz2-J6-91ax8F834,7189
40
- singlestoredb/fusion/handlers/files.py,sha256=sXO5OFS5QsmwNOnMY3G5xpMPqh4_WkssW3dOB6uI4VQ,19669
39
+ singlestoredb/fusion/handlers/export.py,sha256=OPA1yY1GRRTh1YiGawfAx_LfsxA_qs8Ci0LDTfVEq9A,9278
40
+ singlestoredb/fusion/handlers/files.py,sha256=pCx1sqnjPtQrp39rv_V4RX9CVtj6uSiL6HPUyiABYpI,19681
41
41
  singlestoredb/fusion/handlers/job.py,sha256=3enfxHwERH7T4u0FEwOPN0IL0GtepaCYgEsisiy3Df4,21753
42
42
  singlestoredb/fusion/handlers/models.py,sha256=XWaPJQc3GQIOAcjNcxBSGUBJ3xu2qkzQ4ILa40TFQmY,6486
43
43
  singlestoredb/fusion/handlers/stage.py,sha256=PP-SSP204lwpmnycSXXSmFPzoN535JVuwglDCbaQ8Lw,14789
44
44
  singlestoredb/fusion/handlers/utils.py,sha256=qwKGKi7hVlxoROZnAdOgqN3Fw4EHxMynfCdUWKvjFvo,10374
45
45
  singlestoredb/fusion/handlers/workspace.py,sha256=NxoEY5xd5lCQmXiim4nhAYCL0agHo1H_rGPpqa31hiw,28397
46
46
  singlestoredb/http/__init__.py,sha256=4cEDvLloGc3LSpU-PnIwacyu0n5oIIIE6xk2SPyWD_w,939
47
- singlestoredb/http/connection.py,sha256=LFUeWx7maS7xhQLqEX3pgvIGoosqyJTovtWwJ1DyDSA,40721
47
+ singlestoredb/http/connection.py,sha256=dqXX5SSn6EOV7q0Ehh0E525eLT__B_jJLG-7jgVjbXg,40861
48
48
  singlestoredb/magics/__init__.py,sha256=fqCBQ0s8o1CYE4Xo_XiSbkLDzLgMNDgpSkOx66-uDZw,1244
49
49
  singlestoredb/magics/run_personal.py,sha256=M11xHi9lWquh_pLSpFI89LGE7PhOPQOGqlSPDl48itE,1900
50
50
  singlestoredb/magics/run_shared.py,sha256=rnKpW4d8CJvD6ehK8jG8FlxuqZvjZl4KocPTsk-23O8,1805
51
51
  singlestoredb/management/__init__.py,sha256=A66ZnFyX--PsAZ2tvtYUfIUBvVGDBFQsnVc6nGTlX60,277
52
52
  singlestoredb/management/billing_usage.py,sha256=0UHFSPCrN0nyeGFFM-HXS3NP8pYmYo2BCCahDEPXvzg,3883
53
53
  singlestoredb/management/cluster.py,sha256=auBzNYIXvnI6rq3DNpPgJhwWoT6JsyZRikjpON23Pxg,14867
54
- singlestoredb/management/export.py,sha256=Ksrb8_sxeqva4NElaGxdPQUWQga2yOEkf0wnw5M-iGc,4302
54
+ singlestoredb/management/export.py,sha256=2dCvnTnkxVI-arX3_375DtWzHkI1YNK5zaFYdHKE4cs,5277
55
55
  singlestoredb/management/files.py,sha256=ly9Hwe0kVWqws8dvjuoIH0fURi8TadTTZPIFKTxnuWI,31677
56
56
  singlestoredb/management/job.py,sha256=Npfe1JLYJlggGBrXLniPKwKUKF1i3alvSY1SFtvauSs,25498
57
57
  singlestoredb/management/manager.py,sha256=8zU0d7NG83PYMhoAs2JriTqbqh-R2tLX7VZoeZtcogY,9148
@@ -62,7 +62,7 @@ singlestoredb/management/workspace.py,sha256=erII_7SA4vdJkTPBKB6aa88mYujmXTYdNeQ
62
62
  singlestoredb/mysql/__init__.py,sha256=CbpwzNUJPAmKPpIobC0-ugBta_RgHCMq7X7N75QLReY,4669
63
63
  singlestoredb/mysql/_auth.py,sha256=YaqqyvAHmeraBv3BM207rNveUVPM-mPnW20ts_ynVWg,8341
64
64
  singlestoredb/mysql/charset.py,sha256=mnCdMpvdub1S2mm2PSk2j5JddgsWRjsVLtGx-y9TskE,10724
65
- singlestoredb/mysql/connection.py,sha256=lzwf31pFioWCUaMBB_TahB9VsemKMS0l3DrUqO3ZCJE,74764
65
+ singlestoredb/mysql/connection.py,sha256=Dlam7wNSfn4jVBNrqdvxLzwxJqCQUzuu_rlcKU45MB0,75113
66
66
  singlestoredb/mysql/converters.py,sha256=vebFFm6IrC0WgY-5Eh-esaPizY5cq3vDOUlEKGaYM-U,7771
67
67
  singlestoredb/mysql/cursors.py,sha256=pkrP-1t8IhBJRnYpdM7Rdm-332nOq1RYTDJ_yg_q5HI,27682
68
68
  singlestoredb/mysql/err.py,sha256=aDbmfq08gWVmfgIea735wSeiFdvYbB5wusgd3qTVq1s,2480
@@ -103,6 +103,9 @@ singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py,sh
103
103
  singlestoredb/notebook/__init__.py,sha256=XGvAnkjV_6MjaNv6aqxqDL3ovPApKmNX-2UYH1t0cec,549
104
104
  singlestoredb/notebook/_objects.py,sha256=rDfHGLLwrnuhVMOyNojzrGamykyfOQxZfH2EnFd8vEw,8256
105
105
  singlestoredb/notebook/_portal.py,sha256=ip3MkJ51syxppUVGRjgqLfR0He4KCZVklFwWT_X270s,10011
106
+ singlestoredb/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
+ singlestoredb/server/docker.py,sha256=gdGLEaUkPQJQ8u_1C1OQYr4iXPx1s6CmQmXKOrJFn3g,15095
108
+ singlestoredb/server/free_tier.py,sha256=rugYt_5jIC6AsE2UhR5hiLQKExyOqSXFyBoIaqG2pIc,8653
106
109
  singlestoredb/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
110
  singlestoredb/tests/empty.sql,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
111
  singlestoredb/tests/local_infile.csv,sha256=0fYxcZcTvcwS2McF4sktFsipRY1G-ClGmCRR1eCqdEQ,45
@@ -123,7 +126,7 @@ singlestoredb/tests/test_management.py,sha256=y6K9dm-s9wxi1yk7fGt-h6hYlB9W4VZy4F
123
126
  singlestoredb/tests/test_plugin.py,sha256=P1nXLnTafaHkHN-6bVbGryxTu7OWJPU9SYFZ_WQUwq8,845
124
127
  singlestoredb/tests/test_results.py,sha256=Zg1ynZFRZqalAMfNLOU5C6BDXaox6JxrKm_XZwVNFcg,6753
125
128
  singlestoredb/tests/test_types.py,sha256=YeVE6KPqlqzJke-4hbRmc8ko1E7RLHu5S8qLg04Bl5Y,4632
126
- singlestoredb/tests/test_udf.py,sha256=pac1Qp1JPcUgXB1-xBBMRCqWD17IBWMQ8TFe6LE3iLo,28762
129
+ singlestoredb/tests/test_udf.py,sha256=Hm4Egcrd3awgGQA9JS7T0yBWyNL44z8cdjvZwNL7re4,30768
127
130
  singlestoredb/tests/test_xdict.py,sha256=5ArRJqd5aNXkPK7Y6sFeRbqZ59MZ1YaGBpSlDAbBrjM,10741
128
131
  singlestoredb/tests/utils.py,sha256=WR8GFNiC0lU4tz21Y3rlbbp9Gz9WcSwp2jpUSCj7RFU,5136
129
132
  singlestoredb/tests/ext_funcs/__init__.py,sha256=mKa-vOh5D8M03kgKTQyvOB74X-Of0nl-mcmJBFzRW0c,9675
@@ -138,9 +141,9 @@ singlestoredb/utils/results.py,sha256=wR70LhCqlobniZf52r67zYLBOKjWHQm68NAskdRQND
138
141
  singlestoredb/utils/xdict.py,sha256=-wi1lSPTnY99fhVMBhPKJ8cCsQhNG4GMUfkEBDKYgCw,13321
139
142
  sqlx/__init__.py,sha256=4Sdn8HN-Hf8v0_wCt60DCckCg8BvgM3-9r4YVfZycRE,89
140
143
  sqlx/magic.py,sha256=6VBlotgjautjev599tHaTYOfcfOA9m6gV_-P1_Qc4lI,3622
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,,
144
+ singlestoredb-1.12.0.dist-info/LICENSE,sha256=Bojenzui8aPNjlF3w4ojguDP7sTf8vFV_9Gc2UAG1sg,11542
145
+ singlestoredb-1.12.0.dist-info/METADATA,sha256=uUarreheJtoVdjN3cdib0m42WWjYaEyoU_RZw1niVNY,5778
146
+ singlestoredb-1.12.0.dist-info/WHEEL,sha256=c4k7z5HB0t-y0nBCv6KyJ6KCjn8SEGPddD0lhaPtU3E,96
147
+ singlestoredb-1.12.0.dist-info/entry_points.txt,sha256=bSLaTWB5zGjpVYPAaI46MkkDup0su-eb3uAhCNYuRV0,48
148
+ singlestoredb-1.12.0.dist-info/top_level.txt,sha256=lA65Vf4qAMfg_s1oG3LEO90h4t1Z-SPDbRqkevI3bSY,40
149
+ singlestoredb-1.12.0.dist-info/RECORD,,