]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Fix: export consumption templates & custom fields in exporter (#4825)
authorshamoon <4887959+shamoon@users.noreply.github.com>
Tue, 5 Dec 2023 05:33:15 +0000 (21:33 -0800)
committerGitHub <noreply@github.com>
Tue, 5 Dec 2023 05:33:15 +0000 (21:33 -0800)
docs/changelog.md
src/documents/management/commands/document_exporter.py
src/documents/tests/test_management_exporter.py

index 1ef1a9282e5e980571b90ff899a060bc68446c51..2962c753d63d283330aa4243ec478033508dc62e 100644 (file)
@@ -2,6 +2,10 @@
 
 ## paperless-ngx 2.0.1
 
+### Please Note
+
+Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumption templates or custom fields, we recommend users upgrade to at least v2.1.
+
 ### Bug Fixes
 
 - Fix: Increase field the length for consumption template source [@stumpylog](https://github.com/stumpylog) ([#4719](https://github.com/paperless-ngx/paperless-ngx/pull/4719))
 
 ## paperless-ngx 2.0.0
 
+### Please Note
+
+Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumption templates or custom fields, we recommend users upgrade to at least v2.1.
+
 ### Breaking Changes
 
 - Breaking: Rename the environment variable for self-signed email certificates [@stumpylog](https://github.com/stumpylog) ([#4346](https://github.com/paperless-ngx/paperless-ngx/pull/4346))
index 05c78ea082bf91f0dd0ddb2ed8aeae95d46a4d8c..4f3cb937a8994e758e24e8c5479cdeec6f2d6391 100644 (file)
@@ -23,7 +23,10 @@ from guardian.models import UserObjectPermission
 
 from documents.file_handling import delete_empty_directories
 from documents.file_handling import generate_filename
+from documents.models import ConsumptionTemplate
 from documents.models import Correspondent
+from documents.models import CustomField
+from documents.models import CustomFieldInstance
 from documents.models import Document
 from documents.models import DocumentType
 from documents.models import Note
@@ -292,6 +295,19 @@ class Command(BaseCommand):
                 serializers.serialize("json", GroupObjectPermission.objects.all()),
             )
 
+            manifest += json.loads(
+                serializers.serialize("json", ConsumptionTemplate.objects.all()),
+            )
+
+            manifest += json.loads(
+                serializers.serialize("json", CustomField.objects.all()),
+            )
+
+            if not self.split_manifest:
+                manifest += json.loads(
+                    serializers.serialize("json", CustomFieldInstance.objects.all()),
+                )
+
         # 3. Export files from each document
         for index, document_dict in tqdm.tqdm(
             enumerate(document_manifest),
index 10a27299197d8a9f7ce1060e4420714e0f346975..b4dc5720ae3472b0cfb2b993f1809ddc0fbf4c4d 100644 (file)
@@ -21,7 +21,10 @@ from guardian.models import UserObjectPermission
 from guardian.shortcuts import assign_perm
 
 from documents.management.commands import document_exporter
+from documents.models import ConsumptionTemplate
 from documents.models import Correspondent
+from documents.models import CustomField
+from documents.models import CustomFieldInstance
 from documents.models import Document
 from documents.models import DocumentType
 from documents.models import Note
@@ -89,6 +92,15 @@ class TestExportImport(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
         self.dt1 = DocumentType.objects.create(name="dt")
         self.c1 = Correspondent.objects.create(name="c")
         self.sp1 = StoragePath.objects.create(path="{created_year}-{title}")
+        self.cf1 = CustomField.objects.create(
+            name="Custom Field 1",
+            data_type=CustomField.FieldDataType.STRING,
+        )
+        self.cfi1 = CustomFieldInstance.objects.create(
+            field=self.cf1,
+            value_text="cf instance 1",
+            document=self.d1,
+        )
 
         self.d1.tags.add(self.t1)
         self.d1.correspondent = self.c1
@@ -96,6 +108,9 @@ class TestExportImport(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
         self.d1.save()
         self.d4.storage_path = self.sp1
         self.d4.save()
+
+        self.ct1 = ConsumptionTemplate.objects.create(name="CT 1", filter_path="*")
+
         super().setUp()
 
     def _get_document_from_manifest(self, manifest, id):
@@ -153,7 +168,7 @@ class TestExportImport(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
 
         manifest = self._do_export(use_filename_format=use_filename_format)
 
-        self.assertEqual(len(manifest), 169)
+        self.assertEqual(len(manifest), 172)
 
         # dont include consumer or AnonymousUser users
         self.assertEqual(