singlestoredb 1.9.0__tar.gz → 1.11.0__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 (151) hide show
  1. {singlestoredb-1.9.0/singlestoredb.egg-info → singlestoredb-1.11.0}/PKG-INFO +1 -1
  2. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/setup.cfg +1 -1
  3. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/__init__.py +1 -1
  4. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/fusion/handler.py +0 -7
  5. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/fusion/handlers/export.py +11 -7
  6. singlestoredb-1.11.0/singlestoredb/fusion/handlers/models.py +250 -0
  7. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/fusion/handlers/utils.py +5 -5
  8. singlestoredb-1.11.0/singlestoredb/magics/__init__.py +34 -0
  9. singlestoredb-1.11.0/singlestoredb/magics/run_personal.py +56 -0
  10. singlestoredb-1.11.0/singlestoredb/magics/run_shared.py +53 -0
  11. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/management/cluster.py +2 -1
  12. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/management/files.py +92 -28
  13. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/management/manager.py +3 -2
  14. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/management/workspace.py +3 -2
  15. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/connection.py +1 -0
  16. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/utils/events.py +16 -0
  17. {singlestoredb-1.9.0 → singlestoredb-1.11.0/singlestoredb.egg-info}/PKG-INFO +1 -1
  18. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb.egg-info/SOURCES.txt +4 -0
  19. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/LICENSE +0 -0
  20. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/README.md +0 -0
  21. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/accel.c +0 -0
  22. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/setup.py +0 -0
  23. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/ai/__init__.py +0 -0
  24. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/ai/embeddings.py +0 -0
  25. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/alchemy/__init__.py +0 -0
  26. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/apps/__init__.py +0 -0
  27. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/apps/_cloud_functions.py +0 -0
  28. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/apps/_config.py +0 -0
  29. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/apps/_connection_info.py +0 -0
  30. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/apps/_dashboards.py +0 -0
  31. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/apps/_process.py +0 -0
  32. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/apps/_stdout_supress.py +0 -0
  33. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/apps/_uvicorn_util.py +0 -0
  34. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/auth.py +0 -0
  35. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/config.py +0 -0
  36. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/connection.py +0 -0
  37. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/converters.py +0 -0
  38. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/exceptions.py +0 -0
  39. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/functions/__init__.py +0 -0
  40. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/functions/decorator.py +0 -0
  41. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/functions/dtypes.py +0 -0
  42. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/functions/ext/__init__.py +0 -0
  43. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/functions/ext/arrow.py +0 -0
  44. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/functions/ext/asgi.py +0 -0
  45. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/functions/ext/json.py +0 -0
  46. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/functions/ext/mmap.py +0 -0
  47. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/functions/ext/rowdat_1.py +0 -0
  48. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/functions/ext/utils.py +0 -0
  49. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/functions/signature.py +0 -0
  50. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/fusion/__init__.py +0 -0
  51. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/fusion/graphql.py +0 -0
  52. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/fusion/handlers/__init__.py +0 -0
  53. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/fusion/handlers/files.py +0 -0
  54. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/fusion/handlers/job.py +0 -0
  55. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/fusion/handlers/stage.py +0 -0
  56. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/fusion/handlers/workspace.py +0 -0
  57. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/fusion/registry.py +0 -0
  58. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/fusion/result.py +0 -0
  59. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/http/__init__.py +0 -0
  60. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/http/connection.py +0 -0
  61. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/management/__init__.py +0 -0
  62. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/management/billing_usage.py +0 -0
  63. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/management/export.py +0 -0
  64. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/management/job.py +0 -0
  65. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/management/organization.py +0 -0
  66. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/management/region.py +0 -0
  67. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/management/utils.py +0 -0
  68. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/__init__.py +0 -0
  69. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/_auth.py +0 -0
  70. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/charset.py +0 -0
  71. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/constants/CLIENT.py +0 -0
  72. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/constants/COMMAND.py +0 -0
  73. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/constants/CR.py +0 -0
  74. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/constants/ER.py +0 -0
  75. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/constants/EXTENDED_TYPE.py +0 -0
  76. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/constants/FIELD_TYPE.py +0 -0
  77. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/constants/FLAG.py +0 -0
  78. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/constants/SERVER_STATUS.py +0 -0
  79. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/constants/VECTOR_TYPE.py +0 -0
  80. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/constants/__init__.py +0 -0
  81. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/converters.py +0 -0
  82. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/cursors.py +0 -0
  83. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/err.py +0 -0
  84. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/optionfile.py +0 -0
  85. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/protocol.py +0 -0
  86. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/__init__.py +0 -0
  87. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/base.py +0 -0
  88. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/conftest.py +0 -0
  89. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/test_DictCursor.py +0 -0
  90. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/test_SSCursor.py +0 -0
  91. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/test_basic.py +0 -0
  92. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/test_connection.py +0 -0
  93. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/test_converters.py +0 -0
  94. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/test_cursor.py +0 -0
  95. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/test_err.py +0 -0
  96. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/test_issues.py +0 -0
  97. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/test_load_local.py +0 -0
  98. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/test_nextset.py +0 -0
  99. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/test_optionfile.py +0 -0
  100. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/thirdparty/__init__.py +0 -0
  101. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/__init__.py +0 -0
  102. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/capabilities.py +0 -0
  103. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/dbapi20.py +0 -0
  104. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_capabilities.py +0 -0
  105. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_dbapi20.py +0 -0
  106. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py +0 -0
  107. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/mysql/times.py +0 -0
  108. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/notebook/__init__.py +0 -0
  109. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/notebook/_objects.py +0 -0
  110. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/notebook/_portal.py +0 -0
  111. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/py.typed +0 -0
  112. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/pytest.py +0 -0
  113. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/__init__.py +0 -0
  114. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/empty.sql +0 -0
  115. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/ext_funcs/__init__.py +0 -0
  116. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/local_infile.csv +0 -0
  117. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test.ipynb +0 -0
  118. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test.sql +0 -0
  119. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test2.ipynb +0 -0
  120. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test2.sql +0 -0
  121. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_basics.py +0 -0
  122. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_config.py +0 -0
  123. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_connection.py +0 -0
  124. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_dbapi.py +0 -0
  125. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_exceptions.py +0 -0
  126. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_ext_func.py +0 -0
  127. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_ext_func_data.py +0 -0
  128. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_fusion.py +0 -0
  129. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_http.py +0 -0
  130. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_management.py +0 -0
  131. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_plugin.py +0 -0
  132. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_results.py +0 -0
  133. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_types.py +0 -0
  134. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_udf.py +0 -0
  135. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/test_xdict.py +0 -0
  136. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/tests/utils.py +0 -0
  137. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/types.py +0 -0
  138. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/utils/__init__.py +0 -0
  139. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/utils/config.py +0 -0
  140. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/utils/convert_rows.py +0 -0
  141. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/utils/debug.py +0 -0
  142. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/utils/dtypes.py +0 -0
  143. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/utils/mogrify.py +0 -0
  144. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/utils/results.py +0 -0
  145. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb/utils/xdict.py +0 -0
  146. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb.egg-info/dependency_links.txt +0 -0
  147. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb.egg-info/entry_points.txt +0 -0
  148. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb.egg-info/requires.txt +0 -0
  149. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/singlestoredb.egg-info/top_level.txt +0 -0
  150. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/sqlx/__init__.py +0 -0
  151. {singlestoredb-1.9.0 → singlestoredb-1.11.0}/sqlx/magic.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: singlestoredb
3
- Version: 1.9.0
3
+ Version: 1.11.0
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.9.0
3
+ version = 1.11.0
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.9.0'
16
+ __version__ = '1.11.0'
17
17
 
18
18
  from typing import Any
19
19
 
@@ -641,13 +641,6 @@ class SQLHandler(NodeVisitor):
641
641
  DummySQLResult
642
642
 
643
643
  """
644
- import warnings
645
- warnings.warn(
646
- 'Fusion SQL is currently a preview feature. '
647
- 'Run `SHOW FUSION COMMANDS` to see all commands.',
648
- RuntimeWarning,
649
- )
650
-
651
644
  type(self).compile()
652
645
  self._handled = set()
653
646
  try:
@@ -55,10 +55,10 @@ class CreateClusterIdentity(SQLHandler):
55
55
 
56
56
  CREATE CLUSTER IDENTITY
57
57
  CATALOG CONFIG '{
58
- "type": "GLUE",
58
+ "catalog_type": "GLUE",
59
59
  "table_format": "ICEBERG",
60
- "id": "13983498723498",
61
- "region": "us-east-1"
60
+ "catalog_id": "13983498723498",
61
+ "catalog_region": "us-east-1"
62
62
  }'
63
63
  LINK S3 CONFIG '{
64
64
  "region": "us-east-1",
@@ -78,6 +78,8 @@ class CreateClusterIdentity(SQLHandler):
78
78
  storage_config = json.loads(params['storage'].get('link_config', '{}') or '{}')
79
79
  storage_creds = json.loads(params['storage'].get('link_creds', '{}') or '{}')
80
80
 
81
+ storage_config['provider'] = 'S3'
82
+
81
83
  wsg = get_workspace_group({})
82
84
 
83
85
  if wsg._manager is None:
@@ -145,12 +147,12 @@ class CreateExport(SQLHandler):
145
147
  catalog and link configurations. The source table to export is
146
148
  named "customer_data"::
147
149
 
148
- START EXPORT FROM customer_data
150
+ START EXPORT FROM my_db.customer_data
149
151
  CATALOG CONFIG '{
150
- "type": "GLUE",
152
+ "catalog_type": "GLUE",
151
153
  "table_format": "ICEBERG",
152
- "id": "13983498723498",
153
- "region": "us-east-1"
154
+ "catalog_id": "13983498723498",
155
+ "catalog_region": "us-east-1"
154
156
  }'
155
157
  LINK S3 CONFIG '{
156
158
  "region": "us-east-1",
@@ -177,6 +179,8 @@ class CreateExport(SQLHandler):
177
179
  storage_config = json.loads(params['storage'].get('link_config', '{}') or '{}')
178
180
  storage_creds = json.loads(params['storage'].get('link_creds', '{}') or '{}')
179
181
 
182
+ storage_config['provider'] = 'S3'
183
+
180
184
  wsg = get_workspace_group({})
181
185
 
182
186
  if from_database is None:
@@ -0,0 +1,250 @@
1
+ #!/usr/bin/env python3
2
+ import os
3
+ from typing import Any
4
+ from typing import Dict
5
+ from typing import Optional
6
+
7
+ from ..handler import SQLHandler
8
+ from ..result import FusionSQLResult
9
+ from .files import ShowFilesHandler
10
+ from .utils import get_file_space
11
+
12
+
13
+ class ShowModelsHandler(ShowFilesHandler):
14
+ """
15
+ SHOW MODELS
16
+ [ at_path ] [ <like> ]
17
+ [ <order-by> ]
18
+ [ <limit> ] [ recursive ] [ extended ];
19
+
20
+ # File path to list
21
+ at_path = AT '<path>'
22
+
23
+ # Should the listing be recursive?
24
+ recursive = RECURSIVE
25
+
26
+ # Should extended attributes be shown?
27
+ extended = EXTENDED
28
+
29
+ Description
30
+ -----------
31
+ Displays the list of models in models space.
32
+
33
+ Arguments
34
+ ---------
35
+ * ``<path>``: A path in the models space.
36
+ * ``<pattern>``: A pattern similar to SQL LIKE clause.
37
+ Uses ``%`` as the wildcard character.
38
+
39
+ Remarks
40
+ -------
41
+ * Use the ``LIKE`` clause to specify a pattern and return only the
42
+ files that match the specified pattern.
43
+ * The ``LIMIT`` clause limits the number of results to the
44
+ specified number.
45
+ * Use the ``ORDER BY`` clause to sort the results by the specified
46
+ key. By default, the results are sorted in the ascending order.
47
+ * The ``AT PATH`` clause specifies the path in the models
48
+ space to list the files from.
49
+ * To return more information about the files, use the ``EXTENDED``
50
+ clause.
51
+
52
+ Examples
53
+ --------
54
+ The following command lists the models::
55
+
56
+ SHOW MODELS;
57
+
58
+ The following command lists the models with additional information::
59
+
60
+ SHOW MODELS EXTENDED;
61
+
62
+ See Also
63
+ --------
64
+ * ``UPLOAD MODEL model_name FROM path``
65
+ * ``DOWNLOAD MODEL model_name``
66
+
67
+
68
+ """ # noqa: E501
69
+
70
+ def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
71
+ params['file_location'] = 'MODELS'
72
+
73
+ return super().run(params)
74
+
75
+
76
+ ShowModelsHandler.register(overwrite=True)
77
+
78
+
79
+ class UploadModelHandler(SQLHandler):
80
+ """
81
+ UPLOAD MODEL model_name
82
+ FROM local_path [ overwrite ];
83
+
84
+ # Model Name
85
+ model_name = '<model-name>'
86
+
87
+ # Path to local file or directory
88
+ local_path = '<local-path>'
89
+
90
+ # Should an existing file be overwritten?
91
+ overwrite = OVERWRITE
92
+
93
+ Description
94
+ -----------
95
+ Uploads a file or folder to models space.
96
+
97
+ Arguments
98
+ ---------
99
+ * ``<model-name>``: Model name.
100
+ * ``<local-path>``: The path to the file or folder to upload in the local
101
+ directory.
102
+
103
+ Remarks
104
+ -------
105
+ * If the ``OVERWRITE`` clause is specified, any existing file at the
106
+ specified path in the models space is overwritten.
107
+
108
+ Examples
109
+ --------
110
+ The following command uploads a file to models space and overwrite any
111
+ existing files at the specified path::
112
+
113
+ UPLOAD MODEL model_name
114
+ FROM 'llama3/' OVERWRITE;
115
+
116
+ See Also
117
+ --------
118
+ * ``DOWNLOAD MODEL model_name``
119
+
120
+ """ # noqa: E501
121
+
122
+ def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
123
+ params['file_location'] = 'MODELS'
124
+
125
+ model_name = params['model_name']
126
+ local_path = params['local_path']
127
+
128
+ file_space = get_file_space(params)
129
+
130
+ if os.path.isdir(local_path):
131
+ file_space.upload_folder(
132
+ local_path=local_path,
133
+ path=os.path.join(model_name, ''),
134
+ overwrite=params['overwrite'],
135
+ )
136
+ else:
137
+ file_space.upload_file(
138
+ local_path=local_path,
139
+ path=os.path.join(model_name, local_path),
140
+ overwrite=params['overwrite'],
141
+ )
142
+
143
+ return None
144
+
145
+
146
+ UploadModelHandler.register(overwrite=True)
147
+
148
+
149
+ class DownloadModelHandler(SQLHandler):
150
+ """
151
+ DOWNLOAD MODEL model_name
152
+ [ local_path ]
153
+ [ overwrite ];
154
+
155
+ # Model Name
156
+ model_name = '<model-name>'
157
+
158
+ # Path to local directory
159
+ local_path = TO '<local-path>'
160
+
161
+ # Should an existing directory be overwritten?
162
+ overwrite = OVERWRITE
163
+
164
+ Description
165
+ -----------
166
+ Download a model from models space.
167
+
168
+ Arguments
169
+ ---------
170
+ * ``<model-name>``: Model name to download in models space.
171
+ * ``<local-path>``: Specifies the path in the local directory
172
+ where the model is downloaded.
173
+
174
+ Remarks
175
+ -------
176
+ * If the ``OVERWRITE`` clause is specified, any existing file or folder at
177
+ the download location is overwritten.
178
+ * If ``<local-path>`` is not specified, the model is downloaded to the current location.
179
+
180
+ Examples
181
+ --------
182
+ The following command displays the contents of the file on the
183
+ standard output::
184
+
185
+ DOWNLOAD MODEL llama3;
186
+
187
+ The following command downloads a model to a specific location and
188
+ overwrites any existing models folder with the name ``local_llama3`` on the local storage::
189
+
190
+ DOWNLOAD MODEL llama3
191
+ TO 'local_llama3' OVERWRITE;
192
+
193
+ See Also
194
+ --------
195
+ * ``UPLOAD MODEL model_name FROM local_path``
196
+
197
+ """ # noqa: E501
198
+
199
+ def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
200
+ params['file_location'] = 'MODELS'
201
+
202
+ file_space = get_file_space(params)
203
+
204
+ model_name = params['model_name']
205
+ file_space.download_folder(
206
+ path=os.path.join(model_name, ''),
207
+ local_path=params['local_path'] or model_name,
208
+ overwrite=params['overwrite'],
209
+ )
210
+
211
+ return None
212
+
213
+
214
+ DownloadModelHandler.register(overwrite=True)
215
+
216
+
217
+ class DropModelsHandler(SQLHandler):
218
+ """
219
+ DROP MODEL model_name;
220
+
221
+ # Model Name
222
+ model_name = '<model-name>'
223
+
224
+ Description
225
+ -----------
226
+ Deletes a model from models space.
227
+
228
+ Arguments
229
+ ---------
230
+ * ``<model-name>``: Model name to delete in models space.
231
+
232
+ Example
233
+ --------
234
+ The following commands deletes a model from a model space::
235
+
236
+ DROP MODEL llama3;
237
+
238
+ """ # noqa: E501
239
+
240
+ def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
241
+ params['file_location'] = 'MODELS'
242
+ path = os.path.join(params['model_name'], '')
243
+
244
+ file_space = get_file_space(params)
245
+ file_space.removedirs(path=path)
246
+
247
+ return None
248
+
249
+
250
+ DropModelsHandler.register(overwrite=True)
@@ -11,6 +11,7 @@ from ...management import manage_workspaces
11
11
  from ...management.files import FilesManager
12
12
  from ...management.files import FileSpace
13
13
  from ...management.files import manage_files
14
+ from ...management.files import MODELS_SPACE
14
15
  from ...management.files import PERSONAL_SPACE
15
16
  from ...management.files import SHARED_SPACE
16
17
  from ...management.workspace import StarterWorkspace
@@ -296,15 +297,14 @@ def get_file_space(params: Dict[str, Any]) -> FileSpace:
296
297
  file_location = params.get('file_location')
297
298
  if file_location:
298
299
  file_location_lower_case = file_location.lower()
299
- if (
300
- file_location_lower_case != PERSONAL_SPACE and
301
- file_location_lower_case != SHARED_SPACE
302
- ):
303
- raise ValueError(f'invalid file location: {file_location}')
304
300
 
305
301
  if file_location_lower_case == PERSONAL_SPACE:
306
302
  return manager.personal_space
307
303
  elif file_location_lower_case == SHARED_SPACE:
308
304
  return manager.shared_space
305
+ elif file_location_lower_case == MODELS_SPACE:
306
+ return manager.models_space
307
+ else:
308
+ raise ValueError(f'invalid file location: {file_location}')
309
309
 
310
310
  raise KeyError('no file space was specified')
@@ -0,0 +1,34 @@
1
+ from IPython.core.interactiveshell import InteractiveShell
2
+
3
+ from .run_personal import RunPersonalMagic
4
+ from .run_shared import RunSharedMagic
5
+
6
+ # In order to actually use these magics, we must register them with a
7
+ # running IPython.
8
+
9
+
10
+ def load_ipython_extension(ip: InteractiveShell) -> None:
11
+ """
12
+ Any module file that define a function named `load_ipython_extension`
13
+ can be loaded via `%load_ext module.path` or be configured to be
14
+ autoloaded by IPython at startup time.
15
+ """
16
+
17
+ # Load jupysql extension
18
+ # This is necessary for jupysql to initialize internal state
19
+ # required to render messages
20
+ assert ip.extension_manager is not None
21
+ result = ip.extension_manager.load_extension('sql')
22
+ if result == 'no load function':
23
+ raise RuntimeError('Could not load sql extension. Is jupysql installed?')
24
+
25
+ # Check if %run magic command is defined
26
+ if ip.find_line_magic('run') is None:
27
+ raise RuntimeError(
28
+ '%run magic command is not defined. '
29
+ 'Is it available in your IPython environment?',
30
+ )
31
+
32
+ # Register run_personal and run_shared
33
+ ip.register_magics(RunPersonalMagic(ip))
34
+ ip.register_magics(RunSharedMagic(ip))
@@ -0,0 +1,56 @@
1
+ import os
2
+ import tempfile
3
+ from typing import Any
4
+
5
+ from IPython.core.interactiveshell import InteractiveShell
6
+ from IPython.core.magic import line_magic
7
+ from IPython.core.magic import Magics
8
+ from IPython.core.magic import magics_class
9
+ from IPython.core.magic import needs_local_scope
10
+ from IPython.core.magic import no_var_expand
11
+ from jinja2 import Template
12
+
13
+
14
+ @magics_class
15
+ class RunPersonalMagic(Magics):
16
+ def __init__(self, shell: InteractiveShell):
17
+ Magics.__init__(self, shell=shell)
18
+
19
+ @no_var_expand
20
+ @needs_local_scope
21
+ @line_magic('run_personal')
22
+ def run_personal(self, line: str, local_ns: Any = None) -> Any:
23
+ """
24
+ Downloads a personal file using the %sql magic and then runs it using %run.
25
+
26
+ Examples::
27
+
28
+ # Line usage
29
+
30
+ %run_personal personal_file.ipynb
31
+
32
+ %run_personal {{ sample_notebook_name }}
33
+
34
+ """
35
+
36
+ template = Template(line.strip())
37
+ personal_file = template.render(local_ns)
38
+ if not personal_file:
39
+ raise ValueError('No personal file specified.')
40
+ if (personal_file.startswith("'") and personal_file.endswith("'")) or \
41
+ (personal_file.startswith('"') and personal_file.endswith('"')):
42
+ personal_file = personal_file[1:-1]
43
+ if not personal_file:
44
+ raise ValueError('No personal file specified.')
45
+
46
+ with tempfile.TemporaryDirectory() as temp_dir:
47
+ temp_file_path = os.path.join(temp_dir, personal_file)
48
+ sql_command = (
49
+ f"DOWNLOAD PERSONAL FILE '{personal_file}' "
50
+ f"TO '{temp_file_path}'"
51
+ )
52
+
53
+ # Execute the SQL command
54
+ self.shell.run_line_magic('sql', sql_command)
55
+ # Run the downloaded file
56
+ self.shell.run_line_magic('run', f'"{temp_file_path}"')
@@ -0,0 +1,53 @@
1
+ import os
2
+ import tempfile
3
+ from typing import Any
4
+
5
+ from IPython.core.interactiveshell import InteractiveShell
6
+ from IPython.core.magic import line_magic
7
+ from IPython.core.magic import Magics
8
+ from IPython.core.magic import magics_class
9
+ from IPython.core.magic import needs_local_scope
10
+ from IPython.core.magic import no_var_expand
11
+ from jinja2 import Template
12
+
13
+
14
+ @magics_class
15
+ class RunSharedMagic(Magics):
16
+ def __init__(self, shell: InteractiveShell):
17
+ Magics.__init__(self, shell=shell)
18
+
19
+ @no_var_expand
20
+ @needs_local_scope
21
+ @line_magic('run_shared')
22
+ def run_shared(self, line: str, local_ns: Any = None) -> Any:
23
+ """
24
+ Downloads a shared file using the %sql magic and then runs it using %run.
25
+
26
+ Examples::
27
+
28
+ # Line usage
29
+
30
+ %run_shared shared_file.ipynb
31
+
32
+ %run_shared {{ sample_notebook_name }}
33
+
34
+ """
35
+
36
+ template = Template(line.strip())
37
+ shared_file = template.render(local_ns)
38
+ if not shared_file:
39
+ raise ValueError('No shared file specified.')
40
+ if (shared_file.startswith("'") and shared_file.endswith("'")) or \
41
+ (shared_file.startswith('"') and shared_file.endswith('"')):
42
+ shared_file = shared_file[1:-1]
43
+ if not shared_file:
44
+ raise ValueError('No personal file specified.')
45
+
46
+ with tempfile.TemporaryDirectory() as temp_dir:
47
+ temp_file_path = os.path.join(temp_dir, shared_file)
48
+ sql_command = f"DOWNLOAD SHARED FILE '{shared_file}' TO '{temp_file_path}'"
49
+
50
+ # Execute the SQL command
51
+ self.shell.run_line_magic('sql', sql_command)
52
+ # Run the downloaded file
53
+ self.shell.run_line_magic('run', f'"{temp_file_path}"')
@@ -333,7 +333,8 @@ class ClusterManager(Manager):
333
333
  default_version = 'v0beta'
334
334
 
335
335
  #: Base URL if none is specified.
336
- default_base_url = config.get_option('management.base_url')
336
+ default_base_url = config.get_option('management.base_url') \
337
+ or 'https://api.singlestore.com'
337
338
 
338
339
  #: Object type
339
340
  obj_type = 'cluster'