You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by hu...@apache.org on 2021/05/14 17:07:22 UTC

[superset] branch hugh/add-parameters-api created (now 182eb3c)

This is an automated email from the ASF dual-hosted git repository.

hugh pushed a change to branch hugh/add-parameters-api
in repository https://gitbox.apache.org/repos/asf/superset.git.


      at 182eb3c  save types and update api

This branch includes the following new commits:

     new 182eb3c  save types and update api

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[superset] 01/01: save types and update api

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hugh pushed a commit to branch hugh/add-parameters-api
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 182eb3cf1d60adfd0e41814b1ceda0187b1c4dd2
Author: hughhhh <hu...@gmail.com>
AuthorDate: Fri May 14 13:04:06 2021 -0400

    save types and update api
---
 .../src/views/CRUD/data/database/types.ts              | 11 +++++++++++
 superset/databases/api.py                              |  1 +
 superset/models/core.py                                | 18 +++++++++++++++---
 3 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/superset-frontend/src/views/CRUD/data/database/types.ts b/superset-frontend/src/views/CRUD/data/database/types.ts
index d0e6f51..04a5fd9 100644
--- a/superset-frontend/src/views/CRUD/data/database/types.ts
+++ b/superset-frontend/src/views/CRUD/data/database/types.ts
@@ -21,6 +21,16 @@ type DatabaseUser = {
   last_name: string;
 };
 
+type DatabaseParameters = {
+  database: string;
+  engine: string;
+  host: string;
+  password?: string;
+  port: number;
+  query: Object;
+  username: string;
+};
+
 export type DatabaseObject = {
   // Connection + general
   id?: number;
@@ -30,6 +40,7 @@ export type DatabaseObject = {
   created_by?: null | DatabaseUser;
   changed_on_delta_humanized?: string;
   changed_on?: string;
+  parameters?: DatabaseParameters;
 
   // Performance
   cache_timeout?: string;
diff --git a/superset/databases/api.py b/superset/databases/api.py
index 5b795a8..30ece99 100644
--- a/superset/databases/api.py
+++ b/superset/databases/api.py
@@ -107,6 +107,7 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
         "allow_ctas",
         "allow_cvas",
         "allow_dml",
+        "parameters",
         "force_ctas_schema",
         "allow_multi_schema_metadata_fetch",
         "impersonate_user",
diff --git a/superset/models/core.py b/superset/models/core.py
index 5424728..c9efd79 100755
--- a/superset/models/core.py
+++ b/superset/models/core.py
@@ -54,7 +54,7 @@ from sqlalchemy.schema import UniqueConstraint
 from sqlalchemy.sql import expression, Select
 
 from superset import app, db_engine_specs, is_feature_enabled
-from superset.db_engine_specs.base import TimeGrain
+from superset.db_engine_specs.base import BasicParametersMixin, TimeGrain
 from superset.extensions import cache_manager, encrypted_field_factory, security_manager
 from superset.models.helpers import AuditMixinNullable, ImportExportMixin
 from superset.models.tags import FavStarUpdater
@@ -212,6 +212,7 @@ class Database(
             "allows_cost_estimate": self.allows_cost_estimate,
             "allows_virtual_table_explore": self.allows_virtual_table_explore,
             "explore_database_id": self.explore_database_id,
+            "parameters": self.parameters,
         }
 
     @property
@@ -223,6 +224,17 @@ class Database(
         return make_url(self.sqlalchemy_uri_decrypted)
 
     @property
+    def parameters(self) -> Optional[Dict[str, Any]]:
+        # Build parameters if db_engine_spec is a subclass of BasicParametersMixin
+        parameters = {"engine": self.backend}
+
+        if issubclass(self.db_engine_spec, BasicParametersMixin):
+            uri = make_url(self.sqlalchemy_uri_decrypted)
+            return {**parameters, **self.db_engine_spec.get_parameters_from_uri(uri)}
+
+        return parameters
+
+    @property
     def backend(self) -> str:
         sqlalchemy_url = make_url(self.sqlalchemy_uri_decrypted)
         return sqlalchemy_url.get_backend_name()  # pylint: disable=no-member
@@ -568,10 +580,10 @@ class Database(
 
     @property
     def db_engine_spec(self) -> Type[db_engine_specs.BaseEngineSpec]:
-        return self.get_db_engine_spec_for_backend(self.backend)
+        engines = db_engine_specs.get_engine_specs()
+        return engines.get(self.backend, db_engine_specs.BaseEngineSpec)
 
     @classmethod
-    @utils.memoized
     def get_db_engine_spec_for_backend(
         cls, backend: str
     ) -> Type[db_engine_specs.BaseEngineSpec]: