[docs]classWeaviateTranslator(Visitor):"""Translate `Weaviate` internal query language elements to valid filters."""allowed_operators=[Operator.AND,Operator.OR]"""Subset of allowed logical operators."""allowed_comparators=[Comparator.EQ,Comparator.NE,Comparator.GTE,Comparator.LTE,Comparator.LT,Comparator.GT,]def_format_func(self,func:Union[Operator,Comparator])->str:self._validate_func(func)# https://weaviate.io/developers/weaviate/api/graphql/filtersmap_dict={Operator.AND:"And",Operator.OR:"Or",Comparator.EQ:"Equal",Comparator.NE:"NotEqual",Comparator.GTE:"GreaterThanEqual",Comparator.LTE:"LessThanEqual",Comparator.LT:"LessThan",Comparator.GT:"GreaterThan",}returnmap_dict[func]
[docs]defvisit_comparison(self,comparison:Comparison)->Dict:value_type="valueText"value=comparison.valueifisinstance(comparison.value,bool):value_type="valueBoolean"elifisinstance(comparison.value,float):value_type="valueNumber"elifisinstance(comparison.value,int):value_type="valueInt"elif(isinstance(comparison.value,dict)andcomparison.value.get("type")=="date"):value_type="valueDate"# ISO 8601 timestamp, formatted as RFC3339date=datetime.strptime(comparison.value["date"],"%Y-%m-%d")value=date.strftime("%Y-%m-%dT%H:%M:%SZ")filter={"path":[comparison.attribute],"operator":self._format_func(comparison.comparator),value_type:value,}returnfilter