diff --git a/server/davidia/server/fastapi_utils.py b/server/davidia/server/fastapi_utils.py index 93a73ce..8ffde5f 100644 --- a/server/davidia/server/fastapi_utils.py +++ b/server/davidia/server/fastapi_utils.py @@ -148,14 +148,15 @@ async def root_request(payload: MyModel) -> OtherModel: def _instantiate_obj(model_class, obj): if isinstance(model_class, UnionType): + excs = {} for m in get_args(model_class): try: return m.model_validate(obj) - except ValidationError: - logger.warning( - "Could not validate as %s: %s", m, obj, exc_info=True - ) + except ValidationError as e: + excs[m] = e logger.error("No valid models for", obj) + for m,e in excs.items(): + logger.error("%s: %s", m, e) return None if isinstance(obj, BaseModel): diff --git a/server/demos/simple.py b/server/demos/simple.py index 73394a0..6853c38 100644 --- a/server/demos/simple.py +++ b/server/demos/simple.py @@ -1,3 +1,4 @@ +from davidia.models.selections import AnySelection from time import sleep import numpy as np @@ -179,8 +180,7 @@ def table_demo(p): def regions_demo(p): - region( - selections=[ + selections: list[AnySelection] = [ RectangularSelection( start=(3.5, 6.5), lengths=(3.2, 2.0), @@ -191,7 +191,9 @@ def regions_demo(p): LinearSelection( start=(6.9, 10.5), length=2.0, angle=1.1, colour="cyan", alpha=0.6 ), - ], + ] + region( + selections=selections, plot_id=f"plot_{p}", ) rs = region(plot_id=f"plot_{p}")