singlestoredb 1.16.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. singlestoredb/__init__.py +75 -0
  2. singlestoredb/ai/__init__.py +2 -0
  3. singlestoredb/ai/chat.py +139 -0
  4. singlestoredb/ai/embeddings.py +128 -0
  5. singlestoredb/alchemy/__init__.py +90 -0
  6. singlestoredb/apps/__init__.py +3 -0
  7. singlestoredb/apps/_cloud_functions.py +90 -0
  8. singlestoredb/apps/_config.py +72 -0
  9. singlestoredb/apps/_connection_info.py +18 -0
  10. singlestoredb/apps/_dashboards.py +47 -0
  11. singlestoredb/apps/_process.py +32 -0
  12. singlestoredb/apps/_python_udfs.py +100 -0
  13. singlestoredb/apps/_stdout_supress.py +30 -0
  14. singlestoredb/apps/_uvicorn_util.py +36 -0
  15. singlestoredb/auth.py +245 -0
  16. singlestoredb/config.py +484 -0
  17. singlestoredb/connection.py +1487 -0
  18. singlestoredb/converters.py +950 -0
  19. singlestoredb/docstring/__init__.py +33 -0
  20. singlestoredb/docstring/attrdoc.py +126 -0
  21. singlestoredb/docstring/common.py +230 -0
  22. singlestoredb/docstring/epydoc.py +267 -0
  23. singlestoredb/docstring/google.py +412 -0
  24. singlestoredb/docstring/numpydoc.py +562 -0
  25. singlestoredb/docstring/parser.py +100 -0
  26. singlestoredb/docstring/py.typed +1 -0
  27. singlestoredb/docstring/rest.py +256 -0
  28. singlestoredb/docstring/tests/__init__.py +1 -0
  29. singlestoredb/docstring/tests/_pydoctor.py +21 -0
  30. singlestoredb/docstring/tests/test_epydoc.py +729 -0
  31. singlestoredb/docstring/tests/test_google.py +1007 -0
  32. singlestoredb/docstring/tests/test_numpydoc.py +1100 -0
  33. singlestoredb/docstring/tests/test_parse_from_object.py +109 -0
  34. singlestoredb/docstring/tests/test_parser.py +248 -0
  35. singlestoredb/docstring/tests/test_rest.py +547 -0
  36. singlestoredb/docstring/tests/test_util.py +70 -0
  37. singlestoredb/docstring/util.py +141 -0
  38. singlestoredb/exceptions.py +120 -0
  39. singlestoredb/functions/__init__.py +16 -0
  40. singlestoredb/functions/decorator.py +201 -0
  41. singlestoredb/functions/dtypes.py +1793 -0
  42. singlestoredb/functions/ext/__init__.py +1 -0
  43. singlestoredb/functions/ext/arrow.py +375 -0
  44. singlestoredb/functions/ext/asgi.py +2133 -0
  45. singlestoredb/functions/ext/json.py +420 -0
  46. singlestoredb/functions/ext/mmap.py +413 -0
  47. singlestoredb/functions/ext/rowdat_1.py +724 -0
  48. singlestoredb/functions/ext/timer.py +89 -0
  49. singlestoredb/functions/ext/utils.py +218 -0
  50. singlestoredb/functions/signature.py +1578 -0
  51. singlestoredb/functions/typing/__init__.py +41 -0
  52. singlestoredb/functions/typing/numpy.py +20 -0
  53. singlestoredb/functions/typing/pandas.py +2 -0
  54. singlestoredb/functions/typing/polars.py +2 -0
  55. singlestoredb/functions/typing/pyarrow.py +2 -0
  56. singlestoredb/functions/utils.py +421 -0
  57. singlestoredb/fusion/__init__.py +11 -0
  58. singlestoredb/fusion/graphql.py +213 -0
  59. singlestoredb/fusion/handler.py +916 -0
  60. singlestoredb/fusion/handlers/__init__.py +0 -0
  61. singlestoredb/fusion/handlers/export.py +525 -0
  62. singlestoredb/fusion/handlers/files.py +690 -0
  63. singlestoredb/fusion/handlers/job.py +660 -0
  64. singlestoredb/fusion/handlers/models.py +250 -0
  65. singlestoredb/fusion/handlers/stage.py +502 -0
  66. singlestoredb/fusion/handlers/utils.py +324 -0
  67. singlestoredb/fusion/handlers/workspace.py +956 -0
  68. singlestoredb/fusion/registry.py +249 -0
  69. singlestoredb/fusion/result.py +399 -0
  70. singlestoredb/http/__init__.py +27 -0
  71. singlestoredb/http/connection.py +1267 -0
  72. singlestoredb/magics/__init__.py +34 -0
  73. singlestoredb/magics/run_personal.py +137 -0
  74. singlestoredb/magics/run_shared.py +134 -0
  75. singlestoredb/management/__init__.py +9 -0
  76. singlestoredb/management/billing_usage.py +148 -0
  77. singlestoredb/management/cluster.py +462 -0
  78. singlestoredb/management/export.py +295 -0
  79. singlestoredb/management/files.py +1102 -0
  80. singlestoredb/management/inference_api.py +105 -0
  81. singlestoredb/management/job.py +887 -0
  82. singlestoredb/management/manager.py +373 -0
  83. singlestoredb/management/organization.py +226 -0
  84. singlestoredb/management/region.py +169 -0
  85. singlestoredb/management/utils.py +423 -0
  86. singlestoredb/management/workspace.py +1927 -0
  87. singlestoredb/mysql/__init__.py +177 -0
  88. singlestoredb/mysql/_auth.py +298 -0
  89. singlestoredb/mysql/charset.py +214 -0
  90. singlestoredb/mysql/connection.py +2032 -0
  91. singlestoredb/mysql/constants/CLIENT.py +38 -0
  92. singlestoredb/mysql/constants/COMMAND.py +32 -0
  93. singlestoredb/mysql/constants/CR.py +78 -0
  94. singlestoredb/mysql/constants/ER.py +474 -0
  95. singlestoredb/mysql/constants/EXTENDED_TYPE.py +3 -0
  96. singlestoredb/mysql/constants/FIELD_TYPE.py +48 -0
  97. singlestoredb/mysql/constants/FLAG.py +15 -0
  98. singlestoredb/mysql/constants/SERVER_STATUS.py +10 -0
  99. singlestoredb/mysql/constants/VECTOR_TYPE.py +6 -0
  100. singlestoredb/mysql/constants/__init__.py +0 -0
  101. singlestoredb/mysql/converters.py +271 -0
  102. singlestoredb/mysql/cursors.py +896 -0
  103. singlestoredb/mysql/err.py +92 -0
  104. singlestoredb/mysql/optionfile.py +20 -0
  105. singlestoredb/mysql/protocol.py +450 -0
  106. singlestoredb/mysql/tests/__init__.py +19 -0
  107. singlestoredb/mysql/tests/base.py +126 -0
  108. singlestoredb/mysql/tests/conftest.py +37 -0
  109. singlestoredb/mysql/tests/test_DictCursor.py +132 -0
  110. singlestoredb/mysql/tests/test_SSCursor.py +141 -0
  111. singlestoredb/mysql/tests/test_basic.py +452 -0
  112. singlestoredb/mysql/tests/test_connection.py +851 -0
  113. singlestoredb/mysql/tests/test_converters.py +58 -0
  114. singlestoredb/mysql/tests/test_cursor.py +141 -0
  115. singlestoredb/mysql/tests/test_err.py +16 -0
  116. singlestoredb/mysql/tests/test_issues.py +514 -0
  117. singlestoredb/mysql/tests/test_load_local.py +75 -0
  118. singlestoredb/mysql/tests/test_nextset.py +88 -0
  119. singlestoredb/mysql/tests/test_optionfile.py +27 -0
  120. singlestoredb/mysql/tests/thirdparty/__init__.py +6 -0
  121. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/__init__.py +9 -0
  122. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/capabilities.py +323 -0
  123. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/dbapi20.py +865 -0
  124. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_capabilities.py +110 -0
  125. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_dbapi20.py +224 -0
  126. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py +101 -0
  127. singlestoredb/mysql/times.py +23 -0
  128. singlestoredb/notebook/__init__.py +16 -0
  129. singlestoredb/notebook/_objects.py +213 -0
  130. singlestoredb/notebook/_portal.py +352 -0
  131. singlestoredb/py.typed +0 -0
  132. singlestoredb/pytest.py +352 -0
  133. singlestoredb/server/__init__.py +0 -0
  134. singlestoredb/server/docker.py +452 -0
  135. singlestoredb/server/free_tier.py +267 -0
  136. singlestoredb/tests/__init__.py +0 -0
  137. singlestoredb/tests/alltypes.sql +307 -0
  138. singlestoredb/tests/alltypes_no_nulls.sql +208 -0
  139. singlestoredb/tests/empty.sql +0 -0
  140. singlestoredb/tests/ext_funcs/__init__.py +702 -0
  141. singlestoredb/tests/local_infile.csv +3 -0
  142. singlestoredb/tests/test.ipynb +18 -0
  143. singlestoredb/tests/test.sql +680 -0
  144. singlestoredb/tests/test2.ipynb +18 -0
  145. singlestoredb/tests/test2.sql +1 -0
  146. singlestoredb/tests/test_basics.py +1332 -0
  147. singlestoredb/tests/test_config.py +318 -0
  148. singlestoredb/tests/test_connection.py +3103 -0
  149. singlestoredb/tests/test_dbapi.py +27 -0
  150. singlestoredb/tests/test_exceptions.py +45 -0
  151. singlestoredb/tests/test_ext_func.py +1472 -0
  152. singlestoredb/tests/test_ext_func_data.py +1101 -0
  153. singlestoredb/tests/test_fusion.py +1527 -0
  154. singlestoredb/tests/test_http.py +288 -0
  155. singlestoredb/tests/test_management.py +1599 -0
  156. singlestoredb/tests/test_plugin.py +33 -0
  157. singlestoredb/tests/test_results.py +171 -0
  158. singlestoredb/tests/test_types.py +132 -0
  159. singlestoredb/tests/test_udf.py +737 -0
  160. singlestoredb/tests/test_udf_returns.py +459 -0
  161. singlestoredb/tests/test_vectorstore.py +51 -0
  162. singlestoredb/tests/test_xdict.py +333 -0
  163. singlestoredb/tests/utils.py +141 -0
  164. singlestoredb/types.py +373 -0
  165. singlestoredb/utils/__init__.py +0 -0
  166. singlestoredb/utils/config.py +950 -0
  167. singlestoredb/utils/convert_rows.py +69 -0
  168. singlestoredb/utils/debug.py +13 -0
  169. singlestoredb/utils/dtypes.py +205 -0
  170. singlestoredb/utils/events.py +65 -0
  171. singlestoredb/utils/mogrify.py +151 -0
  172. singlestoredb/utils/results.py +585 -0
  173. singlestoredb/utils/xdict.py +425 -0
  174. singlestoredb/vectorstore.py +192 -0
  175. singlestoredb/warnings.py +5 -0
  176. singlestoredb-1.16.1.dist-info/METADATA +165 -0
  177. singlestoredb-1.16.1.dist-info/RECORD +183 -0
  178. singlestoredb-1.16.1.dist-info/WHEEL +5 -0
  179. singlestoredb-1.16.1.dist-info/entry_points.txt +2 -0
  180. singlestoredb-1.16.1.dist-info/licenses/LICENSE +201 -0
  181. singlestoredb-1.16.1.dist-info/top_level.txt +3 -0
  182. sqlx/__init__.py +4 -0
  183. sqlx/magic.py +113 -0
@@ -0,0 +1,109 @@
1
+ """Tests for parse_from_object function and attribute docstrings."""
2
+ from unittest.mock import patch
3
+
4
+ from singlestoredb.docstring import parse_from_object
5
+
6
+ # module_attr: int = 1
7
+ # """Description for module_attr"""
8
+
9
+
10
+ # def test_from_module_attribute_docstrings() -> None:
11
+ # """Test the parse of attribute docstrings from a module."""
12
+ # from . import test_parse_from_object # pylint: disable=C0415,W0406
13
+ #
14
+ # docstring = parse_from_object(test_parse_from_object)
15
+ #
16
+ # assert 'parse_from_object' in docstring.short_description
17
+ # assert len(docstring.params) == 1
18
+ # assert docstring.params[0].arg_name == 'module_attr'
19
+ # assert docstring.params[0].type_name == 'int'
20
+ # assert docstring.params[0].description == 'Description for module_attr'
21
+
22
+
23
+ def test_from_class_attribute_docstrings() -> None:
24
+ """Test the parse of attribute docstrings from a class."""
25
+
26
+ class StandardCase:
27
+ """Short description
28
+ Long description
29
+ """
30
+
31
+ attr_one: str
32
+ """Description for attr_one"""
33
+ attr_two: bool = False
34
+ """Description for attr_two"""
35
+
36
+ docstring = parse_from_object(StandardCase)
37
+
38
+ assert docstring.short_description == 'Short description'
39
+ assert docstring.long_description == 'Long description'
40
+ assert docstring.description == 'Short description\nLong description'
41
+ assert len(docstring.params) == 2
42
+ assert docstring.params[0].arg_name == 'attr_one'
43
+ assert docstring.params[0].type_name == 'str'
44
+ assert docstring.params[0].description == 'Description for attr_one'
45
+ assert docstring.params[1].arg_name == 'attr_two'
46
+ assert docstring.params[1].type_name == 'bool'
47
+ assert docstring.params[1].description == 'Description for attr_two'
48
+
49
+
50
+ def test_from_class_attribute_docstrings_without_type() -> None:
51
+ """Test the parse of untyped attribute docstrings."""
52
+
53
+ class WithoutType: # pylint: disable=missing-class-docstring
54
+ attr_one = 'value'
55
+ """Description for attr_one"""
56
+
57
+ docstring = parse_from_object(WithoutType)
58
+
59
+ assert docstring.short_description is None
60
+ assert docstring.long_description is None
61
+ assert docstring.description is None
62
+ assert len(docstring.params) == 1
63
+ assert docstring.params[0].arg_name == 'attr_one'
64
+ assert docstring.params[0].type_name is None
65
+ assert docstring.params[0].description == 'Description for attr_one'
66
+
67
+
68
+ def test_from_class_without_source() -> None:
69
+ """Test the parse of class when source is unavailable."""
70
+
71
+ class WithoutSource:
72
+ """Short description"""
73
+
74
+ attr_one: str
75
+ """Description for attr_one"""
76
+
77
+ with patch(
78
+ 'inspect.getsource', side_effect=OSError('could not get source code'),
79
+ ):
80
+ docstring = parse_from_object(WithoutSource)
81
+
82
+ assert docstring.short_description == 'Short description'
83
+ assert docstring.long_description is None
84
+ assert docstring.description == 'Short description'
85
+ assert len(docstring.params) == 0
86
+
87
+
88
+ def test_from_function() -> None:
89
+ """Test the parse of a function docstring."""
90
+
91
+ def a_function(param1: str, param2: int = 2) -> str:
92
+ """Short description
93
+ Args:
94
+ param1: Description for param1
95
+ param2: Description for param2
96
+ """
97
+ return f'{param1} {param2}'
98
+
99
+ docstring = parse_from_object(a_function)
100
+
101
+ assert docstring.short_description == 'Short description'
102
+ assert docstring.description == 'Short description'
103
+ assert len(docstring.params) == 2
104
+ assert docstring.params[0].arg_name == 'param1'
105
+ assert docstring.params[0].type_name is None
106
+ assert docstring.params[0].description == 'Description for param1'
107
+ assert docstring.params[1].arg_name == 'param2'
108
+ assert docstring.params[1].type_name is None
109
+ assert docstring.params[1].description == 'Description for param2'
@@ -0,0 +1,248 @@
1
+ """Tests for generic docstring routines."""
2
+ import typing as T
3
+
4
+ import pytest
5
+
6
+ from singlestoredb.docstring.common import DocstringStyle
7
+ from singlestoredb.docstring.common import ParseError
8
+ from singlestoredb.docstring.parser import parse
9
+
10
+
11
+ @pytest.mark.parametrize(
12
+ 'source, expected',
13
+ [
14
+ pytest.param(None, None, id='No __doc__'),
15
+ ('', None),
16
+ ('\n', None),
17
+ ('Short description', 'Short description'),
18
+ ('\nShort description\n', 'Short description'),
19
+ ('\n Short description\n', 'Short description'),
20
+ ],
21
+ )
22
+ def test_short_description(
23
+ source: T.Optional[str], expected: T.Optional[str],
24
+ ) -> None:
25
+ """Test parsing short description."""
26
+ docstring = parse(source)
27
+ assert docstring.short_description == expected
28
+ assert docstring.description == expected
29
+ assert docstring.long_description is None
30
+ assert not docstring.meta
31
+
32
+
33
+ def test_rest() -> None:
34
+ """Test ReST-style parser autodetection."""
35
+ docstring = parse(
36
+ """
37
+ Short description
38
+
39
+ Long description
40
+
41
+ Causing people to indent:
42
+
43
+ A lot sometimes
44
+
45
+ :param spam: spam desc
46
+ :param int bla: bla desc
47
+ :param str yay:
48
+ :raises ValueError: exc desc
49
+ :returns tuple: ret desc
50
+ """,
51
+ )
52
+
53
+ assert docstring.style == DocstringStyle.REST
54
+ assert docstring.short_description == 'Short description'
55
+ assert docstring.long_description == (
56
+ 'Long description\n\n'
57
+ 'Causing people to indent:\n\n'
58
+ ' A lot sometimes'
59
+ )
60
+ assert docstring.description == (
61
+ 'Short description\n\n'
62
+ 'Long description\n\n'
63
+ 'Causing people to indent:\n\n'
64
+ ' A lot sometimes'
65
+ )
66
+ assert len(docstring.params) == 3
67
+ assert docstring.params[0].arg_name == 'spam'
68
+ assert docstring.params[0].type_name is None
69
+ assert docstring.params[0].description == 'spam desc'
70
+ assert docstring.params[1].arg_name == 'bla'
71
+ assert docstring.params[1].type_name == 'int'
72
+ assert docstring.params[1].description == 'bla desc'
73
+ assert docstring.params[2].arg_name == 'yay'
74
+ assert docstring.params[2].type_name == 'str'
75
+ assert docstring.params[2].description == ''
76
+ assert len(docstring.raises) == 1
77
+ assert docstring.raises[0].type_name == 'ValueError'
78
+ assert docstring.raises[0].description == 'exc desc'
79
+ assert docstring.returns is not None
80
+ assert docstring.returns.type_name == 'tuple'
81
+ assert docstring.returns.description == 'ret desc'
82
+ assert docstring.many_returns is not None
83
+ assert len(docstring.many_returns) == 1
84
+ assert docstring.many_returns[0] == docstring.returns
85
+
86
+
87
+ def test_google() -> None:
88
+ """Test Google-style parser autodetection."""
89
+ docstring = parse(
90
+ """Short description
91
+
92
+ Long description
93
+
94
+ Causing people to indent:
95
+
96
+ A lot sometimes
97
+
98
+ Args:
99
+ spam: spam desc
100
+ bla (int): bla desc
101
+ yay (str):
102
+
103
+ Raises:
104
+ ValueError: exc desc
105
+
106
+ Returns:
107
+ tuple: ret desc
108
+ """,
109
+ )
110
+
111
+ assert docstring.style == DocstringStyle.GOOGLE
112
+ assert docstring.short_description == 'Short description'
113
+ assert docstring.long_description == (
114
+ 'Long description\n\n'
115
+ 'Causing people to indent:\n\n'
116
+ ' A lot sometimes'
117
+ )
118
+ assert docstring.description == (
119
+ 'Short description\n\n'
120
+ 'Long description\n\n'
121
+ 'Causing people to indent:\n\n'
122
+ ' A lot sometimes'
123
+ )
124
+ assert len(docstring.params) == 3
125
+ assert docstring.params[0].arg_name == 'spam'
126
+ assert docstring.params[0].type_name is None
127
+ assert docstring.params[0].description == 'spam desc'
128
+ assert docstring.params[1].arg_name == 'bla'
129
+ assert docstring.params[1].type_name == 'int'
130
+ assert docstring.params[1].description == 'bla desc'
131
+ assert docstring.params[2].arg_name == 'yay'
132
+ assert docstring.params[2].type_name == 'str'
133
+ assert docstring.params[2].description == ''
134
+ assert len(docstring.raises) == 1
135
+ assert docstring.raises[0].type_name == 'ValueError'
136
+ assert docstring.raises[0].description == 'exc desc'
137
+ assert docstring.returns is not None
138
+ assert docstring.returns.type_name == 'tuple'
139
+ assert docstring.returns.description == 'ret desc'
140
+ assert docstring.many_returns is not None
141
+ assert len(docstring.many_returns) == 1
142
+ assert docstring.many_returns[0] == docstring.returns
143
+
144
+
145
+ def test_numpydoc() -> None:
146
+ """Test numpydoc-style parser autodetection."""
147
+ docstring = parse(
148
+ """Short description
149
+
150
+ Long description
151
+
152
+ Causing people to indent:
153
+
154
+ A lot sometimes
155
+
156
+ Parameters
157
+ ----------
158
+ spam
159
+ spam desc
160
+ bla : int
161
+ bla desc
162
+ yay : str
163
+
164
+ Raises
165
+ ------
166
+ ValueError
167
+ exc desc
168
+
169
+ Other Parameters
170
+ ----------------
171
+ this_guy : int, optional
172
+ you know him
173
+
174
+ Returns
175
+ -------
176
+ tuple
177
+ ret desc
178
+
179
+ See Also
180
+ --------
181
+ multiple lines...
182
+ something else?
183
+
184
+ Warnings
185
+ --------
186
+ multiple lines...
187
+ none of this is real!
188
+ """,
189
+ )
190
+
191
+ assert docstring.style == DocstringStyle.NUMPYDOC
192
+ assert docstring.short_description == 'Short description'
193
+ assert docstring.long_description == (
194
+ 'Long description\n\n'
195
+ 'Causing people to indent:\n\n'
196
+ ' A lot sometimes'
197
+ )
198
+ assert docstring.description == (
199
+ 'Short description\n\n'
200
+ 'Long description\n\n'
201
+ 'Causing people to indent:\n\n'
202
+ ' A lot sometimes'
203
+ )
204
+ assert len(docstring.params) == 4
205
+ assert docstring.params[0].arg_name == 'spam'
206
+ assert docstring.params[0].type_name is None
207
+ assert docstring.params[0].description == 'spam desc'
208
+ assert docstring.params[1].arg_name == 'bla'
209
+ assert docstring.params[1].type_name == 'int'
210
+ assert docstring.params[1].description == 'bla desc'
211
+ assert docstring.params[2].arg_name == 'yay'
212
+ assert docstring.params[2].type_name == 'str'
213
+ assert docstring.params[2].description is None
214
+ assert docstring.params[3].arg_name == 'this_guy'
215
+ assert docstring.params[3].type_name == 'int'
216
+ assert docstring.params[3].is_optional
217
+ assert docstring.params[3].description == 'you know him'
218
+
219
+ assert len(docstring.raises) == 1
220
+ assert docstring.raises[0].type_name == 'ValueError'
221
+ assert docstring.raises[0].description == 'exc desc'
222
+ assert docstring.returns is not None
223
+ assert docstring.returns.type_name == 'tuple'
224
+ assert docstring.returns.description == 'ret desc'
225
+ assert docstring.many_returns is not None
226
+ assert len(docstring.many_returns) == 1
227
+ assert docstring.many_returns[0] == docstring.returns
228
+
229
+
230
+ def test_autodetection_error_detection() -> None:
231
+ """Test autodection for the case where one of the parsers throws an error
232
+ and another one succeeds.
233
+ """
234
+ source = """
235
+ Does something useless
236
+
237
+ :param 3 + 3 a: a param
238
+ """
239
+
240
+ with pytest.raises(ParseError):
241
+ # assert that one of the parsers does raise
242
+ parse(source, DocstringStyle.REST)
243
+
244
+ # assert that autodetection still works
245
+ docstring = parse(source)
246
+
247
+ assert docstring
248
+ assert docstring.style == DocstringStyle.GOOGLE