feat: Add owners and physical/virtual status to Datasets API list endpoint (#10025)

* Add owners and physical/virtual status to Datasets API list endpoint

* black

* Update type definition for DatasourceKind

Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com>

* Fixin' tests and mypy

Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com>
This commit is contained in:
Will Barrett 2020-06-10 12:04:40 -07:00 committed by GitHub
parent 5339d31ed1
commit 4ef26993e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 0 deletions

1
.gitignore vendored
View File

@ -23,6 +23,7 @@
.bento* .bento*
.cache-loader .cache-loader
.coverage .coverage
cover
.DS_Store .DS_Store
.eggs .eggs
.envrc .envrc

View File

@ -15,6 +15,7 @@
# specific language governing permissions and limitations # specific language governing permissions and limitations
# under the License. # under the License.
import json import json
from enum import Enum
from typing import Any, Dict, Hashable, List, Optional, Type, Union from typing import Any, Dict, Hashable, List, Optional, Type, Union
from flask_appbuilder.security.sqla.models import User 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( class BaseDatasource(
AuditMixinNullable, ImportMixin AuditMixinNullable, ImportMixin
): # pylint: disable=too-many-public-methods ): # pylint: disable=too-many-public-methods
@ -101,6 +107,13 @@ class BaseDatasource(
owners: List[User] owners: List[User]
update_from_object_fields: List[str] update_from_object_fields: List[str]
@property
def kind(self) -> str:
if self.sql:
return DatasourceKind.VIRTUAL.value
return DatasourceKind.PHYSICAL.value
@declared_attr @declared_attr
def slices(self) -> RelationshipProperty: def slices(self) -> RelationshipProperty:
return relationship( return relationship(

View File

@ -78,6 +78,11 @@ class DatasetRestApi(BaseSupersetModelRestApi):
"changed_on", "changed_on",
"default_endpoint", "default_endpoint",
"explore_url", "explore_url",
"kind",
"owners.id",
"owners.username",
"owners.first_name",
"owners.last_name",
"schema", "schema",
"table_name", "table_name",
] ]

View File

@ -23,6 +23,7 @@ import prison
import yaml import yaml
from sqlalchemy.sql import func from sqlalchemy.sql import func
import tests.test_app
from superset.connectors.sqla.models import SqlaTable, SqlMetric, TableColumn from superset.connectors.sqla.models import SqlaTable, SqlMetric, TableColumn
from superset.dao.exceptions import ( from superset.dao.exceptions import (
DAOCreateFailedError, DAOCreateFailedError,
@ -96,6 +97,8 @@ class DatasetApiTests(SupersetTestCase):
"default_endpoint", "default_endpoint",
"explore_url", "explore_url",
"id", "id",
"kind",
"owners",
"schema", "schema",
"table_name", "table_name",
] ]