This is an automated email from the ASF dual-hosted git repository. bkyryliuk 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 9de9e1c feat: Added configuration to SQL Lab results "Explore" button (#10164) 9de9e1c is described below commit 9de9e1c19d8606340efa9849b2176704e4916e9b Author: Jason Davis <32852580+jason...@users.noreply.github.com> AuthorDate: Fri Jun 26 09:54:55 2020 -0700 feat: Added configuration to SQL Lab results "Explore" button (#10164) * added configuration to virtual table explore button * added description to mixin * fixed unit tests Co-authored-by: Jason Davis <@dropbox.com> --- .../spec/javascripts/sqllab/ResultSet_spec.jsx | 1 + .../src/SqlLab/components/ResultSet.jsx | 16 ++++++++------- superset/models/core.py | 7 +++++++ superset/views/database/api.py | 1 + superset/views/database/mixins.py | 4 +++- tests/core_tests.py | 23 ++++++++++++++++++++++ tests/database_api_tests.py | 1 + 7 files changed, 45 insertions(+), 8 deletions(-) diff --git a/superset-frontend/spec/javascripts/sqllab/ResultSet_spec.jsx b/superset-frontend/spec/javascripts/sqllab/ResultSet_spec.jsx index 114755c..e77b1c8 100644 --- a/superset-frontend/spec/javascripts/sqllab/ResultSet_spec.jsx +++ b/superset-frontend/spec/javascripts/sqllab/ResultSet_spec.jsx @@ -37,6 +37,7 @@ describe('ResultSet', () => { cache: true, query: queries[0], height: 0, + database: { allows_virtual_table_explore: true }, }; const stoppedQueryProps = { ...mockedProps, query: stoppedQuery }; const runningQueryProps = { ...mockedProps, query: runningQuery }; diff --git a/superset-frontend/src/SqlLab/components/ResultSet.jsx b/superset-frontend/src/SqlLab/components/ResultSet.jsx index 5ccc089..71f3f46 100644 --- a/superset-frontend/src/SqlLab/components/ResultSet.jsx +++ b/superset-frontend/src/SqlLab/components/ResultSet.jsx @@ -145,13 +145,15 @@ export default class ResultSet extends React.PureComponent { return ( <div className="ResultSetControls"> <div className="ResultSetButtons"> - {this.props.visualize && ( - <ExploreResultsButton - query={this.props.query} - database={this.props.database} - actions={this.props.actions} - /> - )} + {this.props.visualize && + this.props.database && + this.props.database.allows_virtual_table_explore && ( + <ExploreResultsButton + query={this.props.query} + database={this.props.database} + actions={this.props.actions} + /> + )} {this.props.csv && ( <Button bsSize="small" diff --git a/superset/models/core.py b/superset/models/core.py index 42c4345..25922ac 100755 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -190,6 +190,12 @@ class Database( ) @property + def allows_virtual_table_explore(self) -> bool: + extra = self.get_extra() + + return bool(extra.get("allows_virtual_table_explore", True)) + + @property def data(self) -> Dict[str, Any]: return { "id": self.id, @@ -198,6 +204,7 @@ class Database( "allow_multi_schema_metadata_fetch": self.allow_multi_schema_metadata_fetch, "allows_subquery": self.allows_subquery, "allows_cost_estimate": self.allows_cost_estimate, + "allows_virtual_table_explore": self.allows_virtual_table_explore, } @property diff --git a/superset/views/database/api.py b/superset/views/database/api.py index aec49f3..212dc8b 100644 --- a/superset/views/database/api.py +++ b/superset/views/database/api.py @@ -136,6 +136,7 @@ class DatabaseRestApi(DatabaseMixin, BaseSupersetModelRestApi): "allow_csv_upload", "allows_subquery", "allows_cost_estimate", + "allows_virtual_table_explore", "backend", "function_names", ] diff --git a/superset/views/database/mixins.py b/superset/views/database/mixins.py index 77a2b7d..3fe52e3 100644 --- a/superset/views/database/mixins.py +++ b/superset/views/database/mixins.py @@ -144,7 +144,9 @@ class DatabaseMixin: "If database flavor does not support schema or any schema is allowed " "to be accessed, just leave the list empty<br/>" "4. the ``version`` field is a string specifying the this db's version. " - "This should be used with Presto DBs so that the syntax is correct", + "This should be used with Presto DBs so that the syntax is correct<br/>" + "5. The ``allows_virtual_table_explore`` field is a boolean specifying " + "whether or not the Explore button in SQL Lab results is shown.", True, ), "encrypted_extra": utils.markdown( diff --git a/tests/core_tests.py b/tests/core_tests.py index 4b4a9bf..bb26a85 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -1284,6 +1284,29 @@ class CoreTests(SupersetTestCase): payload = views.Superset._get_sqllab_tabs(user_id=user_id) self.assertEqual(len(payload["queries"]), 1) + def test_virtual_table_explore_visibility(self): + # test that default visibility it set to True + database = utils.get_example_database() + self.assertEqual(database.allows_virtual_table_explore, True) + + # test that visibility is disabled when extra is set to False + extra = database.get_extra() + extra["allows_virtual_table_explore"] = False + database.extra = json.dumps(extra) + self.assertEqual(database.allows_virtual_table_explore, False) + + # test that visibility is enabled when extra is set to True + extra = database.get_extra() + extra["allows_virtual_table_explore"] = True + database.extra = json.dumps(extra) + self.assertEqual(database.allows_virtual_table_explore, True) + + # test that visibility is not broken with bad values + extra = database.get_extra() + extra["allows_virtual_table_explore"] = "trash value" + database.extra = json.dumps(extra) + self.assertEqual(database.allows_virtual_table_explore, True) + if __name__ == "__main__": unittest.main() diff --git a/tests/database_api_tests.py b/tests/database_api_tests.py index f636a29..1b9e1ca 100644 --- a/tests/database_api_tests.py +++ b/tests/database_api_tests.py @@ -49,6 +49,7 @@ class DatabaseApiTests(SupersetTestCase): "allow_run_async", "allows_cost_estimate", "allows_subquery", + "allows_virtual_table_explore", "backend", "database_name", "expose_in_sqllab",