fix: prevent exception when load prediction data is missing (#925)
Some checks failed
Bump Version / Bump Version Workflow (push) Has been cancelled
docker-build / platform-excludes (push) Has been cancelled
pre-commit / pre-commit (push) Has been cancelled
Run Pytest on Pull Request / test (push) Has been cancelled
docker-build / build (push) Has been cancelled
docker-build / merge (push) Has been cancelled
Close stale pull requests/issues / Find Stale issues and PRs (push) Has been cancelled

Validate solution prediction data before processing.
If required prediction data is missing, the prediction is skipped
instead of raising an exception.

Introduce a new configuration file saving policy to improve loading robustness:
- Exclude computed fields
- Exclude fields set to their default values
- Exclude fields with value None
- Use field aliases
- Recursively remove empty dictionaries and lists
- Ensure general.version is always present and correctly set

When loading older configuration files, computed fields are now stripped
before migration. This further improves backward compatibility and loading
robustness.

Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
This commit is contained in:
Bobby Noelte
2026-03-07 14:46:30 +01:00
committed by GitHub
parent 36e2e4c15b
commit 997e7646e9
21 changed files with 1282 additions and 299 deletions

View File

@@ -300,7 +300,7 @@ def fastapi_admin_database_stats_get() -> dict:
except Exception as e:
trace = "".join(traceback.TracebackException.from_exception(e).format())
raise HTTPException(
status_code=400, detail=f"Error on database statistic retrieval: {e}\n{trace}"
status_code=400, detail=f"Error on database statistic retrieval:\n{e}\n{trace}"
)
return data
@@ -538,7 +538,7 @@ def fastapi_config_put_key(
trace = "".join(traceback.TracebackException.from_exception(e).format())
raise HTTPException(
status_code=400,
detail=f"Error on update of configuration '{path}','{value}': {e}\n{trace}",
detail=f"Error on update of configuration '{path}','{value}':\n{e}\n{trace}",
)
return get_config()
@@ -937,7 +937,7 @@ async def fastapi_prediction_update(
trace = "".join(traceback.TracebackException.from_exception(e).format())
raise HTTPException(
status_code=400,
detail=f"Error on prediction update: {e}\n{trace}",
detail=f"Error on prediction update:\n{e}\n{trace}",
)
return Response()
@@ -972,7 +972,7 @@ async def fastapi_prediction_update_provider(
trace = "".join(traceback.TracebackException.from_exception(e).format())
raise HTTPException(
status_code=400,
detail=f"Error on prediction update: {e}\n{trace}",
detail=f"Error on prediction update:\n{e}\n{trace}",
)
return Response()