apache/superset · error · InvalidPostProcessingError
Unsupported post processing operation: %(operation)s
Error message
Unsupported post processing operation: %(operation)s
What it means
InvalidPostProcessingError raised in QueryObject.get_post_processing_df (query_object.py:548) when the operation string in a post_processing entry does not match any attribute of superset.common.utils.pandas_postprocessing. Superset dispatches post-processing via getattr(pandas_postprocessing, operation), so unknown operation names (typos, renamed functions, plugin-specific ops) are rejected before execution.
Source
Thrown at superset/common/query_object.py:548
"""
Perform post processing operations on DataFrame.
:param df: DataFrame returned from database model.
:return: new DataFrame to which all post processing operations have been
applied
:raises QueryObjectValidationError: If the post processing operation
is incorrect
"""
logger.debug("post_processing: \n %s", pformat(self.post_processing))
with event_logger.log_context(f"{self.__class__.__name__}.post_processing"):
for post_process in self.post_processing:
operation = post_process.get("operation")
if not operation:
raise InvalidPostProcessingError(
_("`operation` property of post processing object undefined")
)
if not hasattr(pandas_postprocessing, operation):
raise InvalidPostProcessingError(
_(
"Unsupported post processing operation: %(operation)s",
type=operation,
)
)
options = post_process.get("options", {})
df = getattr(pandas_postprocessing, operation)(df, **options)
return df
View on GitHub (pinned to f4587218dd)
Solutions
- Check superset/common/utils/pandas_postprocessing.py (or dir(pandas_postprocessing)) in your Superset version for the exact allowed operation names and correct the payload.
- Fix typos: common valid operations include pivot, aggregate, rolling, diff, rank, cum, contribution, geographical, boxplot.
- After a Superset upgrade, re-open and re-save affected charts in Explore so post_processing is normalized to the current schema.
Example fix
// before
"post_processing": [
{ "operation": "pivt", "options": { ... } }
]
// after
"post_processing": [
{ "operation": "pivot", "options": { ... } }
] Defensive patterns
Strategy: validation
Validate before calling
from superset.common.utils import pandas_postprocessing
ALLOWED = {
name for name in dir(pandas_postprocessing)
if not name.startswith("_") and callable(getattr(pandas_postprocessing, name))
}
def validate_operations(steps: list[dict]) -> None:
for step in steps or []:
if step.get("operation") not in ALLOWED:
raise ValueError(f"unsupported operation: {step.get('operation')!r}; allowed: {sorted(ALLOWED)}") Type guard
def is_supported_operation(step: dict) -> bool:
from superset.common.utils import pandas_postprocessing
op = step.get("operation")
return isinstance(op, str) and hasattr(pandas_postprocessing, op) Try / catch
from superset.exceptions import InvalidPostProcessingError
try:
df = query_object.get_post_processing_df(df)
except InvalidPostProcessingError as ex:
if "Unsupported post processing operation" in str(ex):
# drop or map the unknown op, then retry
query_object.post_processing = [s for s in query_object.post_processing if is_supported_operation(s)]
df = query_object.get_post_processing_df(df)
else:
raise Prevention
- Check allowed operation names against your pinned Superset version's pandas_postprocessing module.
- Treat operation as an enum in client code, not free text.
- After Superset upgrades, grep saved charts for removed/renamed post-processing operations.
When it happens
Trigger: A post_processing entry whose operation is e.g. "pivt", "timeseries", or any name not defined in pandas_postprocessing.py. Happens after Superset upgrades that rename/remove post-processing ops, or when a payload was written against a fork/plugin that supports extra operations.
Common situations: Typos in hand-written API payloads; chart definitions persisted from an older Superset version referencing an operation that was renamed (e.g. legacy 'concat' variants); custom forks adding operations that upstream rejects.
Related errors
- `operation` property of post processing object undefined
- Unsupported whisker type: ${whiskerOptions}
- Found invalid orderby options
- Unknown Error
- Please provide both time bounds (Since and Until)
AI-assisted analysis of apache/superset@f4587218dd (2026-08-14).
Data as JSON: /api/errors/dab33e73c235c682.
Report an issue: GitHub.