From 75d7d7ab97151a996d80a7b8fe812d2ebbefe2cd Mon Sep 17 00:00:00 2001 From: Anthony Mahanna Date: Wed, 30 Aug 2023 16:34:43 -0400 Subject: [PATCH 1/2] initial commit (new test should fail) --- arango/utils.py | 2 ++ tests/test_document.py | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/arango/utils.py b/arango/utils.py index 3804e391..3599d78f 100644 --- a/arango/utils.py +++ b/arango/utils.py @@ -6,6 +6,7 @@ "is_none_or_str", ] +# import json import logging from contextlib import contextmanager from typing import Any, Iterator, Sequence, Union @@ -125,5 +126,6 @@ def format_condition(key: str, value: Any) -> str: return f"doc.{key} == {value}" + # conditions = [f"doc.{k} == {json.dumps(v)}" for k, v in filters.items()] conditions = [format_condition(k, v) for k, v in filters.items()] return "FILTER " + " AND ".join(conditions) diff --git a/tests/test_document.py b/tests/test_document.py index 129ddeb1..82110594 100644 --- a/tests/test_document.py +++ b/tests/test_document.py @@ -1175,6 +1175,12 @@ def test_document_find(col, bad_col, docs): assert len(found) == 1 assert found[0]["_key"] == "1" + # Test find with dict value with None + data = {"dict": {"foo": "bar", "foo_2": None}} + col.insert(data) + found = list(col.find(data)) + assert len(found) == 1 + # Test find with multiple conditions found = list(col.find({"val": 2, "text": "foo"})) assert len(found) == 1 From 3b048b58ad23aa0486aadffa79e8c353bd9228db Mon Sep 17 00:00:00 2001 From: Anthony Mahanna Date: Wed, 30 Aug 2023 16:39:50 -0400 Subject: [PATCH 2/2] fix: build_filter_conditions --- arango/utils.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/arango/utils.py b/arango/utils.py index 3599d78f..8ad925c5 100644 --- a/arango/utils.py +++ b/arango/utils.py @@ -6,7 +6,7 @@ "is_none_or_str", ] -# import json +import json import logging from contextlib import contextmanager from typing import Any, Iterator, Sequence, Union @@ -120,12 +120,5 @@ def build_filter_conditions(filters: Json) -> str: if not filters: return "" - def format_condition(key: str, value: Any) -> str: - if isinstance(value, str): - return f'doc.{key} == "{value}"' - - return f"doc.{key} == {value}" - - # conditions = [f"doc.{k} == {json.dumps(v)}" for k, v in filters.items()] - conditions = [format_condition(k, v) for k, v in filters.items()] + conditions = [f"doc.{k} == {json.dumps(v)}" for k, v in filters.items()] return "FILTER " + " AND ".join(conditions)