diff --git a/.gitignore b/.gitignore index 0ccddfa4f6..77e5aad514 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ .bento* .cache-loader .coverage +cover .DS_Store .eggs .envrc diff --git a/superset/connectors/base/models.py b/superset/connectors/base/models.py index fb2d5eb9de..eb0d3e234a 100644 --- a/superset/connectors/base/models.py +++ b/superset/connectors/base/models.py @@ -15,6 +15,7 @@ # specific language governing permissions and limitations # under the License. import json +from enum import Enum from typing import Any, Dict, Hashable, List, Optional, Type, Union from flask_appbuilder.security.sqla.models import User @@ -51,6 +52,11 @@ COLUMN_FORM_DATA_PARAMS = [ ] +class DatasourceKind(str, Enum): + VIRTUAL = "virtual" + PHYSICAL = "physical" + + class BaseDatasource( AuditMixinNullable, ImportMixin ): # pylint: disable=too-many-public-methods @@ -101,6 +107,13 @@ class BaseDatasource( owners: List[User] update_from_object_fields: List[str] + @property + def kind(self) -> str: + if self.sql: + return DatasourceKind.VIRTUAL.value + + return DatasourceKind.PHYSICAL.value + @declared_attr def slices(self) -> RelationshipProperty: return relationship( diff --git a/superset/datasets/api.py b/superset/datasets/api.py index 7452b662b7..bafcebfb7a 100644 --- a/superset/datasets/api.py +++ b/superset/datasets/api.py @@ -78,6 +78,11 @@ class DatasetRestApi(BaseSupersetModelRestApi): "changed_on", "default_endpoint", "explore_url", + "kind", + "owners.id", + "owners.username", + "owners.first_name", + "owners.last_name", "schema", "table_name", ] diff --git a/tests/datasets/api_tests.py b/tests/datasets/api_tests.py index 47d98e6490..75e9aeac38 100644 --- a/tests/datasets/api_tests.py +++ b/tests/datasets/api_tests.py @@ -23,6 +23,7 @@ import prison import yaml from sqlalchemy.sql import func +import tests.test_app from superset.connectors.sqla.models import SqlaTable, SqlMetric, TableColumn from superset.dao.exceptions import ( DAOCreateFailedError, @@ -96,6 +97,8 @@ class DatasetApiTests(SupersetTestCase): "default_endpoint", "explore_url", "id", + "kind", + "owners", "schema", "table_name", ]