Skip to content

Commit

Permalink
Merge pull request #45 from certego/develop
Browse files Browse the repository at this point in the history
0.7.0
  • Loading branch information
0ssigeno authored Dec 15, 2022
2 parents 9d45a56 + 314e9e8 commit 91a621d
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 14 deletions.
22 changes: 14 additions & 8 deletions atlasq/queryset/transform.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,15 @@ class AtlasTransform:
negative_keywords = ["ne", "nin", "not"]
exists_keywords = ["exists"]
range_keywords = ["gt", "gte", "lt", "lte"]
equals_keywords = ["exact", "iexact", "eq"]
equals_keywords = []
text_keywords = [
"contains",
"icontains",
"iwholeword",
"wholeword",
"exact",
"iexact",
"eq",
]
regex_keywords = ["regex", "iregex"]
size_keywords = ["size"]
Expand Down Expand Up @@ -108,12 +111,13 @@ def _exists(self, path: str) -> Dict:
return {"exists": {"path": path}}

def _range(
self, path: str, value: Union[int, datetime.datetime], keyword: str
self, path: str, value: Union[int, datetime.datetime], keywords: List[str]
) -> Dict:
if keyword not in self.range_keywords:
raise AtlasFieldError(
f"Range search for {path} must be {self.range_keywords}, not {keyword}"
)
for keyword in keywords:
if keyword not in self.range_keywords:
raise AtlasFieldError(
f"Range search for {path} must be {self.range_keywords}, not {keyword}"
)
if isinstance(value, datetime.datetime):
value = value.replace(microsecond=0)
elif isinstance(value, int):
Expand All @@ -122,7 +126,7 @@ def _range(
raise AtlasFieldError(
f"Range search for {path} must have a value of datetime or integer"
)
return {"range": {"path": path, keyword: value}}
return {"range": {"path": path, **{keyword: value for keyword in keywords}}}

def _equals(self, path: str, value: Any) -> Dict:
return {
Expand Down Expand Up @@ -214,7 +218,7 @@ def transform(self) -> Tuple[List[Dict], List[Dict], List[Dict]]:
break

if keyword in self.range_keywords:
obj = self._range(path, value, keyword)
obj = self._range(path, value, [keyword])
break
if keyword in self.equals_keywords:
obj = self._equals(path, value)
Expand All @@ -234,6 +238,8 @@ def transform(self) -> Tuple[List[Dict], List[Dict], List[Dict]]:
value_to_check = value
if isinstance(value_to_check, (bool, ObjectId)):
obj = self._equals(path, value)
elif isinstance(value_to_check, int):
obj = self._range(path, value, ["gte", "lte"])
else:
obj = self._text(path, value)

Expand Down
10 changes: 5 additions & 5 deletions tests/queryset/test_transform.py
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@ def test__range_date_valid(self):
q = AtlasQ(f=3)
t = AtlasTransform(q.query, AtlasIndex("test"))
time = datetime.datetime.now()
res = t._range("field", time, "lte")
res = t._range("field", time, ["lte"])
self.assertEqual(
res,
{
Expand All @@ -562,27 +562,27 @@ def test__range_date_valid(self):
def test__range_integer_valid(self):
q = AtlasQ(f=3)
t = AtlasTransform(q.query, AtlasIndex("test"))
res = t._range("field", 3, "lte")
res = t._range("field", 3, ["lte"])
self.assertEqual(res, {"range": {"path": "field", "lte": 3}})

def test__range_date_invalid(self):
q = AtlasQ(f=3)
t = AtlasTransform(q.query, AtlasIndex("test"))
time = datetime.datetime.now()
with self.assertRaises(AtlasFieldError):
t._range("field", time, "wat")
t._range("field", time, ["wat"])

def test__range_none(self):
q = AtlasQ(f=3)
t = AtlasTransform(q.query, AtlasIndex("test"))
with self.assertRaises(AtlasFieldError):
t._range("field", None, "lte")
t._range("field", None, ["lte"])

def test__range_string(self):
q = AtlasQ(f=3)
t = AtlasTransform(q.query, AtlasIndex("test"))
with self.assertRaises(AtlasFieldError):
t._range("field", "3", "lte")
t._range("field", "3", ["lte"])

def test__equals(self):
q = AtlasQ(f=3)
Expand Down
2 changes: 1 addition & 1 deletion version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
VERSION = "0.6.0"
VERSION = "0.7.0"

0 comments on commit 91a621d

Please sign in to comment.