fix: Ch31968query context (#17600)

* a lot of console logs

* import and export of query context
This commit is contained in:
AAfghahi 2021-11-30 19:51:00 -05:00 committed by GitHub
parent c70ac1cfe6
commit d7e3a601b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 38 deletions

View File

@ -34,7 +34,7 @@ logger = logging.getLogger(__name__)
# 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):
@ -55,8 +55,10 @@ class ExportChartsCommand(ExportModelsCommand):
)
# 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"])

View File

@ -96,10 +96,8 @@ class ImportChartsCommand(ImportModelsCommand):
}
)
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)

View File

@ -26,6 +26,7 @@ from sqlalchemy.orm import foreign, Query, relationship, RelationshipProperty, S
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
@ -319,8 +320,13 @@ class BaseDatasource(
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(
[

View File

@ -79,7 +79,6 @@ class TestExportChartsCommand(SupersetTestCase):
"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),
@ -87,6 +86,7 @@ class TestExportChartsCommand(SupersetTestCase):
}
@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")
@ -125,7 +125,6 @@ class TestExportChartsCommand(SupersetTestCase):
"slice_name",
"viz_type",
"params",
"query_context",
"cache_timeout",
"uuid",
"version",
@ -191,34 +190,6 @@ class TestImportChartsCommand(SupersetTestCase):
)
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()