Open fgvieira opened 3 months ago
To resolve the 500 error and the unexpected keyword argument 'extra_filters' issue, follow these steps:
Check Superset Configuration:
Ensure that DEBUG
mode is set to False
in your Superset configuration. This affects error handling behavior.
Review Error Handling Code:
The error handling code in superset/views/base.py
handles different exceptions and returns appropriate responses. For HTTP 500 errors, it serves a static HTML file if DEBUG
is False
.
Verify Static Assets:
Ensure the static HTML file for the 500 error exists at static/assets/500.html
:
path = files("superset") / "static/assets/500.html"
return send_file(path, max_age=0), 500
Enable Stacktrace for Debugging: Temporarily enable stacktrace in the configuration to get more details about the error:
def get_error_msg() -> str:
if conf.get("SHOW_STACKTRACE"):
error_msg = traceback.format_exc()
else:
error_msg = "FATAL ERROR \n"
error_msg += (
"Stacktrace is hidden. Change the SHOW_STACKTRACE "
"configuration setting to enable it"
)
return error_msg
Check Logs: Review the logs for warnings or exceptions that might provide more context about the 500 error:
logger.warning("HTTPException", exc_info=True)
logger.exception(ex)
Return JSON Error Response: Ensure the JSON error response is returned correctly if the request is not for HTML:
return json_errors_response(
errors=[
SupersetError(
message=utils.error_msg_from_exception(ex),
error_type=SupersetErrorType.GENERIC_BACKEND_ERROR,
level=ErrorLevel.ERROR,
),
],
status=ex.code or 500,
)
Additionally, there have been recent updates in the flask
and flask_wtf
libraries that could affect form handling:
flask
updated to version 2.2.5flask_wtf
updated to version 1.1.0Review the release notes for these versions to identify specific changes that could impact the LoginForm_db
class [1][2].
Finally, ensure your superset/config.py
file has the correct configurations for CSRF protection:
WTF_CSRF_ENABLED = True
WTF_CSRF_EXEMPT_LIST = [
"superset.views.core.log",
"superset.views.core.explore_json",
"superset.charts.data.api.data",
]
WTF_CSRF_TIME_LIMIT = int(timedelta(weeks=1).total_seconds())
These configurations control CSRF protection settings, which directly impact how LoginForm_db
interacts with wtforms
and flask_wtf
[3].
To continue talking to Dosu, mention @dosu.
@dosu I think the issue is with monkey_patch_field_process.<locals>.process() got an unexpected keyword argument 'extra_filters'
. Any idea what that argument is?
The extra_filters
argument is used in the getFormDataWithExtraFilters
function to handle additional filters applied to charts in Superset. This function processes the extra_filters
argument to generate the necessary form data for rendering charts.
Here's an example of how getFormDataWithExtraFilters
is used:
export default function getFormDataWithExtraFilters({
chart,
filters,
nativeFilters,
chartConfiguration,
colorScheme,
colorNamespace,
sliceId,
dataMask,
extraControls,
labelColors,
sharedLabelColors,
allSliceIds,
}: GetFormDataWithExtraFiltersArguments) {
// if dashboard metadata + filters have not changed, use cache if possible
const cachedFormData = cachedFormdataByChart[sliceId];
if (
cachedFiltersByChart[sliceId] === filters &&
areObjectsEqual(cachedFormData?.color_scheme, colorScheme, {
ignoreUndefined: true,
}) &&
areObjectsEqual(cachedFormData?.color_namespace, colorNamespace, {
ignoreUndefined: true,
}) &&
areObjectsEqual(cachedFormData?.label_colors, labelColors, {
ignoreUndefined: true,
}) &&
areObjectsEqual(cachedFormData?.shared_label_colors, sharedLabelColors, {
ignoreUndefined: true,
}) &&
!!cachedFormData &&
areObjectsEqual(cachedFormData?.dataMask, dataMask, {
ignoreUndefined: true,
}) &&
areObjectsEqual(cachedFormData?.extraControls, extraControls, {
ignoreUndefined: true,
})
) {
return cachedFormData;
}
let extraData: { extra_form_data?: JsonObject } = {};
const activeFilters = getAllActiveFilters({
chartConfiguration,
dataMask,
nativeFilters,
allSliceIds,
});
const filterIdsAppliedOnChart = Object.entries(activeFilters)
.filter(([, { scope }]) => scope.includes(chart.id))
.map(([filterId]) => filterId);
if (filterIdsAppliedOnChart.length) {
extraData = {
extra_form_data: getExtraFormData(dataMask, filterIdsAppliedOnChart),
};
}
const formData = {
...chart.form_data,
label_colors: labelColors,
shared_label_colors: sharedLabelColors,
...(colorScheme && { color_scheme: colorScheme }),
extra_filters: getEffectiveExtraFilters(filters),
...extraData,
...extraControls,
};
cachedFiltersByChart[sliceId] = filters;
cachedFormdataByChart[sliceId] = { ...formData, dataMask, extraControls };
return formData;
}
Ensure that the getFormDataWithExtraFilters
function is correctly defined and used in your codebase. If the function is not handling the extra_filters
argument properly, you may need to update it to ensure it processes the extra_filters
argument as expected [1].
To continue talking to Dosu, mention @dosu.
It seems related to https://github.com/pallets-eco/flask-admin/issues/2142. It worked after downgrading wtforms
from 3.1.2
to 2.3.3
@johnarevalo any ideas of how to fix forward? By all accounts on the thread you linked, the problem should be resolved. Is it possible to roll back to any other 3.x.x releases, at least?
Bug description
When trying to access
superset
through the browser I get a 500 error and the logs say:How to reproduce the bug
micromamba env create --name superset -c conda-forge superset pillow psycopg2-binary
export FLASK_APP=superset
export SUPERSET_CONFIG_PATH=/var/superset/config.py
(the same as in here)superset db upgrade
superset fab create-admin
superset init
Access `superset on browser.
Screenshots/recordings
No response
Superset version
4.0.1
Python version
3.11
Node version
I don't know
Browser
Firefox
Additional context
No response
Checklist