From a88b318d7dcbc4960f5e808a1f256e66b2251e0c Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Mon, 26 Dec 2022 13:33:43 -0800 Subject: [PATCH] Simplifies file upload naming to use the document name, instead in needing to keep it around --- src/documents/tests/test_api.py | 9 +++++++-- src/documents/views.py | 19 +++++++++---------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index dace48578..4547288d2 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -7,6 +7,7 @@ import tempfile import urllib.request import uuid import zipfile +from pathlib import Path from unittest import mock from unittest.mock import MagicMock @@ -808,7 +809,9 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): m.assert_called_once() args, kwargs = m.call_args - self.assertEqual(kwargs["override_filename"], "simple.pdf") + file_path = Path(args[0]) + self.assertEqual(file_path.name, "simple.pdf") + self.assertIn(Path(settings.SCRATCH_DIR), file_path.parents) self.assertIsNone(kwargs["override_title"]) self.assertIsNone(kwargs["override_correspondent_id"]) self.assertIsNone(kwargs["override_document_type_id"]) @@ -833,7 +836,9 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): m.assert_called_once() args, kwargs = m.call_args - self.assertEqual(kwargs["override_filename"], "simple.pdf") + file_path = Path(args[0]) + self.assertEqual(file_path.name, "simple.pdf") + self.assertIn(Path(settings.SCRATCH_DIR), file_path.parents) self.assertIsNone(kwargs["override_title"]) self.assertIsNone(kwargs["override_correspondent_id"]) self.assertIsNone(kwargs["override_document_type_id"]) diff --git a/src/documents/views.py b/src/documents/views.py index 46cf06cfd..147dd2e07 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -7,6 +7,7 @@ import urllib import uuid import zipfile from datetime import datetime +from pathlib import Path from time import mktime from unicodedata import normalize from urllib.parse import quote @@ -623,20 +624,18 @@ class PostDocumentView(GenericAPIView): os.makedirs(settings.SCRATCH_DIR, exist_ok=True) - with tempfile.NamedTemporaryFile( - prefix="paperless-upload-", - dir=settings.SCRATCH_DIR, - delete=False, - ) as f: - f.write(doc_data) - os.utime(f.name, times=(t, t)) - temp_filename = f.name + temp_file_path = Path(tempfile.mkdtemp(dir=settings.SCRATCH_DIR)) / Path( + doc_name, + ) + + temp_file_path.write_bytes(doc_data) + + os.utime(temp_file_path, times=(t, t)) task_id = str(uuid.uuid4()) async_task = consume_file.delay( - temp_filename, - override_filename=doc_name, + temp_file_path, override_title=title, override_correspondent_id=correspondent_id, override_document_type_id=document_type_id,