result-normalization-helper-pattern

Status: IN

FTL2 module results can be dicts, lists (multi-host), or objects with `.output`/`.success` attributes. Production apps use a `_result_dict()` helper to normalize these into plain dicts for reliable field access.

Source: repo:ftl2-servercraft/ftl2_servercraft/scripts/neoforge.py

Example

def _result_dict(result) -> dict:
    if isinstance(result, dict):
        return result
    if isinstance(result, list) and result:
        return _result_dict(result[0])
    if hasattr(result, "output"):
        return _result_dict(result.output)
    return {}

def _failed(result) -> bool:
    if hasattr(result, "success"):
        return not result.success
    d = _result_dict(result)
    return d.get("failed", False) or d.get("rc", 0) != 0

JSON