diff --git a/superset/common/query_context.py b/superset/common/query_context.py index 40df7c95c..7e1254068 100644 --- a/superset/common/query_context.py +++ b/superset/common/query_context.py @@ -213,6 +213,8 @@ class QueryContext: df = query_result["df"] if status != utils.QueryStatus.FAILED: stats_logger.incr("loaded_from_source") + if not self.force: + stats_logger.incr("loaded_from_source_without_force") is_loaded = True except Exception as e: # pylint: disable=broad-except logger.exception(e) diff --git a/superset/models/slice.py b/superset/models/slice.py index 104ef3421..71371faa1 100644 --- a/superset/models/slice.py +++ b/superset/models/slice.py @@ -232,23 +232,6 @@ class Slice( def changed_by_url(self) -> str: return f"/superset/profile/{self.created_by.username}" - def get_viz(self, force: bool = False) -> BaseViz: - """Creates :py:class:viz.BaseViz object from the url_params_multidict. - - :return: object of the 'viz_type' type that is taken from the - url_params_multidict or self.params. - :rtype: :py:class:viz.BaseViz - """ - slice_params = json.loads(self.params) - slice_params["slice_id"] = self.id - slice_params["json"] = "false" - slice_params["slice_name"] = self.slice_name - slice_params["viz_type"] = self.viz_type if self.viz_type else "table" - - return viz_types[slice_params.get("viz_type")]( - self.datasource, form_data=slice_params, force=force - ) - @property def icons(self) -> str: return f""" diff --git a/superset/views/core.py b/superset/views/core.py index 39d62f504..c0c6fd009 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -187,7 +187,7 @@ def check_datasource_perms( except SupersetException as e: raise SupersetSecurityException(str(e)) - viz_obj = get_viz( + viz_obj = get_viz( # type: ignore datasource_type=datasource_type, datasource_id=datasource_id, form_data=form_data, @@ -576,27 +576,6 @@ class Superset(BaseSupersetView): session.commit() return redirect("/accessrequestsmodelview/list/") - def get_viz( - self, - slice_id=None, - form_data=None, - datasource_type=None, - datasource_id=None, - force=False, - ): - if slice_id: - slc = db.session.query(Slice).filter_by(id=slice_id).one() - return slc.get_viz() - else: - viz_type = form_data.get("viz_type", "table") - datasource = ConnectorRegistry.get_datasource( - datasource_type, datasource_id, db.session - ) - viz_obj = viz.viz_types[viz_type]( - datasource, form_data=form_data, force=force - ) - return viz_obj - @has_access @expose("/slice//") def slice(self, slice_id): @@ -2783,19 +2762,6 @@ class Superset(BaseSupersetView): "superset/basic.html", entry="sqllab", bootstrap_data=bootstrap_data ) - @api - @handle_api_exception - @has_access_api - @expose("/slice_query//") - def slice_query(self, slice_id): - """ - This method exposes an API endpoint to - get the database query string for this slice - """ - viz_obj = get_viz(slice_id) - security_manager.assert_viz_permission(viz_obj) - return self.get_query_string_response(viz_obj) - @api @has_access_api @expose("/schemas_access_for_csv_upload") diff --git a/superset/views/utils.py b/superset/views/utils.py index c2273e003..0f8629df8 100644 --- a/superset/views/utils.py +++ b/superset/views/utils.py @@ -80,12 +80,11 @@ def get_permissions(user): def get_viz( - slice_id=None, form_data=None, datasource_type=None, datasource_id=None, force=False + form_data: Dict[str, Any], + datasource_type: str, + datasource_id: int, + force: bool = False, ): - if slice_id: - slc = db.session.query(Slice).filter_by(id=slice_id).one() - return slc.get_viz() - viz_type = form_data.get("viz_type", "table") datasource = ConnectorRegistry.get_datasource( datasource_type, datasource_id, db.session diff --git a/superset/viz.py b/superset/viz.py index b12113361..2de0d1864 100644 --- a/superset/viz.py +++ b/superset/viz.py @@ -443,6 +443,8 @@ class BaseViz: df = self.get_df(query_obj) if self.status != utils.QueryStatus.FAILED: stats_logger.incr("loaded_from_source") + if not self.force: + stats_logger.incr("loaded_from_source_without_force") is_loaded = True except Exception as e: logger.exception(e) diff --git a/tests/core_tests.py b/tests/core_tests.py index 2326cd5b3..9c6b54a42 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -731,15 +731,6 @@ class CoreTests(SupersetTestCase): self.get_json_resp(slc_url, {"form_data": json.dumps(slc.form_data)}) self.assertEqual(1, qry.count()) - def test_slice_query_endpoint(self): - # API endpoint for query string - self.login(username="admin") - slc = self.get_slice("Girls", db.session) - resp = self.get_resp("/superset/slice_query/{}/".format(slc.id)) - assert "query" in resp - assert "language" in resp - self.logout() - def test_import_csv(self): self.login(username="admin") table_name = "".join(random.choice(string.ascii_uppercase) for _ in range(5))