From 1ff7ac1d121e82939113403cc4e85c650be6359e Mon Sep 17 00:00:00 2001 From: Kaladaran Date: Mon, 23 Oct 2023 17:45:18 +0200 Subject: [PATCH] added 'not' modifier to search query modifiers are now separated by '__' --- eveal/main.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/eveal/main.py b/eveal/main.py index ac8cd6f..6a6dfc0 100644 --- a/eveal/main.py +++ b/eveal/main.py @@ -51,15 +51,23 @@ 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[Literal["id", "name", "name_i", "marketgroup_id", "metagroup_id"], int | str]], db: Session = Depends(get_session)) -> List[models_sde.SDEType]: +async def sde_types_search(query: List[Dict[str, int | str]], db: Session = Depends(get_session)) -> List[models_sde.SDEType]: items = [] for q in query: qitems = db.query(models_sde.SDEType) for k in q.keys(): - if k.endswith("_i"): - qitems = qitems.filter(getattr(models_sde.SDEType, k[:-2]).ilike(f"%{q[k]}%")) # change to icontains when sqlmodel start using sqlalchemy > 2.0 + value = q[k] + key, mod = k.split("__", 1) if "__" in k else (k, "") + + if "i" in mod: + condition = getattr(models_sde.SDEType, key).ilike(f"%{value}%") # change to icontains when sqlmodel start using sqlalchemy > 2.0 else: - qitems = qitems.filter(getattr(models_sde.SDEType, k) == q[k]) + condition = getattr(models_sde.SDEType, key) == value + + if "not" in mod: + condition = ~condition + + qitems = qitems.filter(condition) items.extend(qitems.all()) return items