singlestoredb 1.12.0__tar.gz → 1.12.2__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.

Files changed (155) hide show
  1. {singlestoredb-1.12.0/singlestoredb.egg-info → singlestoredb-1.12.2}/PKG-INFO +1 -1
  2. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/setup.cfg +1 -1
  3. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/__init__.py +1 -1
  4. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/fusion/handlers/utils.py +41 -27
  5. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/management/files.py +8 -8
  6. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/management/workspace.py +5 -6
  7. singlestoredb-1.12.2/singlestoredb/tests/test_fusion.py +1524 -0
  8. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_management.py +50 -2
  9. {singlestoredb-1.12.0 → singlestoredb-1.12.2/singlestoredb.egg-info}/PKG-INFO +1 -1
  10. singlestoredb-1.12.0/singlestoredb/tests/test_fusion.py +0 -716
  11. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/LICENSE +0 -0
  12. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/README.md +0 -0
  13. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/accel.c +0 -0
  14. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/setup.py +0 -0
  15. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/ai/__init__.py +0 -0
  16. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/ai/embeddings.py +0 -0
  17. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/alchemy/__init__.py +0 -0
  18. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/apps/__init__.py +0 -0
  19. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/apps/_cloud_functions.py +0 -0
  20. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/apps/_config.py +0 -0
  21. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/apps/_connection_info.py +0 -0
  22. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/apps/_dashboards.py +0 -0
  23. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/apps/_process.py +0 -0
  24. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/apps/_stdout_supress.py +0 -0
  25. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/apps/_uvicorn_util.py +0 -0
  26. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/auth.py +0 -0
  27. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/config.py +0 -0
  28. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/connection.py +0 -0
  29. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/converters.py +0 -0
  30. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/exceptions.py +0 -0
  31. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/functions/__init__.py +0 -0
  32. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/functions/decorator.py +0 -0
  33. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/functions/dtypes.py +0 -0
  34. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/functions/ext/__init__.py +0 -0
  35. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/functions/ext/arrow.py +0 -0
  36. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/functions/ext/asgi.py +0 -0
  37. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/functions/ext/json.py +0 -0
  38. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/functions/ext/mmap.py +0 -0
  39. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/functions/ext/rowdat_1.py +0 -0
  40. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/functions/ext/utils.py +0 -0
  41. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/functions/signature.py +0 -0
  42. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/fusion/__init__.py +0 -0
  43. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/fusion/graphql.py +0 -0
  44. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/fusion/handler.py +0 -0
  45. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/fusion/handlers/__init__.py +0 -0
  46. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/fusion/handlers/export.py +0 -0
  47. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/fusion/handlers/files.py +0 -0
  48. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/fusion/handlers/job.py +0 -0
  49. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/fusion/handlers/models.py +0 -0
  50. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/fusion/handlers/stage.py +0 -0
  51. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/fusion/handlers/workspace.py +0 -0
  52. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/fusion/registry.py +0 -0
  53. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/fusion/result.py +0 -0
  54. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/http/__init__.py +0 -0
  55. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/http/connection.py +0 -0
  56. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/magics/__init__.py +0 -0
  57. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/magics/run_personal.py +0 -0
  58. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/magics/run_shared.py +0 -0
  59. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/management/__init__.py +0 -0
  60. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/management/billing_usage.py +0 -0
  61. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/management/cluster.py +0 -0
  62. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/management/export.py +0 -0
  63. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/management/job.py +0 -0
  64. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/management/manager.py +0 -0
  65. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/management/organization.py +0 -0
  66. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/management/region.py +0 -0
  67. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/management/utils.py +0 -0
  68. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/__init__.py +0 -0
  69. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/_auth.py +0 -0
  70. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/charset.py +0 -0
  71. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/connection.py +0 -0
  72. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/constants/CLIENT.py +0 -0
  73. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/constants/COMMAND.py +0 -0
  74. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/constants/CR.py +0 -0
  75. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/constants/ER.py +0 -0
  76. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/constants/EXTENDED_TYPE.py +0 -0
  77. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/constants/FIELD_TYPE.py +0 -0
  78. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/constants/FLAG.py +0 -0
  79. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/constants/SERVER_STATUS.py +0 -0
  80. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/constants/VECTOR_TYPE.py +0 -0
  81. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/constants/__init__.py +0 -0
  82. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/converters.py +0 -0
  83. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/cursors.py +0 -0
  84. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/err.py +0 -0
  85. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/optionfile.py +0 -0
  86. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/protocol.py +0 -0
  87. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/__init__.py +0 -0
  88. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/base.py +0 -0
  89. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/conftest.py +0 -0
  90. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/test_DictCursor.py +0 -0
  91. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/test_SSCursor.py +0 -0
  92. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/test_basic.py +0 -0
  93. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/test_connection.py +0 -0
  94. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/test_converters.py +0 -0
  95. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/test_cursor.py +0 -0
  96. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/test_err.py +0 -0
  97. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/test_issues.py +0 -0
  98. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/test_load_local.py +0 -0
  99. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/test_nextset.py +0 -0
  100. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/test_optionfile.py +0 -0
  101. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/thirdparty/__init__.py +0 -0
  102. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/__init__.py +0 -0
  103. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/capabilities.py +0 -0
  104. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/dbapi20.py +0 -0
  105. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_capabilities.py +0 -0
  106. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_dbapi20.py +0 -0
  107. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py +0 -0
  108. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/mysql/times.py +0 -0
  109. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/notebook/__init__.py +0 -0
  110. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/notebook/_objects.py +0 -0
  111. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/notebook/_portal.py +0 -0
  112. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/py.typed +0 -0
  113. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/pytest.py +0 -0
  114. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/server/__init__.py +0 -0
  115. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/server/docker.py +0 -0
  116. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/server/free_tier.py +0 -0
  117. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/__init__.py +0 -0
  118. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/empty.sql +0 -0
  119. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/ext_funcs/__init__.py +0 -0
  120. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/local_infile.csv +0 -0
  121. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test.ipynb +0 -0
  122. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test.sql +0 -0
  123. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test2.ipynb +0 -0
  124. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test2.sql +0 -0
  125. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_basics.py +0 -0
  126. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_config.py +0 -0
  127. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_connection.py +0 -0
  128. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_dbapi.py +0 -0
  129. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_exceptions.py +0 -0
  130. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_ext_func.py +0 -0
  131. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_ext_func_data.py +0 -0
  132. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_http.py +0 -0
  133. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_plugin.py +0 -0
  134. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_results.py +0 -0
  135. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_types.py +0 -0
  136. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_udf.py +0 -0
  137. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/test_xdict.py +0 -0
  138. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/tests/utils.py +0 -0
  139. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/types.py +0 -0
  140. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/utils/__init__.py +0 -0
  141. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/utils/config.py +0 -0
  142. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/utils/convert_rows.py +0 -0
  143. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/utils/debug.py +0 -0
  144. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/utils/dtypes.py +0 -0
  145. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/utils/events.py +0 -0
  146. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/utils/mogrify.py +0 -0
  147. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/utils/results.py +0 -0
  148. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb/utils/xdict.py +0 -0
  149. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb.egg-info/SOURCES.txt +0 -0
  150. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb.egg-info/dependency_links.txt +0 -0
  151. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb.egg-info/entry_points.txt +0 -0
  152. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb.egg-info/requires.txt +0 -0
  153. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/singlestoredb.egg-info/top_level.txt +0 -0
  154. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/sqlx/__init__.py +0 -0
  155. {singlestoredb-1.12.0 → singlestoredb-1.12.2}/sqlx/magic.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: singlestoredb
3
- Version: 1.12.0
3
+ Version: 1.12.2
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
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = singlestoredb
3
- version = 1.12.0
3
+ version = 1.12.2
4
4
  description = Interface to the SingleStoreDB database and workspace management APIs
5
5
  long_description = file: README.md
6
6
  long_description_content_type = text/markdown
@@ -13,7 +13,7 @@ Examples
13
13
 
14
14
  """
15
15
 
16
- __version__ = '1.12.0'
16
+ __version__ = '1.12.2'
17
17
 
18
18
  from typing import Any
19
19
 
@@ -7,13 +7,11 @@ from typing import Optional
7
7
  from typing import Union
8
8
 
9
9
  from ...exceptions import ManagementError
10
+ from ...management import files as mgmt_files
10
11
  from ...management import manage_workspaces
11
12
  from ...management.files import FilesManager
12
13
  from ...management.files import FileSpace
13
14
  from ...management.files import manage_files
14
- from ...management.files import MODELS_SPACE
15
- from ...management.files import PERSONAL_SPACE
16
- from ...management.files import SHARED_SPACE
17
15
  from ...management.workspace import StarterWorkspace
18
16
  from ...management.workspace import Workspace
19
17
  from ...management.workspace import WorkspaceGroup
@@ -190,6 +188,10 @@ def get_deployment(
190
188
  * params['group']['deployment_id']
191
189
  * params['in_deployment']['deployment_name']
192
190
  * params['in_deployment']['deployment_id']
191
+ * params['in']['in_group']['deployment_name']
192
+ * params['in']['in_group']['deployment_id']
193
+ * params['in']['in_deployment']['deployment_name']
194
+ * params['in']['in_deployment']['deployment_id']
193
195
 
194
196
  Or, from the SINGLESTOREDB_WORKSPACE_GROUP
195
197
  or SINGLESTOREDB_CLUSTER environment variables.
@@ -197,55 +199,65 @@ def get_deployment(
197
199
  """
198
200
  manager = get_workspace_manager()
199
201
 
202
+ #
203
+ # Search for deployment by name
204
+ #
200
205
  deployment_name = params.get('deployment_name') or \
201
206
  (params.get('in_deployment') or {}).get('deployment_name') or \
202
- (params.get('group') or {}).get('deployment_name')
207
+ (params.get('group') or {}).get('deployment_name') or \
208
+ ((params.get('in') or {}).get('in_group') or {}).get('deployment_name') or \
209
+ ((params.get('in') or {}).get('in_deployment') or {}).get('deployment_name')
210
+
203
211
  if deployment_name:
212
+ # Standard workspace group
204
213
  workspace_groups = [
205
214
  x for x in manager.workspace_groups
206
215
  if x.name == deployment_name
207
216
  ]
208
217
 
209
- starter_workspaces = []
210
- if not workspace_groups:
211
- filtered_starter_workspaces = [
212
- x for x in manager.starter_workspaces
213
- if x.name == deployment_name
214
- ]
215
-
216
- if not filtered_starter_workspaces:
217
- raise KeyError(
218
- f'no deployment found with name: {deployment_name}',
219
- )
220
-
221
- starter_workspaces = filtered_starter_workspaces
218
+ if len(workspace_groups) == 1:
219
+ return workspace_groups[0]
222
220
 
223
- if len(workspace_groups) > 1:
221
+ elif len(workspace_groups) > 1:
224
222
  ids = ', '.join(x.id for x in workspace_groups)
225
223
  raise ValueError(
226
224
  f'more than one workspace group with given name was found: {ids}',
227
225
  )
228
226
 
229
- if len(starter_workspaces) > 1:
227
+ # Starter workspace
228
+ starter_workspaces = [
229
+ x for x in manager.starter_workspaces
230
+ if x.name == deployment_name
231
+ ]
232
+
233
+ if len(starter_workspaces) == 1:
234
+ return starter_workspaces[0]
235
+
236
+ elif len(starter_workspaces) > 1:
230
237
  ids = ', '.join(x.id for x in starter_workspaces)
231
238
  raise ValueError(
232
239
  f'more than one starter workspace with given name was found: {ids}',
233
240
  )
234
241
 
235
- if workspace_groups:
236
- return workspace_groups[0]
237
- else:
238
- return starter_workspaces[0]
242
+ raise KeyError(f'no deployment found with name: {deployment_name}')
239
243
 
244
+ #
245
+ # Search for deployment by ID
246
+ #
240
247
  deployment_id = params.get('deployment_id') or \
241
248
  (params.get('in_deployment') or {}).get('deployment_id') or \
242
- (params.get('group') or {}).get('deployment_id')
249
+ (params.get('group') or {}).get('deployment_id') or \
250
+ ((params.get('in') or {}).get('in_group') or {}).get('deployment_id') or \
251
+ ((params.get('in') or {}).get('in_deployment') or {}).get('deployment_id')
252
+
243
253
  if deployment_id:
244
254
  try:
255
+ # Standard workspace group
245
256
  return manager.get_workspace_group(deployment_id)
246
257
  except ManagementError as exc:
247
258
  if exc.errno == 404:
248
259
  try:
260
+ # Starter workspace
249
261
  return manager.get_starter_workspace(deployment_id)
250
262
  except ManagementError as exc:
251
263
  if exc.errno == 404:
@@ -254,6 +266,7 @@ def get_deployment(
254
266
  else:
255
267
  raise
256
268
 
269
+ # Use workspace group from environment
257
270
  if os.environ.get('SINGLESTOREDB_WORKSPACE_GROUP'):
258
271
  try:
259
272
  return manager.get_workspace_group(
@@ -267,6 +280,7 @@ def get_deployment(
267
280
  )
268
281
  raise
269
282
 
283
+ # Use cluster from environment
270
284
  if os.environ.get('SINGLESTOREDB_CLUSTER'):
271
285
  try:
272
286
  return manager.get_starter_workspace(
@@ -298,11 +312,11 @@ def get_file_space(params: Dict[str, Any]) -> FileSpace:
298
312
  if file_location:
299
313
  file_location_lower_case = file_location.lower()
300
314
 
301
- if file_location_lower_case == PERSONAL_SPACE:
315
+ if file_location_lower_case == mgmt_files.PERSONAL_SPACE:
302
316
  return manager.personal_space
303
- elif file_location_lower_case == SHARED_SPACE:
317
+ elif file_location_lower_case == mgmt_files.SHARED_SPACE:
304
318
  return manager.shared_space
305
- elif file_location_lower_case == MODELS_SPACE:
319
+ elif file_location_lower_case == mgmt_files.MODELS_SPACE:
306
320
  return manager.models_space
307
321
  else:
308
322
  raise ValueError(f'invalid file location: {file_location}')
@@ -10,11 +10,9 @@ import re
10
10
  from abc import ABC
11
11
  from abc import abstractmethod
12
12
  from typing import Any
13
- from typing import BinaryIO
14
13
  from typing import Dict
15
14
  from typing import List
16
15
  from typing import Optional
17
- from typing import TextIO
18
16
  from typing import Union
19
17
 
20
18
  from .. import config
@@ -350,6 +348,7 @@ class FilesObjectBytesReader(io.BytesIO):
350
348
 
351
349
 
352
350
  class FileLocation(ABC):
351
+
353
352
  @abstractmethod
354
353
  def open(
355
354
  self,
@@ -362,7 +361,7 @@ class FileLocation(ABC):
362
361
  @abstractmethod
363
362
  def upload_file(
364
363
  self,
365
- local_path: Union[PathLike, TextIO, BinaryIO],
364
+ local_path: Union[PathLike, io.IOBase],
366
365
  path: PathLike,
367
366
  *,
368
367
  overwrite: bool = False,
@@ -385,7 +384,7 @@ class FileLocation(ABC):
385
384
  @abstractmethod
386
385
  def _upload(
387
386
  self,
388
- content: Union[str, bytes, TextIO, BinaryIO],
387
+ content: Union[str, bytes, io.IOBase],
389
388
  path: PathLike,
390
389
  *,
391
390
  overwrite: bool = False,
@@ -628,7 +627,7 @@ class FileSpace(FileLocation):
628
627
 
629
628
  def upload_file(
630
629
  self,
631
- local_path: Union[PathLike, TextIO, BinaryIO],
630
+ local_path: Union[PathLike, io.IOBase],
632
631
  path: PathLike,
633
632
  *,
634
633
  overwrite: bool = False,
@@ -646,7 +645,7 @@ class FileSpace(FileLocation):
646
645
  Should the ``path`` be overwritten if it exists already?
647
646
 
648
647
  """
649
- if isinstance(local_path, (TextIO, BinaryIO)):
648
+ if isinstance(local_path, io.IOBase):
650
649
  pass
651
650
  elif not os.path.isfile(local_path):
652
651
  raise IsADirectoryError(f'local path is not a file: {local_path}')
@@ -657,8 +656,9 @@ class FileSpace(FileLocation):
657
656
 
658
657
  self.remove(path)
659
658
 
660
- if isinstance(local_path, (TextIO, BinaryIO)):
659
+ if isinstance(local_path, io.IOBase):
661
660
  return self._upload(local_path, path, overwrite=overwrite)
661
+
662
662
  return self._upload(open(local_path, 'rb'), path, overwrite=overwrite)
663
663
 
664
664
  def upload_folder(
@@ -727,7 +727,7 @@ class FileSpace(FileLocation):
727
727
 
728
728
  def _upload(
729
729
  self,
730
- content: Union[str, bytes, TextIO, BinaryIO],
730
+ content: Union[str, bytes, io.IOBase],
731
731
  path: PathLike,
732
732
  *,
733
733
  overwrite: bool = False,
@@ -10,11 +10,9 @@ import re
10
10
  import time
11
11
  from collections.abc import Mapping
12
12
  from typing import Any
13
- from typing import BinaryIO
14
13
  from typing import Dict
15
14
  from typing import List
16
15
  from typing import Optional
17
- from typing import TextIO
18
16
  from typing import Union
19
17
 
20
18
  from .. import config
@@ -165,7 +163,7 @@ class Stage(FileLocation):
165
163
 
166
164
  def upload_file(
167
165
  self,
168
- local_path: Union[PathLike, TextIO, BinaryIO],
166
+ local_path: Union[PathLike, io.IOBase],
169
167
  stage_path: PathLike,
170
168
  *,
171
169
  overwrite: bool = False,
@@ -183,7 +181,7 @@ class Stage(FileLocation):
183
181
  Should the ``stage_path`` be overwritten if it exists already?
184
182
 
185
183
  """
186
- if isinstance(local_path, (TextIO, BinaryIO)):
184
+ if isinstance(local_path, io.IOBase):
187
185
  pass
188
186
  elif not os.path.isfile(local_path):
189
187
  raise IsADirectoryError(f'local path is not a file: {local_path}')
@@ -194,8 +192,9 @@ class Stage(FileLocation):
194
192
 
195
193
  self.remove(stage_path)
196
194
 
197
- if isinstance(local_path, (TextIO, BinaryIO)):
195
+ if isinstance(local_path, io.IOBase):
198
196
  return self._upload(local_path, stage_path, overwrite=overwrite)
197
+
199
198
  return self._upload(open(local_path, 'rb'), stage_path, overwrite=overwrite)
200
199
 
201
200
  def upload_folder(
@@ -258,7 +257,7 @@ class Stage(FileLocation):
258
257
 
259
258
  def _upload(
260
259
  self,
261
- content: Union[str, bytes, TextIO, BinaryIO],
260
+ content: Union[str, bytes, io.IOBase],
262
261
  stage_path: PathLike,
263
262
  *,
264
263
  overwrite: bool = False,