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()
 

Reply via email to