Skip to content

Commit 2c2d143

Browse files
committed
Refactor utils function
1 parent f9edd1c commit 2c2d143

File tree

1 file changed

+58
-55
lines changed

1 file changed

+58
-55
lines changed

django_mongodb_backend/expressions/search.py

Lines changed: 58 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,16 @@
33
from django.db.models.expressions import F, Value
44

55

6+
def cast_as_value(value):
7+
if value is None:
8+
return None
9+
return Value(value) if not hasattr(value, "resolve_expression") else value
10+
11+
12+
def cast_as_field(path):
13+
return F(path) if isinstance(path, str) else path
14+
15+
616
class Operator:
717
AND = "AND"
818
OR = "OR"
@@ -87,16 +97,6 @@ def as_sql(self, compiler, connection):
8797
def get_source_expressions(self):
8898
return []
8999

90-
@staticmethod
91-
def cast_as_value(value):
92-
if value is None:
93-
return None
94-
return Value(value) if not hasattr(value, "resolve_expression") else value
95-
96-
@staticmethod
97-
def cast_as_field(path):
98-
return F(path) if isinstance(path, str) else path
99-
100100
def _get_indexed_fields(self, mappings):
101101
for field, definition in mappings.get("fields", {}).items():
102102
yield field
@@ -145,10 +145,10 @@ class SearchAutocomplete(SearchExpression):
145145
"""
146146

147147
def __init__(self, path, query, fuzzy=None, token_order=None, score=None):
148-
self.path = self.cast_as_field(path)
149-
self.query = self.cast_as_value(query)
150-
self.fuzzy = self.cast_as_value(fuzzy)
151-
self.token_order = self.cast_as_value(token_order)
148+
self.path = cast_as_field(path)
149+
self.query = cast_as_value(query)
150+
self.fuzzy = cast_as_value(fuzzy)
151+
self.token_order = cast_as_value(token_order)
152152
self.score = score
153153
super().__init__()
154154

@@ -197,8 +197,8 @@ class SearchEquals(SearchExpression):
197197
"""
198198

199199
def __init__(self, path, value, score=None):
200-
self.path = self.cast_as_field(path)
201-
self.value = self.cast_as_value(value)
200+
self.path = cast_as_field(path)
201+
self.value = cast_as_value(value)
202202
self.score = score
203203
super().__init__()
204204

@@ -242,7 +242,7 @@ class SearchExists(SearchExpression):
242242
"""
243243

244244
def __init__(self, path, score=None):
245-
self.path = self.cast_as_field(path)
245+
self.path = cast_as_field(path)
246246
self.score = score
247247
super().__init__()
248248

@@ -266,8 +266,8 @@ def search_operator(self, compiler, connection):
266266

267267
class SearchIn(SearchExpression):
268268
def __init__(self, path, value, score=None):
269-
self.path = self.cast_as_field(path)
270-
self.value = self.cast_as_value(value)
269+
self.path = cast_as_field(path)
270+
self.value = cast_as_value(value)
271271
self.score = score
272272
super().__init__()
273273

@@ -314,10 +314,10 @@ class SearchPhrase(SearchExpression):
314314
"""
315315

316316
def __init__(self, path, query, slop=None, synonyms=None, score=None):
317-
self.path = self.cast_as_field(path)
318-
self.query = self.cast_as_value(query)
319-
self.slop = self.cast_as_value(slop)
320-
self.synonyms = self.cast_as_value(synonyms)
317+
self.path = cast_as_field(path)
318+
self.query = cast_as_value(query)
319+
self.slop = cast_as_value(slop)
320+
self.synonyms = cast_as_value(synonyms)
321321
self.score = score
322322
super().__init__()
323323

@@ -366,8 +366,8 @@ class SearchQueryString(SearchExpression):
366366
"""
367367

368368
def __init__(self, path, query, score=None):
369-
self.path = self.cast_as_field(path)
370-
self.query = self.cast_as_value(query)
369+
self.path = cast_as_field(path)
370+
self.query = cast_as_value(query)
371371
self.score = score
372372
super().__init__()
373373

@@ -414,11 +414,11 @@ class SearchRange(SearchExpression):
414414
"""
415415

416416
def __init__(self, path, lt=None, lte=None, gt=None, gte=None, score=None):
417-
self.path = self.cast_as_field(path)
418-
self.lt = self.cast_as_value(lt)
419-
self.lte = self.cast_as_value(lte)
420-
self.gt = self.cast_as_value(gt)
421-
self.gte = self.cast_as_value(gte)
417+
self.path = cast_as_field(path)
418+
self.lt = cast_as_value(lt)
419+
self.lte = cast_as_value(lte)
420+
self.gt = cast_as_value(gt)
421+
self.gte = cast_as_value(gte)
422422
self.score = score
423423
super().__init__()
424424

@@ -471,9 +471,9 @@ class SearchRegex(SearchExpression):
471471
"""
472472

473473
def __init__(self, path, query, allow_analyzed_field=None, score=None):
474-
self.path = self.cast_as_field(path)
475-
self.query = self.cast_as_value(query)
476-
self.allow_analyzed_field = self.cast_as_value(allow_analyzed_field)
474+
self.path = cast_as_field(path)
475+
self.query = cast_as_value(query)
476+
self.allow_analyzed_field = cast_as_value(allow_analyzed_field)
477477
self.score = score
478478
super().__init__()
479479

@@ -522,11 +522,11 @@ class SearchText(SearchExpression):
522522
"""
523523

524524
def __init__(self, path, query, fuzzy=None, match_criteria=None, synonyms=None, score=None):
525-
self.path = self.cast_as_field(path)
526-
self.query = self.cast_as_value(query)
527-
self.fuzzy = self.cast_as_value(fuzzy)
528-
self.match_criteria = self.cast_as_value(match_criteria)
529-
self.synonyms = self.cast_as_value(synonyms)
525+
self.path = cast_as_field(path)
526+
self.query = cast_as_value(query)
527+
self.fuzzy = cast_as_value(fuzzy)
528+
self.match_criteria = cast_as_value(match_criteria)
529+
self.synonyms = cast_as_value(synonyms)
530530
self.score = score
531531
super().__init__()
532532

@@ -579,9 +579,9 @@ class SearchWildcard(SearchExpression):
579579
"""
580580

581581
def __init__(self, path, query, allow_analyzed_field=None, score=None):
582-
self.path = self.cast_as_field(path)
583-
self.query = self.cast_as_value(query)
584-
self.allow_analyzed_field = self.cast_as_value(allow_analyzed_field)
582+
self.path = cast_as_field(path)
583+
self.query = cast_as_value(query)
584+
self.allow_analyzed_field = cast_as_value(allow_analyzed_field)
585585
self.score = score
586586
super().__init__()
587587

@@ -628,9 +628,9 @@ class SearchGeoShape(SearchExpression):
628628
"""
629629

630630
def __init__(self, path, relation, geometry, score=None):
631-
self.path = self.cast_as_field(path)
632-
self.relation = self.cast_as_value(relation)
633-
self.geometry = self.cast_as_value(geometry)
631+
self.path = cast_as_field(path)
632+
self.relation = cast_as_value(relation)
633+
self.geometry = cast_as_value(geometry)
634634
self.score = score
635635
super().__init__()
636636

@@ -677,9 +677,9 @@ class SearchGeoWithin(SearchExpression):
677677
"""
678678

679679
def __init__(self, path, kind, geo_object, score=None):
680-
self.path = self.cast_as_field(path)
681-
self.kind = self.cast_as_value(kind)
682-
self.geo_object = self.cast_as_value(geo_object)
680+
self.path = cast_as_field(path)
681+
self.kind = cast_as_value(kind)
682+
self.geo_object = cast_as_value(geo_object)
683683
self.score = score
684684
super().__init__()
685685

@@ -722,7 +722,7 @@ class SearchMoreLikeThis(SearchExpression):
722722
"""
723723

724724
def __init__(self, documents, score=None):
725-
self.documents = self.cast_as_value(documents)
725+
self.documents = cast_as_value(documents)
726726
self.score = score
727727
super().__init__()
728728

@@ -929,12 +929,12 @@ def __init__(
929929
exact=None,
930930
filter=None,
931931
):
932-
self.path = self.cast_as_field(path)
933-
self.query_vector = self.cast_as_value(query_vector)
934-
self.limit = self.cast_as_value(limit)
935-
self.num_candidates = self.cast_as_value(num_candidates)
936-
self.exact = self.cast_as_value(exact)
937-
self.filter = self.cast_as_value(filter)
932+
self.path = cast_as_field(path)
933+
self.query_vector = cast_as_value(query_vector)
934+
self.limit = cast_as_value(limit)
935+
self.num_candidates = cast_as_value(num_candidates)
936+
self.exact = cast_as_value(exact)
937+
self.filter = cast_as_value(filter)
938938
super().__init__()
939939

940940
def __invert__(self):
@@ -1001,8 +1001,11 @@ def as_mql(self, compiler, connection):
10011001
return {"$vectorSearch": params}
10021002

10031003

1004-
class SearchScoreOption:
1004+
class SearchScoreOption(Expression):
10051005
"""Class to mutate scoring on a search operation"""
10061006

10071007
def __init__(self, definitions=None):
10081008
self.definitions = definitions
1009+
1010+
def as_mql(self, compiler, connection):
1011+
return self.definitions

0 commit comments

Comments
 (0)