From aceeb26d32277e4be08dc4200153f477c7c23da5 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 12 Feb 2026 10:56:04 -0800 Subject: [PATCH] Allow retrieve to pull specific version --- .../tests/test_api_document_versions.py | 20 +++++++++++++++++++ src/documents/views.py | 19 ++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/documents/tests/test_api_document_versions.py b/src/documents/tests/test_api_document_versions.py index 775de1e0b..4f70222e9 100644 --- a/src/documents/tests/test_api_document_versions.py +++ b/src/documents/tests/test_api_document_versions.py @@ -555,3 +555,23 @@ class TestDocumentVersioningApi(DirectoriesMixin, APITestCase): self.assertEqual(resp.status_code, status.HTTP_200_OK) self.assertEqual(resp.data["content"], "v1-content") + + def test_retrieve_with_version_param_returns_selected_version_content(self) -> None: + root = Document.objects.create( + title="root", + checksum="root", + mime_type="application/pdf", + content="root-content", + ) + v1 = Document.objects.create( + title="v1", + checksum="v1", + mime_type="application/pdf", + root_document=root, + content="v1-content", + ) + + resp = self.client.get(f"/api/documents/{root.id}/?version={v1.id}") + + self.assertEqual(resp.status_code, status.HTTP_200_OK) + self.assertEqual(resp.data["content"], "v1-content") diff --git a/src/documents/views.py b/src/documents/views.py index 804fd2c45..cd24a78d1 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -856,6 +856,25 @@ class DocumentViewSet( return Response({"root_id": root_doc.id}) + def retrieve( + self, + request: Request, + *args: Any, + **kwargs: Any, + ) -> Response: + response = super().retrieve(request, *args, **kwargs) + if ( + "version" not in request.query_params + or not isinstance(response.data, dict) + or "content" not in response.data + ): + return response + + root_doc = self.get_object() + content_doc = self._resolve_file_doc(root_doc, request) + response.data["content"] = content_doc.content or "" + return response + def update(self, request, *args, **kwargs): partial = kwargs.pop("partial", False) root_doc = self.get_object()