You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by jo...@apache.org on 2019/06/10 17:25:32 UTC

[incubator-superset] branch master updated: [connectors] Make cluster/database and datasource/table unselectable in CRUD view (#7073)

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 c6179b1  [connectors] Make cluster/database and datasource/table unselectable in CRUD view (#7073)
c6179b1 is described below

commit c6179b195f8c5f482928055803344a0e2f313bcc
Author: John Bodley <45...@users.noreply.github.com>
AuthorDate: Mon Jun 10 10:25:13 2019 -0700

    [connectors] Make cluster/database and datasource/table unselectable in CRUD view (#7073)
---
 superset/connectors/druid/views.py | 32 ++++++++++++++++++++++++++++++++
 superset/connectors/sqla/views.py  | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/superset/connectors/druid/views.py b/superset/connectors/druid/views.py
index 99923e0..103dd25 100644
--- a/superset/connectors/druid/views.py
+++ b/superset/connectors/druid/views.py
@@ -21,10 +21,12 @@ import logging
 
 from flask import flash, Markup, redirect
 from flask_appbuilder import CompactCRUDMixin, expose
+from flask_appbuilder.fieldwidgets import Select2Widget
 from flask_appbuilder.models.sqla.interface import SQLAInterface
 from flask_appbuilder.security.decorators import has_access
 from flask_babel import gettext as __
 from flask_babel import lazy_gettext as _
+from wtforms.ext.sqlalchemy.fields import QuerySelectField
 
 from superset import appbuilder, db, security_manager
 from superset.connectors.base.views import DatasourceModelView
@@ -76,6 +78,17 @@ class DruidColumnInlineView(CompactCRUDMixin, SupersetModelView):  # noqa
             True),
     }
 
+    add_form_extra_fields = {
+        'datasource': QuerySelectField(
+            'Datasource',
+            query_factory=lambda: db.session().query(models.DruidDatasource),
+            allow_blank=True,
+            widget=Select2Widget(extra_classes='readonly'),
+        ),
+    }
+
+    edit_form_extra_fields = add_form_extra_fields
+
     def pre_update(self, col):
         # If a dimension spec JSON is given, ensure that it is
         # valid JSON and that `outputName` is specified
@@ -145,6 +158,17 @@ class DruidMetricInlineView(CompactCRUDMixin, SupersetModelView):  # noqa
         'is_restricted': _('Is Restricted'),
     }
 
+    add_form_extra_fields = {
+        'datasource': QuerySelectField(
+            'Datasource',
+            query_factory=lambda: db.session().query(models.DruidDatasource),
+            allow_blank=True,
+            widget=Select2Widget(extra_classes='readonly'),
+        ),
+    }
+
+    edit_form_extra_fields = add_form_extra_fields
+
     def post_add(self, metric):
         if metric.is_restricted:
             security_manager.add_permission_view_menu('metric_access', metric.get_perm())
@@ -201,6 +225,14 @@ class DruidClusterModelView(SupersetModelView, DeleteMixin, YamlExportMixin):  #
         ),
     }
 
+    edit_form_extra_fields = {
+        'cluster_name': QuerySelectField(
+            'Cluster',
+            query_factory=lambda: db.session().query(models.DruidCluster),
+            widget=Select2Widget(extra_classes='readonly'),
+        ),
+    }
+
     def pre_add(self, cluster):
         security_manager.add_permission_view_menu('database_access', cluster.perm)
 
diff --git a/superset/connectors/sqla/views.py b/superset/connectors/sqla/views.py
index 2edf949..e6c0029 100644
--- a/superset/connectors/sqla/views.py
+++ b/superset/connectors/sqla/views.py
@@ -21,10 +21,12 @@ import logging
 from flask import flash, Markup, redirect
 from flask_appbuilder import CompactCRUDMixin, expose
 from flask_appbuilder.actions import action
+from flask_appbuilder.fieldwidgets import Select2Widget
 from flask_appbuilder.models.sqla.interface import SQLAInterface
 from flask_appbuilder.security.decorators import has_access
 from flask_babel import gettext as __
 from flask_babel import lazy_gettext as _
+from wtforms.ext.sqlalchemy.fields import QuerySelectField
 
 from superset import appbuilder, db, security_manager
 from superset.connectors.base.views import DatasourceModelView
@@ -107,6 +109,17 @@ class TableColumnInlineView(CompactCRUDMixin, SupersetModelView):  # noqa
         'type': _('Type'),
     }
 
+    add_form_extra_fields = {
+        'table': QuerySelectField(
+            'Table',
+            query_factory=lambda: db.session().query(models.SqlaTable),
+            allow_blank=True,
+            widget=Select2Widget(extra_classes='readonly'),
+        ),
+    }
+
+    edit_form_extra_fields = add_form_extra_fields
+
 
 appbuilder.add_view_no_menu(TableColumnInlineView)
 
@@ -153,6 +166,17 @@ class SqlMetricInlineView(CompactCRUDMixin, SupersetModelView):  # noqa
         'warning_text': _('Warning Message'),
     }
 
+    add_form_extra_fields = {
+        'table': QuerySelectField(
+            'Table',
+            query_factory=lambda: db.session().query(models.SqlaTable),
+            allow_blank=True,
+            widget=Select2Widget(extra_classes='readonly'),
+        ),
+    }
+
+    edit_form_extra_fields = add_form_extra_fields
+
     def post_add(self, metric):
         if metric.is_restricted:
             security_manager.add_permission_view_menu('metric_access', metric.get_perm())
@@ -260,6 +284,14 @@ class TableModelView(DatasourceModelView, DeleteMixin, YamlExportMixin):  # noqa
         'modified': _('Modified'),
     }
 
+    edit_form_extra_fields = {
+        'database': QuerySelectField(
+            'Database',
+            query_factory=lambda: db.session().query(models.Database),
+            widget=Select2Widget(extra_classes='readonly'),
+        ),
+    }
+
     def pre_add(self, table):
         with db.session.no_autoflush:
             table_query = db.session.query(models.SqlaTable).filter(