Skip to content

Commit

Permalink
fix: Ch31968query context (#17600)
Browse files Browse the repository at this point in the history
* a lot of console logs

* import and export of query context
  • Loading branch information
AAfghahi committed Dec 1, 2021
1 parent c70ac1c commit d7e3a60
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 38 deletions.
8 changes: 5 additions & 3 deletions superset/charts/commands/export.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@


# keys present in the standard export that are not needed
REMOVE_KEYS = ["datasource_type", "datasource_name"]
REMOVE_KEYS = ["datasource_type", "datasource_name", "query_context"]


class ExportChartsCommand(ExportModelsCommand):
Expand All @@ -55,8 +55,10 @@ def _export(model: Slice) -> Iterator[Tuple[str, str]]:
)
# TODO (betodealmeida): move this logic to export_to_dict once this
# becomes the default export endpoint
for key in REMOVE_KEYS:
del payload[key]
payload = {
key: value for key, value in payload.items() if key not in REMOVE_KEYS
}

if payload.get("params"):
try:
payload["params"] = json.loads(payload["params"])
Expand Down
6 changes: 2 additions & 4 deletions superset/charts/commands/importers/v1/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,8 @@ def _import(
}
)
config["params"].update({"datasource": dataset.uid})

if config["query_context"]:
# TODO (betodealmeida): export query_context as object, not string
query_context = json.loads(config["query_context"])
query_context["datasource"] = {"id": dataset.id, "type": "table"}
config["query_context"] = json.dumps(query_context)
del config["query_context"]

import_chart(session, config, overwrite=overwrite)
8 changes: 7 additions & 1 deletion superset/connectors/base/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

from superset import is_feature_enabled, security_manager
from superset.constants import NULL_STRING
from superset.datasets.commands.exceptions import DatasetNotFoundError
from superset.models.helpers import AuditMixinNullable, ImportExportMixin, QueryResult
from superset.models.slice import Slice
from superset.typing import FilterValue, FilterValues, QueryObjectDict
Expand Down Expand Up @@ -319,8 +320,13 @@ def data_for_slices( # pylint: disable=too-many-locals
if "column" in filter_config
)

# for legacy dashboard imports which have the wrong query_context in them
try:
query_context = slc.get_query_context()
except DatasetNotFoundError:
query_context = None

# legacy charts don't have query_context charts
query_context = slc.get_query_context()
if query_context:
column_names.update(
[
Expand Down
31 changes: 1 addition & 30 deletions tests/integration_tests/charts/commands_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,14 @@ def test_export_chart_command(self, mock_g):
"slice_name": "Energy Sankey",
"viz_type": "sankey",
},
"query_context": None,
"cache_timeout": None,
"dataset_uuid": str(example_chart.table.uuid),
"uuid": str(example_chart.uuid),
"version": "1.0.0",
}

@patch("superset.security.manager.g")
@pytest.mark.usefixtures("load_energy_table_with_slice")
def test_export_chart_command_no_access(self, mock_g):
"""Test that users can't export datasets they don't have access to"""
mock_g.user = security_manager.find_user("gamma")
Expand Down Expand Up @@ -125,7 +125,6 @@ def test_export_chart_command_key_order(self, mock_g):
"slice_name",
"viz_type",
"params",
"query_context",
"cache_timeout",
"uuid",
"version",
Expand Down Expand Up @@ -191,34 +190,6 @@ def test_import_v1_chart(self, mock_g):
)
assert dataset.table_name == "imported_dataset"
assert chart.table == dataset
assert json.loads(chart.query_context) == {
"datasource": {"id": dataset.id, "type": "table"},
"force": False,
"queries": [
{
"time_range": " : ",
"filters": [],
"extras": {
"time_grain_sqla": None,
"having": "",
"having_druid": [],
"where": "",
},
"applied_time_extras": {},
"columns": [],
"metrics": [],
"annotation_layers": [],
"row_limit": 5000,
"timeseries_limit": 0,
"order_desc": True,
"url_params": {},
"custom_params": {},
"custom_form_data": {},
}
],
"result_format": "json",
"result_type": "full",
}

database = (
db.session.query(Database).filter_by(uuid=database_config["uuid"]).one()
Expand Down

0 comments on commit d7e3a60

Please sign in to comment.