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:23 UTC
[superset] 01/01: save types and update api
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]: