-
Notifications
You must be signed in to change notification settings - Fork 141
Expand file tree
/
Copy pathparser.py
More file actions
56 lines (47 loc) · 1.71 KB
/
parser.py
File metadata and controls
56 lines (47 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from typing import List, Optional
from chromadb import Where
from chromadb.types import OperatorExpression
from engine.base_client import IncompatibilityError
from engine.base_client.parser import BaseConditionParser, FieldValue
class ChromaConditionParser(BaseConditionParser):
def build_condition(
self,
and_subfilters: Optional[List[Where]],
or_subfilters: Optional[List[Where]],
) -> Where:
condition: Where = {}
if and_subfilters is not None:
if len(and_subfilters) >= 2:
condition["$and"] = and_subfilters
elif len(and_subfilters) == 1:
condition = {**condition, **and_subfilters[0]}
if or_subfilters is not None:
if len(or_subfilters) >= 2:
condition["$or"] = or_subfilters
elif len(or_subfilters) == 1:
condition = {**condition, **or_subfilters[0]}
return condition
def build_exact_match_filter(self, field_name: str, value: FieldValue) -> Where:
return {field_name: value}
def build_range_filter(
self,
field_name: str,
lt: Optional[FieldValue],
gt: Optional[FieldValue],
lte: Optional[FieldValue],
gte: Optional[FieldValue],
) -> Where:
raw_filters: OperatorExpression = {
"$lt": lt,
"$gt": gt,
"$lte": lte,
"$gte": gte,
}
filters: OperatorExpression = {
k: v for k, v in raw_filters.items() if v is not None
}
return {field_name: filters}
def build_geo_filter(
self, field_name: str, lat: float, lon: float, radius: float
) -> Where:
raise IncompatibilityError