diff --git a/superset/dao/base.py b/superset/dao/base.py index abfa4ac61ccac..0cd0facf7e378 100644 --- a/superset/dao/base.py +++ b/superset/dao/base.py @@ -76,6 +76,19 @@ def find_by_ids(cls, model_ids: List[int]) -> List[Model]: ).apply(query, None) return query.all() + @classmethod + def find_all(cls) -> List[Model]: + """ + Get all that fit the `base_filter` + """ + query = db.session.query(cls.model_cls) + if cls.base_filter: + data_model = SQLAInterface(cls.model_cls, db.session) + query = cls.base_filter( # pylint: disable=not-callable + "id", data_model + ).apply(query, None) + return query.all() + @classmethod def create(cls, properties: Dict[str, Any], commit: bool = True) -> Model: """ diff --git a/superset/views/core.py b/superset/views/core.py index 0d00ecb6c694b..5da2cac46e7a5 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -63,6 +63,7 @@ ) from superset.dashboards.commands.importers.v0 import ImportDashboardsCommand from superset.dashboards.dao import DashboardDAO +from superset.databases.dao import DatabaseDAO from superset.databases.filters import DatabaseFilter from superset.exceptions import ( CertificateException, @@ -2720,17 +2721,16 @@ def _get_sqllab_tabs(user_id: int) -> Dict[str, Any]: .first() ) - databases: Dict[int, Any] = {} + databases: Dict[int, Any] = { + database.id: { + k: v for k, v in database.to_json().items() if k in DATABASE_KEYS + } + for database in DatabaseDAO.find_all() + } queries: Dict[str, Any] = {} # These are unnecessary if sqllab backend persistence is disabled if is_feature_enabled("SQLLAB_BACKEND_PERSISTENCE"): - databases = { - database.id: { - k: v for k, v in database.to_json().items() if k in DATABASE_KEYS - } - for database in db.session.query(Database).all() - } # return all user queries associated with existing SQL editors user_queries = ( db.session.query(Query)