From e18b21639c371fb9dd7732629959c78e52e7ee4a Mon Sep 17 00:00:00 2001 From: allegroai <> Date: Mon, 3 May 2021 18:13:00 +0300 Subject: [PATCH] Fix regex query for fields containing "_" --- apiserver/database/model/base.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/apiserver/database/model/base.py b/apiserver/database/model/base.py index 10a0e40..d1a0c1e 100644 --- a/apiserver/database/model/base.py +++ b/apiserver/database/model/base.py @@ -306,11 +306,18 @@ class GetMixin(PropsMixin): raise MakeGetAllQueryError("incorrect field format", field) if not data.fields: break - regex = RegexWrapper(data.pattern, flags=re.IGNORECASE) - sep_fields = [f.replace(".", "__") for f in data.fields] - q = reduce( - lambda a, x: func(a, RegexQ(**{x: regex})), sep_fields, RegexQ() - ) + if any("._" in f for f in data.fields): + q = reduce( + lambda a, x: func(a, Q(__raw__={x: {"$regex": data.pattern, "$options": "i"}})), + data.fields, + Q() + ) + else: + regex = RegexWrapper(data.pattern, flags=re.IGNORECASE) + sep_fields = [f.replace(".", "__") for f in data.fields] + q = reduce( + lambda a, x: func(a, RegexQ(**{x: regex})), sep_fields, RegexQ() + ) query = query & q return query & RegexQ(**dict_query)