Files
Lakehouse Admin 0402a4fbae
Validate Lakehouse config / validate (push) Has been cancelled
update (bart)
2026-06-28 17:08:57 +02:00

86 lines
3.2 KiB
Python

"""Generate and save query_context for API-created Superset charts."""
import json
app = __import__("superset.app", fromlist=["create_app"]).create_app()
with app.app_context():
from flask import g
from superset.extensions import db
from superset.models.slice import Slice
from superset.models.core import Database
from superset.charts.schemas import ChartDataQueryContextSchema
from superset import security_manager
admin = security_manager.find_user(username="admin")
g.user = admin
charts = db.session.query(Slice).order_by(Slice.id).all()
for sl in charts:
try:
fd = sl.form_data
metric = fd.get("metric")
metrics = fd.get("metrics") or ([metric] if metric else [])
if not metrics:
metrics = [
{
"expressionType": "SQL",
"sqlExpression": "COUNT(*)",
"label": "COUNT(*)",
}
]
groupby = fd.get("groupby") or []
payload = {
"datasource": {
"id": sl.datasource_id,
"type": sl.datasource_type,
},
"force": False,
"queries": [
{
"filters": [],
"extras": {"having": "", "where": ""},
"applied_time_extras": {},
"columns": groupby if isinstance(groupby, list) else [],
"metrics": metrics,
"orderby": [],
"annotation_layers": [],
"row_limit": int(fd.get("row_limit") or 1000),
"series_limit": 0,
"order_desc": True,
"url_params": {},
"custom_params": {},
"custom_form_data": {},
}
],
"form_data": fd,
"result_format": "json",
"result_type": "full",
}
qc = ChartDataQueryContextSchema().load(payload)
ctx = qc.cache_values if hasattr(qc, "cache_values") else None
if ctx is None:
# fallback: store factory input dict
from superset.common.query_context_factory import QueryContextFactory
factory = QueryContextFactory()
ctx = {
"datasource": {
"id": sl.datasource_id,
"type": sl.datasource_type,
},
"force": False,
"queries": payload["queries"],
"form_data": fd,
"result_format": "json",
"result_type": "full",
}
sl.query_context = json.dumps(ctx) if isinstance(ctx, dict) else json.dumps(payload)
sl.query_context_generation = True
db.session.add(sl)
print("OK", sl.id, sl.slice_name[:50])
except Exception as e:
print("ERR", sl.id, sl.slice_name[:40], e)
db.session.commit()
print("committed")