def range(self, lower, upper): self._check_type(lower) self._check_type(upper) if self.field.type_ not in ( int, float, datetime.date, datetime.time, datetime.datetime, ): raise TypeError("Range is only valid for number types") if self.field.type_ in (datetime.date, datetime.time, datetime.datetime): lower = _handle_datetimes(lower) upper = _handle_datetimes(upper) if upper <= lower: raise InvalidDetaQuery("Lower must be less than upper") return DetaQuery(condition=f"{self.field.name}?r", value=[lower, upper])
def contains(self, other: str): if not isinstance(other, str) or self.field.type_ in NON_STR_TYPES: raise InvalidDetaQuery( "Contains is only valid for strings or lists of strings") return DetaQuery(condition=f"{self.field.name}?contains", value=other)
def _query_expression(self, operator, data): if isinstance(data, BaseModel): data = ujson.loads(data.json()) return DetaQuery(condition=f"{self.field.name}?{operator}", value=data)
def __eq__(self, other): self._check_type(other) return DetaQuery(condition=self.field.name, value=_handle_datetimes(other))
def query_four(): return DetaQuery(condition="condition4", value="value4")
def query_three(): return DetaQuery(condition="condition3", value="value3")
def query_two(): return DetaQuery(condition="condition2", value="value2")
def query_one(): return DetaQuery(condition="condition1", value="value1")
def test_init(): item = DetaQuery(condition="condition", value="value") assert item.condition == "condition" assert item.value == "value"