Skip to content

Commit 514bc28

Browse files
committed
recalculate-the-document-count-of-a-collection
1 parent 76c58c3 commit 514bc28

File tree

3 files changed

+34
-7
lines changed

3 files changed

+34
-7
lines changed

arangoasync/collection.py

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
CollectionChecksumError,
2020
CollectionConfigureError,
2121
CollectionPropertiesError,
22+
CollectionRecalculateCountError,
2223
CollectionRenameError,
2324
CollectionResponsibleShardError,
2425
CollectionRevisionError,
@@ -489,6 +490,26 @@ def response_handler(resp: Response) -> bool:
489490

490491
return await self._executor.execute(request, response_handler)
491492

493+
async def recalculate_count(self) -> None:
494+
"""Recalculate the document count.
495+
496+
Raises:
497+
CollectionRecalculateCountError: If re-calculation fails.
498+
499+
References:
500+
- `recalculate-the-document-count-of-a-collection <https://docs.arangodb.com/stable/develop/http-api/collections/#recalculate-the-document-count-of-a-collection>`__
501+
""" # noqa: E501
502+
request = Request(
503+
method=Method.PUT,
504+
endpoint=f"/_api/collection/{self.name}/recalculateCount",
505+
)
506+
507+
def response_handler(resp: Response) -> None:
508+
if not resp.is_success:
509+
raise CollectionRecalculateCountError(resp, request)
510+
511+
await self._executor.execute(request, response_handler)
512+
492513
async def properties(self) -> Result[CollectionProperties]:
493514
"""Return the full properties of the current collection.
494515
@@ -577,7 +598,7 @@ def response_handler(resp: Response) -> CollectionProperties:
577598

578599
return await self._executor.execute(request, response_handler)
579600

580-
async def rename(self, new_name: str) -> Result[bool]:
601+
async def rename(self, new_name: str) -> None:
581602
"""Rename the collection.
582603
583604
Renames may not be reflected immediately in async execution, batch
@@ -590,9 +611,6 @@ async def rename(self, new_name: str) -> Result[bool]:
590611
Args:
591612
new_name (str): New collection name.
592613
593-
Returns:
594-
bool: `True` if the collection was renamed successfully.
595-
596614
Raises:
597615
CollectionRenameError: If rename fails.
598616
@@ -606,14 +624,13 @@ async def rename(self, new_name: str) -> Result[bool]:
606624
data=self.serializer.dumps(data),
607625
)
608626

609-
def response_handler(resp: Response) -> bool:
627+
def response_handler(resp: Response) -> None:
610628
if not resp.is_success:
611629
raise CollectionRenameError(resp, request)
612630
self._name = new_name
613631
self._id_prefix = f"{new_name}/"
614-
return True
615632

616-
return await self._executor.execute(request, response_handler)
633+
await self._executor.execute(request, response_handler)
617634

618635
async def truncate(
619636
self,

arangoasync/exceptions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,10 @@ class CollectionPropertiesError(ArangoServerError):
207207
"""Failed to retrieve collection properties."""
208208

209209

210+
class CollectionRecalculateCountError(ArangoServerError):
211+
"""Failed to recalculate document count."""
212+
213+
210214
class CollectionRenameError(ArangoServerError):
211215
"""Failed to rename collection."""
212216

tests/test_collection.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
CollectionChecksumError,
88
CollectionConfigureError,
99
CollectionPropertiesError,
10+
CollectionRecalculateCountError,
1011
CollectionRenameError,
1112
CollectionResponsibleShardError,
1213
CollectionRevisionError,
@@ -78,6 +79,11 @@ async def test_collection_misc_methods(doc_col, bad_col, docs, cluster):
7879
with pytest.raises(CollectionChecksumError):
7980
await bad_col.checksum()
8081

82+
# Recalculate count
83+
with pytest.raises(CollectionRecalculateCountError):
84+
await bad_col.recalculate_count()
85+
await doc_col.recalculate_count()
86+
8187

8288
@pytest.mark.asyncio
8389
async def test_collection_rename(cluster, db, bad_col, docs):

0 commit comments

Comments
 (0)