singlestoredb 1.15.4__tar.gz → 1.15.6__tar.gz
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-1.15.4/singlestoredb.egg-info → singlestoredb-1.15.6}/PKG-INFO +1 -1
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/setup.cfg +1 -1
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/__init__.py +1 -1
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/ext/asgi.py +26 -6
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/fusion/handlers/workspace.py +72 -12
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/management/workspace.py +1 -1
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/notebook/_portal.py +54 -15
- {singlestoredb-1.15.4 → singlestoredb-1.15.6/singlestoredb.egg-info}/PKG-INFO +1 -1
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/LICENSE +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/README.md +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/accel.c +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/setup.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/ai/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/ai/chat.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/ai/embeddings.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/alchemy/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/apps/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/apps/_cloud_functions.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/apps/_config.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/apps/_connection_info.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/apps/_dashboards.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/apps/_process.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/apps/_python_udfs.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/apps/_stdout_supress.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/apps/_uvicorn_util.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/auth.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/config.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/connection.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/converters.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/attrdoc.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/common.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/epydoc.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/google.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/numpydoc.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/parser.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/py.typed +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/rest.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/tests/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/tests/_pydoctor.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/tests/test_epydoc.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/tests/test_google.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/tests/test_numpydoc.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/tests/test_parse_from_object.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/tests/test_parser.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/tests/test_rest.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/tests/test_util.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/util.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/exceptions.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/decorator.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/dtypes.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/ext/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/ext/arrow.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/ext/json.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/ext/mmap.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/ext/rowdat_1.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/ext/timer.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/ext/utils.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/signature.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/typing/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/typing/numpy.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/typing/pandas.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/typing/polars.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/typing/pyarrow.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/functions/utils.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/fusion/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/fusion/graphql.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/fusion/handler.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/fusion/handlers/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/fusion/handlers/export.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/fusion/handlers/files.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/fusion/handlers/job.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/fusion/handlers/models.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/fusion/handlers/stage.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/fusion/handlers/utils.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/fusion/registry.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/fusion/result.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/http/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/http/connection.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/magics/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/magics/run_personal.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/magics/run_shared.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/management/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/management/billing_usage.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/management/cluster.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/management/export.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/management/files.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/management/inference_api.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/management/job.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/management/manager.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/management/organization.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/management/region.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/management/utils.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/_auth.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/charset.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/connection.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/constants/CLIENT.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/constants/COMMAND.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/constants/CR.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/constants/ER.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/constants/EXTENDED_TYPE.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/constants/FIELD_TYPE.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/constants/FLAG.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/constants/SERVER_STATUS.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/constants/VECTOR_TYPE.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/constants/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/converters.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/cursors.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/err.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/optionfile.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/protocol.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/base.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/conftest.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/test_DictCursor.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/test_SSCursor.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/test_basic.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/test_connection.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/test_converters.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/test_cursor.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/test_err.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/test_issues.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/test_load_local.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/test_nextset.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/test_optionfile.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/thirdparty/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/capabilities.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/dbapi20.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_capabilities.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_dbapi20.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/times.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/notebook/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/notebook/_objects.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/py.typed +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/pytest.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/server/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/server/docker.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/server/free_tier.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/alltypes.sql +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/alltypes_no_nulls.sql +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/empty.sql +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/ext_funcs/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/local_infile.csv +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test.ipynb +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test.sql +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test2.ipynb +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test2.sql +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_basics.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_config.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_connection.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_dbapi.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_exceptions.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_ext_func.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_ext_func_data.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_fusion.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_http.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_management.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_plugin.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_results.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_types.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_udf.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_udf_returns.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_vectorstore.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/test_xdict.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/tests/utils.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/types.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/utils/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/utils/config.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/utils/convert_rows.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/utils/debug.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/utils/dtypes.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/utils/events.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/utils/mogrify.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/utils/results.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/utils/xdict.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/vectorstore.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb.egg-info/SOURCES.txt +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb.egg-info/dependency_links.txt +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb.egg-info/entry_points.txt +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb.egg-info/requires.txt +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb.egg-info/top_level.txt +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/sqlx/__init__.py +0 -0
- {singlestoredb-1.15.4 → singlestoredb-1.15.6}/sqlx/magic.py +0 -0
|
@@ -42,6 +42,7 @@ import tempfile
|
|
|
42
42
|
import textwrap
|
|
43
43
|
import threading
|
|
44
44
|
import time
|
|
45
|
+
import traceback
|
|
45
46
|
import typing
|
|
46
47
|
import urllib
|
|
47
48
|
import uuid
|
|
@@ -708,7 +709,21 @@ class Application(object):
|
|
|
708
709
|
# Error response start
|
|
709
710
|
error_response_dict: Dict[str, Any] = dict(
|
|
710
711
|
type='http.response.start',
|
|
711
|
-
status=
|
|
712
|
+
status=500,
|
|
713
|
+
headers=[(b'content-type', b'text/plain')],
|
|
714
|
+
)
|
|
715
|
+
|
|
716
|
+
# Timeout response start
|
|
717
|
+
timeout_response_dict: Dict[str, Any] = dict(
|
|
718
|
+
type='http.response.start',
|
|
719
|
+
status=504,
|
|
720
|
+
headers=[(b'content-type', b'text/plain')],
|
|
721
|
+
)
|
|
722
|
+
|
|
723
|
+
# Cancel response start
|
|
724
|
+
cancel_response_dict: Dict[str, Any] = dict(
|
|
725
|
+
type='http.response.start',
|
|
726
|
+
status=503,
|
|
712
727
|
headers=[(b'content-type', b'text/plain')],
|
|
713
728
|
)
|
|
714
729
|
|
|
@@ -1234,11 +1249,11 @@ class Application(object):
|
|
|
1234
1249
|
},
|
|
1235
1250
|
)
|
|
1236
1251
|
body = (
|
|
1237
|
-
'
|
|
1252
|
+
'TimeoutError: Function call timed out after ' +
|
|
1238
1253
|
str(func_info['timeout']) +
|
|
1239
1254
|
' seconds'
|
|
1240
1255
|
).encode('utf-8')
|
|
1241
|
-
await send(self.
|
|
1256
|
+
await send(self.timeout_response_dict)
|
|
1242
1257
|
|
|
1243
1258
|
except asyncio.CancelledError:
|
|
1244
1259
|
self.logger.exception(
|
|
@@ -1249,8 +1264,8 @@ class Application(object):
|
|
|
1249
1264
|
'function_name': func_name.decode('utf-8'),
|
|
1250
1265
|
},
|
|
1251
1266
|
)
|
|
1252
|
-
body = b'
|
|
1253
|
-
await send(self.
|
|
1267
|
+
body = b'CancelledError: Function call was cancelled'
|
|
1268
|
+
await send(self.cancel_response_dict)
|
|
1254
1269
|
|
|
1255
1270
|
except Exception as e:
|
|
1256
1271
|
self.logger.exception(
|
|
@@ -1262,7 +1277,12 @@ class Application(object):
|
|
|
1262
1277
|
'exception_type': type(e).__name__,
|
|
1263
1278
|
},
|
|
1264
1279
|
)
|
|
1265
|
-
|
|
1280
|
+
msg = traceback.format_exc().strip().split(' File ')[-1]
|
|
1281
|
+
if msg.startswith('"/tmp/ipykernel_'):
|
|
1282
|
+
msg = 'Line ' + msg.split(', line ')[-1]
|
|
1283
|
+
else:
|
|
1284
|
+
msg = 'File ' + msg
|
|
1285
|
+
body = msg.encode('utf-8')
|
|
1266
1286
|
await send(self.error_response_dict)
|
|
1267
1287
|
|
|
1268
1288
|
finally:
|
|
@@ -15,7 +15,7 @@ from .utils import get_workspace_manager
|
|
|
15
15
|
|
|
16
16
|
class UseWorkspaceHandler(SQLHandler):
|
|
17
17
|
"""
|
|
18
|
-
USE WORKSPACE workspace [ with_database ];
|
|
18
|
+
USE WORKSPACE workspace [ in_group ] [ with_database ];
|
|
19
19
|
|
|
20
20
|
# Workspace
|
|
21
21
|
workspace = { workspace_id | workspace_name | current_workspace }
|
|
@@ -29,6 +29,15 @@ class UseWorkspaceHandler(SQLHandler):
|
|
|
29
29
|
# Current workspace
|
|
30
30
|
current_workspace = @@CURRENT
|
|
31
31
|
|
|
32
|
+
# Workspace group specification
|
|
33
|
+
in_group = IN GROUP { group_id | group_name }
|
|
34
|
+
|
|
35
|
+
# ID of workspace group
|
|
36
|
+
group_id = ID '<group-id>'
|
|
37
|
+
|
|
38
|
+
# Name of workspace group
|
|
39
|
+
group_name = '<group-name>'
|
|
40
|
+
|
|
32
41
|
# Name of database
|
|
33
42
|
with_database = WITH DATABASE 'database-name'
|
|
34
43
|
|
|
@@ -38,13 +47,18 @@ class UseWorkspaceHandler(SQLHandler):
|
|
|
38
47
|
|
|
39
48
|
Arguments
|
|
40
49
|
---------
|
|
41
|
-
* ``<workspace-id>``: The ID of the workspace to
|
|
42
|
-
* ``<workspace-name>``: The name of the workspace to
|
|
50
|
+
* ``<workspace-id>``: The ID of the workspace to use.
|
|
51
|
+
* ``<workspace-name>``: The name of the workspace to use.
|
|
52
|
+
* ``<group-id>``: The ID of the workspace group to search in.
|
|
53
|
+
* ``<group-name>``: The name of the workspace group to search in.
|
|
43
54
|
|
|
44
55
|
Remarks
|
|
45
56
|
-------
|
|
46
57
|
* If you want to specify a database in the current workspace,
|
|
47
58
|
the workspace name can be specified as ``@@CURRENT``.
|
|
59
|
+
* Use the ``IN GROUP`` clause to specify the ID or name of the workspace
|
|
60
|
+
group where the workspace should be found. If not specified, the current
|
|
61
|
+
workspace group will be used.
|
|
48
62
|
* Specify the ``WITH DATABASE`` clause to select a default
|
|
49
63
|
database for the session.
|
|
50
64
|
* This command only works in a notebook session in the
|
|
@@ -57,23 +71,69 @@ class UseWorkspaceHandler(SQLHandler):
|
|
|
57
71
|
|
|
58
72
|
USE WORKSPACE 'examplews' WITH DATABASE 'dbname';
|
|
59
73
|
|
|
74
|
+
The following command sets the workspace to ``examplews`` from a specific
|
|
75
|
+
workspace group::
|
|
76
|
+
|
|
77
|
+
USE WORKSPACE 'examplews' IN GROUP 'my-workspace-group';
|
|
78
|
+
|
|
60
79
|
"""
|
|
61
80
|
def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
|
|
62
81
|
from singlestoredb.notebook import portal
|
|
82
|
+
|
|
83
|
+
# Handle current workspace case
|
|
63
84
|
if params['workspace'].get('current_workspace'):
|
|
64
85
|
if params.get('with_database'):
|
|
65
86
|
portal.default_database = params['with_database']
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
87
|
+
return None
|
|
88
|
+
|
|
89
|
+
# Get workspace name or ID
|
|
90
|
+
workspace_name = params['workspace'].get('workspace_name')
|
|
91
|
+
workspace_id = params['workspace'].get('workspace_id')
|
|
92
|
+
|
|
93
|
+
# If IN GROUP is specified, look up workspace in that group
|
|
94
|
+
if params.get('in_group'):
|
|
95
|
+
workspace_group = get_workspace_group(params)
|
|
96
|
+
|
|
97
|
+
if workspace_name:
|
|
98
|
+
workspace = workspace_group.workspaces[workspace_name]
|
|
99
|
+
elif workspace_id:
|
|
100
|
+
# Find workspace by ID in the specified group
|
|
101
|
+
workspace = next(
|
|
102
|
+
(w for w in workspace_group.workspaces if w.id == workspace_id),
|
|
103
|
+
None,
|
|
104
|
+
)
|
|
105
|
+
if workspace is None:
|
|
106
|
+
raise KeyError(f'no workspace found with ID: {workspace_id}')
|
|
107
|
+
|
|
108
|
+
workspace_id = workspace.id
|
|
109
|
+
|
|
110
|
+
# Set workspace and database
|
|
111
|
+
if params.get('with_database'):
|
|
112
|
+
if params.get('in_group'):
|
|
113
|
+
# Use 3-element tuple: (workspace_group_id, workspace_name_or_id,
|
|
114
|
+
# database)
|
|
115
|
+
portal.connection = ( # type: ignore[assignment]
|
|
116
|
+
workspace_group.id,
|
|
117
|
+
workspace_name or workspace_id,
|
|
118
|
+
params['with_database'],
|
|
119
|
+
)
|
|
70
120
|
else:
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
121
|
+
# Use 2-element tuple: (workspace_name_or_id, database)
|
|
122
|
+
portal.connection = (
|
|
123
|
+
workspace_name or workspace_id,
|
|
124
|
+
params['with_database'],
|
|
125
|
+
)
|
|
75
126
|
else:
|
|
76
|
-
|
|
127
|
+
if params.get('in_group'):
|
|
128
|
+
# Use 2-element tuple: (workspace_group_id, workspace_name_or_id)
|
|
129
|
+
portal.workspace = ( # type: ignore[assignment]
|
|
130
|
+
workspace_group.id,
|
|
131
|
+
workspace_name or workspace_id,
|
|
132
|
+
)
|
|
133
|
+
else:
|
|
134
|
+
# Use string: workspace_name_or_id
|
|
135
|
+
portal.workspace = workspace_name or workspace_id
|
|
136
|
+
|
|
77
137
|
return None
|
|
78
138
|
|
|
79
139
|
|
|
@@ -10,6 +10,7 @@ from typing import Dict
|
|
|
10
10
|
from typing import List
|
|
11
11
|
from typing import Optional
|
|
12
12
|
from typing import Tuple
|
|
13
|
+
from typing import Union
|
|
13
14
|
|
|
14
15
|
from . import _objects as obj
|
|
15
16
|
from ..management import workspace as mgr
|
|
@@ -167,15 +168,32 @@ class Portal(object):
|
|
|
167
168
|
return obj.workspace
|
|
168
169
|
|
|
169
170
|
@workspace.setter
|
|
170
|
-
def workspace(self,
|
|
171
|
+
def workspace(self, workspace_spec: Union[str, Tuple[str, str]]) -> None:
|
|
171
172
|
"""Set workspace."""
|
|
172
|
-
if
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
173
|
+
if isinstance(workspace_spec, tuple):
|
|
174
|
+
# 2-element tuple: (workspace_group_id, workspace_name_or_id)
|
|
175
|
+
workspace_group_id, name_or_id = workspace_spec
|
|
176
|
+
uuid_pattern = (
|
|
177
|
+
r'[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}'
|
|
178
|
+
)
|
|
179
|
+
if re.match(uuid_pattern, name_or_id, flags=re.I):
|
|
180
|
+
w = mgr.get_workspace(name_or_id)
|
|
181
|
+
else:
|
|
182
|
+
w = mgr.get_workspace_group(workspace_group_id).workspaces[
|
|
183
|
+
name_or_id
|
|
184
|
+
]
|
|
177
185
|
else:
|
|
178
|
-
|
|
186
|
+
# String: workspace_name_or_id (existing behavior)
|
|
187
|
+
name_or_id = workspace_spec
|
|
188
|
+
uuid_pattern = (
|
|
189
|
+
r'[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}'
|
|
190
|
+
)
|
|
191
|
+
if re.match(uuid_pattern, name_or_id, flags=re.I):
|
|
192
|
+
w = mgr.get_workspace(name_or_id)
|
|
193
|
+
else:
|
|
194
|
+
w = mgr.get_workspace_group(
|
|
195
|
+
self.workspace_group_id,
|
|
196
|
+
).workspaces[name_or_id]
|
|
179
197
|
|
|
180
198
|
if w.state and w.state.lower() not in ['active', 'resumed']:
|
|
181
199
|
raise RuntimeError('workspace is not active')
|
|
@@ -196,16 +214,37 @@ class Portal(object):
|
|
|
196
214
|
return self.workspace, self.default_database
|
|
197
215
|
|
|
198
216
|
@connection.setter
|
|
199
|
-
def connection(
|
|
217
|
+
def connection(
|
|
218
|
+
self,
|
|
219
|
+
connection_spec: Union[Tuple[str, str], Tuple[str, str, str]],
|
|
220
|
+
) -> None:
|
|
200
221
|
"""Set workspace and default database name."""
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
name_or_id,
|
|
205
|
-
|
|
206
|
-
|
|
222
|
+
if len(connection_spec) == 3:
|
|
223
|
+
# 3-element tuple: (workspace_group_id, workspace_name_or_id,
|
|
224
|
+
# default_database)
|
|
225
|
+
workspace_group_id, name_or_id, default_database = connection_spec
|
|
226
|
+
uuid_pattern = (
|
|
227
|
+
r'[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}'
|
|
228
|
+
)
|
|
229
|
+
if re.match(uuid_pattern, name_or_id, flags=re.I):
|
|
230
|
+
w = mgr.get_workspace(name_or_id)
|
|
231
|
+
else:
|
|
232
|
+
w = mgr.get_workspace_group(workspace_group_id).workspaces[
|
|
233
|
+
name_or_id
|
|
234
|
+
]
|
|
207
235
|
else:
|
|
208
|
-
|
|
236
|
+
# 2-element tuple: (workspace_name_or_id, default_database)
|
|
237
|
+
# existing behavior
|
|
238
|
+
name_or_id, default_database = connection_spec
|
|
239
|
+
uuid_pattern = (
|
|
240
|
+
r'[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}'
|
|
241
|
+
)
|
|
242
|
+
if re.match(uuid_pattern, name_or_id, flags=re.I):
|
|
243
|
+
w = mgr.get_workspace(name_or_id)
|
|
244
|
+
else:
|
|
245
|
+
w = mgr.get_workspace_group(
|
|
246
|
+
self.workspace_group_id,
|
|
247
|
+
).workspaces[name_or_id]
|
|
209
248
|
|
|
210
249
|
if w.state and w.state.lower() not in ['active', 'resumed']:
|
|
211
250
|
raise RuntimeError('workspace is not active')
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/docstring/tests/test_numpydoc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/constants/EXTENDED_TYPE.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/constants/SERVER_STATUS.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{singlestoredb-1.15.4 → singlestoredb-1.15.6}/singlestoredb/mysql/tests/thirdparty/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|