Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
singlestore-labs
GitHub Repository: singlestore-labs/singlestoredb-python
Path: blob/main/singlestoredb/config.py
801 views
1
#!/usr/bin/env python
2
"""SingleStoreDB package options."""
3
import functools
4
import os
5
6
from . import auth
7
from .utils.config import check_bool # noqa: F401
8
from .utils.config import check_dict_str_str # noqa: F401
9
from .utils.config import check_float # noqa: F401
10
from .utils.config import check_int # noqa: F401
11
from .utils.config import check_optional_bool # noqa: F401
12
from .utils.config import check_str # noqa: F401
13
from .utils.config import check_url # noqa: F401
14
from .utils.config import describe_option # noqa: F401
15
from .utils.config import get_default # noqa: F401
16
from .utils.config import get_option # noqa: F401
17
from .utils.config import get_suboptions # noqa: F401
18
from .utils.config import option_context # noqa: F401
19
from .utils.config import options # noqa: F401
20
from .utils.config import register_option # noqa: F401
21
from .utils.config import reset_option # noqa: F401
22
from .utils.config import set_option # noqa: F401
23
24
25
#
26
# Connection options
27
#
28
register_option(
29
'host', 'string', check_str, '127.0.0.1',
30
'Specifies the database host name or IP address.',
31
environ=['SINGLESTOREDB_HOST', 'SINGLESTOREDB_URL'],
32
)
33
34
register_option(
35
'port', 'int', check_int, 0,
36
'Specifies the database port number.',
37
environ='SINGLESTOREDB_PORT',
38
)
39
40
register_option(
41
'http_port', 'int', check_int, 0,
42
'Specifies the database port number for the HTTP API.',
43
environ='SINGLESTOREDB_HTTP_PORT',
44
)
45
46
register_option(
47
'user', 'string', check_str, None,
48
'Specifies the database user name.',
49
environ='SINGLESTOREDB_USER',
50
)
51
52
register_option(
53
'password', 'string', check_str, None,
54
'Specifies the database user password.',
55
environ='SINGLESTOREDB_PASSWORD',
56
)
57
58
register_option(
59
'driver', 'string', check_str, 'mysql',
60
'Specifies the Python DB-API module to use for communicating'
61
'with the database.',
62
environ='SINGLESTOREDB_DRIVER',
63
)
64
65
register_option(
66
'database', 'string', check_str, None,
67
'Name of the database to connect to.',
68
environ='SINGLESTOREDB_DATABASE',
69
)
70
71
register_option(
72
'pure_python', 'bool', check_optional_bool, None,
73
'Should the driver use a pure Python implementation? If the value is '
74
'`None`, the C extension will be used if it exists, and pure python '
75
'will be used otherwise. If the value is `False`, the pure python '
76
'implementation will be used. If the value is `True` and the C extension '
77
'exists, it will be used. If the value is `True` and the C extension '
78
'doesn\'t exist or can\'t be loaded, a `NotSupportedError` is raised.',
79
environ='SINGLESTOREDB_PURE_PYTHON',
80
)
81
82
register_option(
83
'charset', 'string', check_str, 'utf8mb4',
84
'Specifies the character set for the session.',
85
environ='SINGLESTOREDB_CHARSET',
86
)
87
88
register_option(
89
'encoding_errors', 'string', check_str, 'strict',
90
'Specifies the error handling behavior for decoding string values.',
91
environ='SINGLESTOREDB_ENCODING_ERRORS',
92
)
93
94
register_option(
95
'local_infile', 'bool', check_bool, False,
96
'Should it be possible to load local files?',
97
environ='SINGLESTOREDB_LOCAL_INFILE',
98
)
99
100
register_option(
101
'multi_statements', 'bool', check_bool, False,
102
'Should it be possible use multiple statements in one query?',
103
environ='SINGLESTOREDB_MULTI_STATEMENTS',
104
)
105
106
register_option(
107
'client_found_rows', 'bool', check_bool, False,
108
'Should affected_rows in OK_PACKET indicate the '
109
'number of matched rows instead of changed?',
110
environ='SINGLESTOREDB_CLIENT_FOUND_ROWS',
111
)
112
113
register_option(
114
'ssl_key', 'str', check_str, None,
115
'File containing SSL key',
116
environ='SINGLESTOREDB_SSL_KEY',
117
)
118
119
register_option(
120
'ssl_cert', 'str', check_str, None,
121
'File containing SSL certificate',
122
environ='SINGLESTOREDB_SSL_CERT',
123
)
124
125
register_option(
126
'ssl_ca', 'str', check_str, None,
127
'File containing SSL certificate authority',
128
environ='SINGLESTOREDB_SSL_CA',
129
)
130
131
register_option(
132
'ssl_cipher', 'str', check_str, 'HIGH',
133
'Sets the SSL cipher list',
134
environ='SINGLESTOREDB_SSL_CIPHER',
135
)
136
137
register_option(
138
'tls_sni_servername', 'str', check_str, None,
139
'Sets TLS SNI servername',
140
environ='SINGLESTOREDB_TLS_SNI_SERVERNAME',
141
)
142
143
register_option(
144
'ssl_disabled', 'bool', check_bool, False,
145
'Disable SSL usage',
146
environ='SINGLESTOREDB_SSL_DISABLED',
147
)
148
149
register_option(
150
'ssl_verify_cert', 'bool', check_optional_bool, None,
151
'Verify the server\'s certificate',
152
environ='SINGLESTOREDB_SSL_VERIFY_CERT',
153
)
154
155
register_option(
156
'ssl_verify_identity', 'bool', check_optional_bool, None,
157
'Verify the server\'s identity',
158
environ='SINGLESTOREDB_SSL_VERIFY_IDENTITY',
159
)
160
161
register_option(
162
'program_name', 'string', check_str, None,
163
'Name of the program',
164
)
165
166
register_option(
167
'conn_attrs', 'dict', check_dict_str_str, None,
168
'Additional connection attributes for telemetry',
169
)
170
171
register_option(
172
'credential_type', 'str',
173
functools.partial(
174
check_str, valid_values=[
175
auth.PASSWORD,
176
auth.JWT,
177
auth.BROWSER_SSO,
178
],
179
),
180
None,
181
'Type of authentication method to use.',
182
environ='SINGLESTOREDB_CREDENTIAL_TYPE',
183
)
184
185
register_option(
186
'sso_browser', 'str', check_str, None,
187
'Browser to use for single sign-on. This should be a web browser name '
188
'registered with Python\'s webbrowser module.',
189
environ='SINGLESTOREDB_SSO_BROWSER',
190
)
191
192
register_option(
193
'autocommit', 'bool', check_bool, True,
194
'Enable autocommits',
195
environ='SINGLESTOREDB_AUTOCOMMIT',
196
)
197
198
register_option(
199
'buffered', 'bool', check_bool, True,
200
'Should query results be buffered before processing?',
201
environ='SINGLESTOREDB_BUFFERED',
202
)
203
204
register_option(
205
'parse_json', 'bool', check_bool, True,
206
'Parse JSON values into Python objects?',
207
environ='SINGLESTOREDB_PARSE_JSON',
208
)
209
210
register_option(
211
'connect_timeout', 'int', check_int, 10,
212
'The timeout for connecting to the database in seconds. '
213
'(default: 10, min: 1, max: 31536000)',
214
environ='SINGLESTOREDB_CONNECT_TIMEOUT',
215
)
216
217
register_option(
218
'nan_as_null', 'bool', check_bool, False,
219
'Should NaN values be treated as NULLs in query parameter substitutions '
220
'including uploaded data?',
221
environ='SINGLESTOREDB_NAN_AS_NULL',
222
)
223
224
register_option(
225
'inf_as_null', 'bool', check_bool, False,
226
'Should Inf values be treated as NULLs in query parameter substitutions '
227
'including uploaded data?',
228
environ='SINGLESTOREDB_INF_AS_NULL',
229
)
230
231
register_option(
232
'track_env', 'bool', check_bool, False,
233
'Should connections track the SINGLESTOREDB_URL environment variable?',
234
environ='SINGLESTOREDB_TRACK_ENV',
235
)
236
237
register_option(
238
'enable_extended_data_types', 'bool', check_bool, True,
239
'Should extended data types (BSON, vector) be enabled?',
240
environ='SINGLESTOREDB_ENABLE_EXTENDED_DATA_TYPES',
241
)
242
243
register_option(
244
'vector_data_format', 'string',
245
functools.partial(
246
check_str,
247
valid_values=['json', 'binary'],
248
),
249
'binary',
250
'Format for vector data values',
251
environ='SINGLESTOREDB_VECTOR_DATA_FORMAT',
252
)
253
254
register_option(
255
'interpolate_query_with_empty_args', 'bool', check_bool, False,
256
'Should mogrify apply string interpolation when args is an empty tuple/list? ',
257
environ='SINGLESTOREDB_INTERPOLATE_QUERY_WITH_EMPTY_ARGS',
258
)
259
260
register_option(
261
'fusion.enabled', 'bool', check_bool, False,
262
'Should Fusion SQL queries be enabled?',
263
environ='SINGLESTOREDB_FUSION_ENABLED',
264
)
265
266
#
267
# Query results options
268
#
269
register_option(
270
'results.type', 'string',
271
functools.partial(
272
check_str,
273
valid_values=[
274
'tuple', 'tuples', 'namedtuple', 'namedtuples',
275
'dict', 'dicts', 'structsequence', 'structsequences',
276
'numpy', 'pandas', 'polars', 'arrow', 'pyarrow',
277
],
278
),
279
'tuples',
280
'What form should the query results take?',
281
environ='SINGLESTOREDB_RESULTS_TYPE',
282
)
283
284
register_option(
285
'results.arraysize', 'int', check_int, 1,
286
'Number of result rows to download in `fetchmany` calls.',
287
environ='SINGLESTOREDB_RESULTS_ARRAYSIZE',
288
)
289
290
291
#
292
# Workspace manager options
293
#
294
register_option(
295
'management.token', 'string', check_str, None,
296
'Specifies the authentication token for the management API.',
297
environ=['SINGLESTOREDB_MANAGEMENT_TOKEN'],
298
)
299
300
register_option(
301
'management.base_url', 'string', check_str, 'https://api.singlestore.com',
302
'Specifies the base URL for the management API.',
303
environ=['SINGLESTOREDB_MANAGEMENT_BASE_URL'],
304
)
305
306
register_option(
307
'management.version', 'string', check_str, 'v1',
308
'Specifies the version for the management API.',
309
environ=['SINGLESTOREDB_MANAGEMENT_VERSION'],
310
)
311
312
313
#
314
# External function options
315
#
316
register_option(
317
'external_function.url', 'string', check_str, 'http://localhost:8000/invoke',
318
'Specifies the URL of the external function application.',
319
environ=['SINGLESTOREDB_EXT_FUNC_URL'],
320
)
321
322
register_option(
323
'external_function.app_mode', 'string',
324
functools.partial(
325
check_str,
326
valid_values=['remote', 'collocated', 'managed'],
327
),
328
'remote',
329
'Specifies the mode of operation of the external function application.',
330
environ=['SINGLESTOREDB_EXT_FUNC_APP_MODE'],
331
)
332
333
register_option(
334
'external_function.data_format', 'string',
335
functools.partial(
336
check_str,
337
valid_values=['rowdat_1', 'json'],
338
),
339
'rowdat_1',
340
'Specifies the format for the data rows.',
341
environ=['SINGLESTOREDB_EXT_FUNC_DATA_FORMAT'],
342
)
343
344
register_option(
345
'external_function.data_version', 'string', check_str, '1.0',
346
'Specifies the version of the data format.',
347
environ=['SINGLESTOREDB_EXT_FUNC_DATA_VERSION'],
348
)
349
350
register_option(
351
'external_function.link_name', 'string', check_str, None,
352
'Specifies the link name to use for remote external functions.',
353
environ=['SINGLESTOREDB_EXT_FUNC_LINK_NAME'],
354
)
355
356
register_option(
357
'external_function.link_config', 'string', check_str, None,
358
'Specifies the link config in JSON format.',
359
environ=['SINGLESTOREDB_EXT_FUNC_LINK_CONFIG'],
360
)
361
362
register_option(
363
'external_function.link_credentials', 'string', check_str, None,
364
'Specifies the link credentials in JSON format.',
365
environ=['SINGLESTOREDB_EXT_FUNC_LINK_CREDENTIALS'],
366
)
367
368
register_option(
369
'external_function.replace_existing', 'bool', check_bool, False,
370
'Should existing functions be replaced when registering external functions?',
371
environ=['SINGLESTOREDB_EXT_FUNC_REPLACE_EXISTING'],
372
)
373
374
register_option(
375
'external_function.socket_path', 'string', check_str, None,
376
'Specifies the socket path for collocated external functions.',
377
environ=['SINGLESTOREDB_EXT_FUNC_SOCKET_PATH'],
378
)
379
380
register_option(
381
'external_function.max_connections', 'int', check_int, 32,
382
'Specifies the maximum connections in a collocated external function ' +
383
'before reusing them.',
384
environ=['SINGLESTOREDB_EXT_FUNC_MAX_CONNECTIONS'],
385
)
386
387
register_option(
388
'external_function.process_mode', 'string',
389
functools.partial(
390
check_str,
391
valid_values=['thread', 'subprocess'],
392
),
393
'subprocess',
394
'Specifies the method to use for concurrent handlers in ' +
395
'collocated external functions',
396
environ=['SINGLESTOREDB_EXT_FUNC_PROCESS_MODE'],
397
)
398
399
register_option(
400
'external_function.single_thread', 'bool', check_bool, False,
401
'Should the collocated server run in single-thread mode?',
402
environ=['SINGLESTOREDB_EXT_FUNC_SINGLE_THREAD'],
403
)
404
405
register_option(
406
'external_function.log_level', 'string',
407
functools.partial(
408
check_str,
409
valid_values=['info', 'debug', 'warning', 'error'],
410
),
411
'info',
412
'Logging level of external function server.',
413
environ=['SINGLESTOREDB_EXT_FUNC_LOG_LEVEL'],
414
)
415
416
register_option(
417
'external_function.log_file', 'string', check_str, None,
418
'File path to write logs to instead of console.',
419
environ=['SINGLESTOREDB_EXT_FUNC_LOG_FILE'],
420
)
421
422
register_option(
423
'external_function.name_prefix', 'string', check_str, '',
424
'Prefix to add to external function names.',
425
environ=['SINGLESTOREDB_EXT_FUNC_NAME_PREFIX'],
426
)
427
428
register_option(
429
'external_function.name_suffix', 'string', check_str, '',
430
'Suffix to add to external function names.',
431
environ=['SINGLESTOREDB_EXT_FUNC_NAME_SUFFIX'],
432
)
433
434
register_option(
435
'external_function.function_database', 'string', check_str, '',
436
'Database to use for the function definitions.',
437
environ=['SINGLESTOREDB_EXT_FUNC_FUNCTION_DATABASE'],
438
)
439
440
register_option(
441
'external_function.connection', 'string', check_str,
442
os.environ.get('SINGLESTOREDB_URL') or None,
443
'Specifies the connection string for the database to register functions with.',
444
environ=['SINGLESTOREDB_EXT_FUNC_CONNECTION'],
445
)
446
447
register_option(
448
'external_function.host', 'string', check_str, 'localhost',
449
'Specifies the host to bind the server to.',
450
environ=['SINGLESTOREDB_EXT_FUNC_HOST'],
451
)
452
453
register_option(
454
'external_function.port', 'int', check_int, 8000,
455
'Specifies the port to bind the server to.',
456
environ=['SINGLESTOREDB_EXT_FUNC_PORT'],
457
)
458
459
register_option(
460
'external_function.timeout', 'int', check_int, 24*60*60,
461
'Specifies the timeout in seconds for processing a batch of rows.',
462
environ=['SINGLESTOREDB_EXT_FUNC_TIMEOUT'],
463
)
464
465
register_option(
466
'external_function.disable_metrics', 'bool', check_bool, False,
467
'Disable logging of function call metrics.',
468
environ=['SINGLESTOREDB_EXT_FUNC_DISABLE_METRICS'],
469
)
470
471
register_option(
472
'external_function.app_name', 'string', check_str, None,
473
'Name for the external function application instance.',
474
environ=['SINGLESTOREDB_EXT_FUNC_APP_NAME'],
475
)
476
477
#
478
# Debugging options
479
#
480
register_option(
481
'debug.queries', 'bool', check_bool, False,
482
'Print queries and parameters to stderr.',
483
environ='SINGLESTOREDB_DEBUG_QUERIES',
484
)
485
486
register_option(
487
'debug.connection', 'bool', check_bool, False,
488
'Print connection tracing information.',
489
environ='SINGLESTOREDB_DEBUG_CONNECTION',
490
)
491
492