Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
singlestore-labs
GitHub Repository: singlestore-labs/singlestoredb-python
Path: blob/main/singlestoredb/config.py
469 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
'fusion.enabled', 'bool', check_bool, False,
256
'Should Fusion SQL queries be enabled?',
257
environ='SINGLESTOREDB_FUSION_ENABLED',
258
)
259
260
#
261
# Query results options
262
#
263
register_option(
264
'results.type', 'string',
265
functools.partial(
266
check_str,
267
valid_values=[
268
'tuple', 'tuples', 'namedtuple', 'namedtuples',
269
'dict', 'dicts', 'structsequence', 'structsequences',
270
'numpy', 'pandas', 'polars', 'arrow', 'pyarrow',
271
],
272
),
273
'tuples',
274
'What form should the query results take?',
275
environ='SINGLESTOREDB_RESULTS_TYPE',
276
)
277
278
register_option(
279
'results.arraysize', 'int', check_int, 1,
280
'Number of result rows to download in `fetchmany` calls.',
281
environ='SINGLESTOREDB_RESULTS_ARRAYSIZE',
282
)
283
284
285
#
286
# Workspace manager options
287
#
288
register_option(
289
'management.token', 'string', check_str, None,
290
'Specifies the authentication token for the management API.',
291
environ=['SINGLESTOREDB_MANAGEMENT_TOKEN'],
292
)
293
294
register_option(
295
'management.base_url', 'string', check_str, 'https://api.singlestore.com',
296
'Specifies the base URL for the management API.',
297
environ=['SINGLESTOREDB_MANAGEMENT_BASE_URL'],
298
)
299
300
register_option(
301
'management.version', 'string', check_str, 'v1',
302
'Specifies the version for the management API.',
303
environ=['SINGLESTOREDB_MANAGEMENT_VERSION'],
304
)
305
306
307
#
308
# External function options
309
#
310
register_option(
311
'external_function.url', 'string', check_str, 'http://localhost:8000/invoke',
312
'Specifies the URL of the external function application.',
313
environ=['SINGLESTOREDB_EXT_FUNC_URL'],
314
)
315
316
register_option(
317
'external_function.app_mode', 'string',
318
functools.partial(
319
check_str,
320
valid_values=['remote', 'collocated', 'managed'],
321
),
322
'remote',
323
'Specifies the mode of operation of the external function application.',
324
environ=['SINGLESTOREDB_EXT_FUNC_APP_MODE'],
325
)
326
327
register_option(
328
'external_function.data_format', 'string',
329
functools.partial(
330
check_str,
331
valid_values=['rowdat_1', 'json'],
332
),
333
'rowdat_1',
334
'Specifies the format for the data rows.',
335
environ=['SINGLESTOREDB_EXT_FUNC_DATA_FORMAT'],
336
)
337
338
register_option(
339
'external_function.data_version', 'string', check_str, '1.0',
340
'Specifies the version of the data format.',
341
environ=['SINGLESTOREDB_EXT_FUNC_DATA_VERSION'],
342
)
343
344
register_option(
345
'external_function.link_name', 'string', check_str, None,
346
'Specifies the link name to use for remote external functions.',
347
environ=['SINGLESTOREDB_EXT_FUNC_LINK_NAME'],
348
)
349
350
register_option(
351
'external_function.link_config', 'string', check_str, None,
352
'Specifies the link config in JSON format.',
353
environ=['SINGLESTOREDB_EXT_FUNC_LINK_CONFIG'],
354
)
355
356
register_option(
357
'external_function.link_credentials', 'string', check_str, None,
358
'Specifies the link credentials in JSON format.',
359
environ=['SINGLESTOREDB_EXT_FUNC_LINK_CREDENTIALS'],
360
)
361
362
register_option(
363
'external_function.replace_existing', 'bool', check_bool, False,
364
'Should existing functions be replaced when registering external functions?',
365
environ=['SINGLESTOREDB_EXT_FUNC_REPLACE_EXISTING'],
366
)
367
368
register_option(
369
'external_function.socket_path', 'string', check_str, None,
370
'Specifies the socket path for collocated external functions.',
371
environ=['SINGLESTOREDB_EXT_FUNC_SOCKET_PATH'],
372
)
373
374
register_option(
375
'external_function.max_connections', 'int', check_int, 32,
376
'Specifies the maximum connections in a collocated external function ' +
377
'before reusing them.',
378
environ=['SINGLESTOREDB_EXT_FUNC_MAX_CONNECTIONS'],
379
)
380
381
register_option(
382
'external_function.process_mode', 'string',
383
functools.partial(
384
check_str,
385
valid_values=['thread', 'subprocess'],
386
),
387
'subprocess',
388
'Specifies the method to use for concurrent handlers in ' +
389
'collocated external functions',
390
environ=['SINGLESTOREDB_EXT_FUNC_PROCESS_MODE'],
391
)
392
393
register_option(
394
'external_function.single_thread', 'bool', check_bool, False,
395
'Should the collocated server run in single-thread mode?',
396
environ=['SINGLESTOREDB_EXT_FUNC_SINGLE_THREAD'],
397
)
398
399
register_option(
400
'external_function.log_level', 'string',
401
functools.partial(
402
check_str,
403
valid_values=['info', 'debug', 'warning', 'error'],
404
),
405
'info',
406
'Logging level of external function server.',
407
environ=['SINGLESTOREDB_EXT_FUNC_LOG_LEVEL'],
408
)
409
410
register_option(
411
'external_function.log_file', 'string', check_str, None,
412
'File path to write logs to instead of console.',
413
environ=['SINGLESTOREDB_EXT_FUNC_LOG_FILE'],
414
)
415
416
register_option(
417
'external_function.name_prefix', 'string', check_str, '',
418
'Prefix to add to external function names.',
419
environ=['SINGLESTOREDB_EXT_FUNC_NAME_PREFIX'],
420
)
421
422
register_option(
423
'external_function.name_suffix', 'string', check_str, '',
424
'Suffix to add to external function names.',
425
environ=['SINGLESTOREDB_EXT_FUNC_NAME_SUFFIX'],
426
)
427
428
register_option(
429
'external_function.function_database', 'string', check_str, '',
430
'Database to use for the function definitions.',
431
environ=['SINGLESTOREDB_EXT_FUNC_FUNCTION_DATABASE'],
432
)
433
434
register_option(
435
'external_function.connection', 'string', check_str,
436
os.environ.get('SINGLESTOREDB_URL') or None,
437
'Specifies the connection string for the database to register functions with.',
438
environ=['SINGLESTOREDB_EXT_FUNC_CONNECTION'],
439
)
440
441
register_option(
442
'external_function.host', 'string', check_str, 'localhost',
443
'Specifies the host to bind the server to.',
444
environ=['SINGLESTOREDB_EXT_FUNC_HOST'],
445
)
446
447
register_option(
448
'external_function.port', 'int', check_int, 8000,
449
'Specifies the port to bind the server to.',
450
environ=['SINGLESTOREDB_EXT_FUNC_PORT'],
451
)
452
453
register_option(
454
'external_function.timeout', 'int', check_int, 24*60*60,
455
'Specifies the timeout in seconds for processing a batch of rows.',
456
environ=['SINGLESTOREDB_EXT_FUNC_TIMEOUT'],
457
)
458
459
register_option(
460
'external_function.disable_metrics', 'bool', check_bool, False,
461
'Disable logging of function call metrics.',
462
environ=['SINGLESTOREDB_EXT_FUNC_DISABLE_METRICS'],
463
)
464
465
register_option(
466
'external_function.app_name', 'string', check_str, None,
467
'Name for the external function application instance.',
468
environ=['SINGLESTOREDB_EXT_FUNC_APP_NAME'],
469
)
470
471
#
472
# Debugging options
473
#
474
register_option(
475
'debug.queries', 'bool', check_bool, False,
476
'Print queries and parameters to stderr.',
477
environ='SINGLESTOREDB_DEBUG_QUERIES',
478
)
479
480
register_option(
481
'debug.connection', 'bool', check_bool, False,
482
'Print connection tracing information.',
483
environ='SINGLESTOREDB_DEBUG_CONNECTION',
484
)
485
486