From c215283059c8ec0396c96280a481f75b1306a53a Mon Sep 17 00:00:00 2001 From: Kaladaran Date: Mon, 23 Oct 2023 19:56:47 +0200 Subject: [PATCH] add "in" mod in search --- eveal/main.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/eveal/main.py b/eveal/main.py index 46532b7..8aeb930 100644 --- a/eveal/main.py +++ b/eveal/main.py @@ -51,21 +51,25 @@ async def sde_types(sde_type: int | str, db: Session = Depends(get_session)) -> @app.post("/sde/types/search") -async def sde_types_search(query: List[Dict[str, int | str | None]], db: Session = Depends(get_session)) -> List[models_sde.SDEType]: +async def sde_types_search(query: List[Dict[str, int | str | None | List]], db: Session = Depends(get_session)) -> List[models_sde.SDEType]: items = [] for q in query: print(q) qitems = db.query(models_sde.SDEType) for k in q.keys(): value = q[k] - key, mod = k.split("__", 1) if "__" in k else (k, "") - if "i" in mod: + tokens = k.split("__") + key, mods = tokens[0], tokens[1:] + + if "i" in mods: condition = getattr(models_sde.SDEType, key).ilike(f"%{value}%") # change to icontains when sqlmodel start using sqlalchemy > 2.0 + elif "in" in mods: + condition = getattr(models_sde.SDEType, key).in_(value) else: condition = getattr(models_sde.SDEType, key) == value - if "not" in mod: + if "not" in mods: condition = ~condition qitems = qitems.filter(condition)