This is an automated email from the ASF dual-hosted git repository.
johnbodley pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git
The following commit(s) were added to refs/heads/master by this push:
new 54dced1 style(mypy): Enforcing mypy typing for views.chart (#9912)
54dced1 is described below
commit 54dced1cf6886bce3508eb80f7a98fe4ed5de6ca
Author: John Bodley <[email protected]>
AuthorDate: Wed May 27 21:31:26 2020 -0700
style(mypy): Enforcing mypy typing for views.chart (#9912)
Co-authored-by: John Bodley <[email protected]>
---
setup.cfg | 2 +-
superset/connectors/base/models.py | 7 ++++---
superset/connectors/sqla/models.py | 1 +
superset/views/chart/filters.py | 5 ++++-
superset/views/chart/views.py | 15 ++++++++-------
5 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/setup.cfg b/setup.cfg
index fd028af..99c09ce 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -53,7 +53,7 @@ order_by_type = false
ignore_missing_imports = true
no_implicit_optional = true
-[mypy-superset.bin.*,superset.charts.*,superset.commands.*,superset.common.*,superset.connectors.*,superset.dao.*,superset.dashboards.*,superset.datasets.*,superset.db_engine_specs.*,superset.db_engines.*,superset.examples.*,superset.migrations.*,superset.models.*,uperset.queries.*,superset.security.*,superset.sql_validators.*,superset.tasks.*,superset.translations.*,superset.views.dashboard.*,superset.views.database.*]
+[mypy-superset.bin.*,superset.charts.*,superset.commands.*,superset.common.*,superset.connectors.*,superset.dao.*,superset.dashboards.*,superset.datasets.*,superset.db_engine_specs.*,superset.db_engines.*,superset.examples.*,superset.migrations.*,superset.models.*,uperset.queries.*,superset.security.*,superset.sql_validators.*,superset.tasks.*,superset.translations.*,superset.views.chart.*,superset.views.dashboard.*,superset.views.database.*]
check_untyped_defs = true
disallow_untyped_calls = true
disallow_untyped_defs = true
diff --git a/superset/connectors/base/models.py
b/superset/connectors/base/models.py
index c4e62a6..8ead670 100644
--- a/superset/connectors/base/models.py
+++ b/superset/connectors/base/models.py
@@ -61,9 +61,6 @@ class BaseDatasource(
# class attributes to define when deriving BaseDatasource
# ---------------------------------------------------------------
__tablename__: Optional[str] = None # {connector_name}_datasource
- type: Optional[ # datasoure type, str to be defined when deriving this
class
- str
- ] = None
baselink: Optional[str] = None # url portion pointing to ModelView
endpoint
column_class: Optional[Type] = None # link to derivative of BaseColumn
metric_class: Optional[Type] = None # link to derivative of BaseMetric
@@ -108,6 +105,10 @@ class BaseDatasource(
metrics: List[Any] = []
@property
+ def type(self) -> str:
+ raise NotImplementedError()
+
+ @property
def uid(self) -> str:
"""Unique id across datasource types"""
return f"{self.id}__{self.type}"
diff --git a/superset/connectors/sqla/models.py
b/superset/connectors/sqla/models.py
index 0e0d852..955424f 100644
--- a/superset/connectors/sqla/models.py
+++ b/superset/connectors/sqla/models.py
@@ -90,6 +90,7 @@ class AnnotationDatasource(BaseDatasource):
cache_timeout = 0
changed_on = None
+ type = "annotation"
def query(self, query_obj: QueryObjectDict) -> QueryResult:
error_message = None
diff --git a/superset/views/chart/filters.py b/superset/views/chart/filters.py
index f0bea47..89faa4b 100644
--- a/superset/views/chart/filters.py
+++ b/superset/views/chart/filters.py
@@ -14,14 +14,17 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
+from typing import Any
+
from sqlalchemy import or_
+from sqlalchemy.orm.query import Query
from superset import security_manager
from superset.views.base import BaseFilter
class SliceFilter(BaseFilter): # pylint: disable=too-few-public-methods
- def apply(self, query, value):
+ def apply(self, query: Query, value: Any) -> Query:
if security_manager.all_datasource_access():
return query
perms = security_manager.user_view_menu_names("datasource_access")
diff --git a/superset/views/chart/views.py b/superset/views/chart/views.py
index fb9c298..478a2e5 100644
--- a/superset/views/chart/views.py
+++ b/superset/views/chart/views.py
@@ -24,6 +24,7 @@ from superset import app, db
from superset.connectors.connector_registry import ConnectorRegistry
from superset.constants import RouteMethod
from superset.models.slice import Slice
+from superset.typing import FlaskResponse
from superset.utils import core as utils
from superset.views.base import check_ownership, DeleteMixin, SupersetModelView
from superset.views.chart.mixin import SliceMixin
@@ -40,22 +41,22 @@ class SliceModelView(
RouteMethod.API_DELETE,
}
- def pre_add(self, item):
+ def pre_add(self, item: "SliceModelView") -> None:
utils.validate_json(item.params)
- def pre_update(self, item):
+ def pre_update(self, item: "SliceModelView") -> None:
utils.validate_json(item.params)
check_ownership(item)
- def pre_delete(self, item):
+ def pre_delete(self, item: "SliceModelView") -> None:
check_ownership(item)
@expose("/add", methods=["GET", "POST"])
@has_access
- def add(self):
- datasources = ConnectorRegistry.get_all_datasources(db.session)
+ def add(self) -> FlaskResponse:
datasources = [
- {"value": str(d.id) + "__" + d.type, "label": repr(d)} for d in
datasources
+ {"value": str(d.id) + "__" + d.type, "label": repr(d)}
+ for d in ConnectorRegistry.get_all_datasources(db.session)
]
return self.render_template(
"superset/add_slice.html",
@@ -66,7 +67,7 @@ class SliceModelView(
@expose("/list/")
@has_access
- def list(self):
+ def list(self) -> FlaskResponse:
if not app.config["ENABLE_REACT_CRUD_VIEWS"]:
return super().list()