Skip to content

Commit dcdcd80

Browse files
committed
feat: Use HEAD HTTP method to check if a document exists
1 parent ead2e66 commit dcdcd80

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

arango/collection.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,7 @@ def has(
629629
headers["x-arango-allow-dirty-read"] = "true"
630630

631631
request = Request(
632-
method="get",
632+
method="head",
633633
endpoint=f"/_api/document/{handle}",
634634
headers=headers,
635635
read=self.name,
@@ -640,9 +640,11 @@ def response_handler(resp: Response) -> bool:
640640
return False
641641
if resp.status_code == 412:
642642
raise DocumentRevisionError(resp, request)
643+
if resp.status_code == 404:
644+
return False
643645
if not resp.is_success:
644646
raise DocumentInError(resp, request)
645-
return bool(resp.body)
647+
return True
646648

647649
return self._execute(request, response_handler)
648650

tests/test_document.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1553,7 +1553,7 @@ def test_document_has(col, bad_col, docs):
15531553

15541554
with assert_raises(DocumentRevisionError) as err:
15551555
col.has(doc_input, rev=bad_rev, check_rev=True)
1556-
assert err.value.error_code == 1200
1556+
assert err.value.error_code in {412, 1200}
15571557

15581558
# Test existing documents with bad revision
15591559
for doc_input in [
@@ -1563,15 +1563,15 @@ def test_document_has(col, bad_col, docs):
15631563
]:
15641564
with assert_raises(DocumentRevisionError) as err:
15651565
col.has(doc_input)
1566-
assert err.value.error_code == 1200
1566+
assert err.value.error_code in {412, 1200}
15671567

15681568
with assert_raises(DocumentRevisionError) as err:
15691569
col.has(doc_input, rev=bad_rev)
1570-
assert err.value.error_code == 1200
1570+
assert err.value.error_code in {412, 1200}
15711571

15721572
with assert_raises(DocumentRevisionError) as err:
15731573
col.has(doc_input, rev=bad_rev, check_rev=True)
1574-
assert err.value.error_code == 1200
1574+
assert err.value.error_code in {412, 1200}
15751575

15761576
assert doc_input in col
15771577
assert col.has(doc_input, rev=rev, check_rev=True) is True
@@ -1650,12 +1650,12 @@ def test_document_has(col, bad_col, docs):
16501650
# Test get with bad database
16511651
with assert_raises(DocumentInError) as err:
16521652
bad_col.has(doc_key)
1653-
assert err.value.error_code in {11, 1228}
1653+
assert err.value.error_code in {11, 401}
16541654

16551655
# Test contains with bad database
16561656
with assert_raises(DocumentInError) as err:
16571657
assert doc_key in bad_col
1658-
assert err.value.error_code in {11, 1228}
1658+
assert err.value.error_code in {11, 401}
16591659

16601660

16611661
def test_document_get(col, bad_col, docs):

0 commit comments

Comments
 (0)