fix(contextmenu): uncaught TypeError (#28203)

(cherry picked from commit 29b62f7c0a)
This commit is contained in:
sowo
2025-03-19 03:42:38 +01:00
committed by Michael S. Molina
parent 6917362d78
commit f6f1ffae2f
5 changed files with 64 additions and 4 deletions

View File

@@ -49,6 +49,7 @@ from superset.exceptions import (
from superset.extensions import cache_manager, security_manager
from superset.models.helpers import QueryResult
from superset.models.sql_lab import Query
from superset.superset_typing import AdhocColumn, AdhocMetric
from superset.utils import csv, excel
from superset.utils.cache import generate_cache_key, set_and_log_cache
from superset.utils.core import (
@@ -63,6 +64,8 @@ from superset.utils.core import (
get_column_names_from_metrics,
get_metric_names,
get_x_axis_label,
is_adhoc_column,
is_adhoc_metric,
normalize_dttm_col,
TIME_COMPARISON,
)
@@ -180,6 +183,30 @@ class QueryContextProcessor:
]
for col in cache.df.columns.values
}
label_map.update(
{
column_name: [
str(query_obj.columns[idx])
if not is_adhoc_column(query_obj.columns[idx])
else cast(AdhocColumn, query_obj.columns[idx])["sqlExpression"],
]
for idx, column_name in enumerate(query_obj.column_names)
}
)
label_map.update(
{
metric_name: [
str(query_obj.metrics[idx])
if not is_adhoc_metric(query_obj.metrics[idx])
else str(cast(AdhocMetric, query_obj.metrics[idx])["sqlExpression"])
if cast(AdhocMetric, query_obj.metrics[idx])["expressionType"]
== "SQL"
else metric_name,
]
for idx, metric_name in enumerate(query_obj.metric_names)
if query_obj and query_obj.metrics
}
)
cache.df.columns = [unescape_separator(col) for col in cache.df.columns.values]
return {

View File

@@ -258,7 +258,12 @@ class QueryObject: # pylint: disable=too-many-instance-attributes
@property
def metric_names(self) -> list[str]:
"""Return metrics names (labels), coerce adhoc metrics to strings."""
return get_metric_names(self.metrics or [])
return get_metric_names(
self.metrics or [],
self.datasource.verbose_map
if self.datasource and hasattr(self.datasource, "verbose_map")
else None,
)
@property
def column_names(self) -> list[str]: