From 47ccd7d394b3c4c11ad96afbc2a0514b4fe4eca4 Mon Sep 17 00:00:00 2001 From: charles Date: Fri, 24 Apr 2026 17:49:09 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=A8(backend)=20fix=20is=5Factive=20in?= =?UTF-8?q?=20SearchIndexer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit here are 2 fixes for - is_active is already True. it does not take deleted_at into account. - item.reach can be None but Find accepts no reach but not a reach of None. Signed-off-by: charles --- CHANGELOG.md | 5 ++++- src/backend/core/services/search_indexers.py | 10 +++++++--- .../core/tests/test_services_search_indexers.py | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe83cc081..e7255acae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ and this project adheres to - 🔥(backend) remove mirroring feature +### Fixed + +- 🐛(backend) fix indexing payload is_active and reach + ## [v0.17.0] - 2026-04-23 ### Added @@ -37,7 +41,6 @@ and this project adheres to - 🐛(backend) fix openapi schema for item access endpoints - 🐛(backend) load jwks url when OIDC_RS_PRIVATE_KEY_STR is set - ## [v0.16.0] - 2026-04-09 ### Added diff --git a/src/backend/core/services/search_indexers.py b/src/backend/core/services/search_indexers.py index 10aef550a..515221f8c 100644 --- a/src/backend/core/services/search_indexers.py +++ b/src/backend/core/services/search_indexers.py @@ -305,14 +305,14 @@ def serialize_item(self, item, accesses): # The deleted items are still accessible in Drive (not in Docs !) # See in V2 for handling hard deleted ones - is_active = True + is_active = item.deleted_at is None and item.ancestors_deleted_at is None # There is no endpoint in Find API for inactive items so we index it # again with an empty content. if is_active and self.can_serialize_content(item): content = self.to_text(item) - return { + payload = { "id": str(item.id), "title": item.title or "", "mimetype": item.mimetype or "", @@ -325,11 +325,15 @@ def serialize_item(self, item, accesses): "updated_at": item.updated_at.isoformat(), "users": list(accesses.get(doc_path, {}).get("users", set())), "groups": list(accesses.get(doc_path, {}).get("teams", set())), - "reach": str(item.link_reach), "size": item.size or 0, "is_active": is_active, } + if item.link_reach: + payload["reach"] = str(item.link_reach) + + return payload + # pylint: disable-next=too-many-arguments,too-many-positional-arguments def search(self, text, token, visited=(), nb_results=None): """ diff --git a/src/backend/core/tests/test_services_search_indexers.py b/src/backend/core/tests/test_services_search_indexers.py index 295ef5f86..1d2dabbce 100644 --- a/src/backend/core/tests/test_services_search_indexers.py +++ b/src/backend/core/tests/test_services_search_indexers.py @@ -454,7 +454,7 @@ def test_services_search_indexers_serialize_document_soft_deleted(): result = indexer.serialize_item(item, {}) # Still accessible through the thrashbin - assert result["is_active"] is True + assert result["is_active"] is False assert result["content"] == "This is a text file content"