From 6c828eaf94112cd85cdadadbc73e17481471c66d Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 15 Dec 2019 23:06:35 -0400 Subject: [PATCH] Fix document orientaton detection GitLab issue #713. Thanks to Rob de Canha-Knight (@rssfed23) for the report and debug information. Signed-off-by: Roberto Rosario --- HISTORY.rst | 6 ++ .../models/document_version_models.py | 4 +- .../sample_documents/rotate_alternate.pdf | Bin 0 -> 15514 bytes mayan/apps/documents/tests/literals.py | 5 + mayan/apps/documents/tests/test_models.py | 87 ++++++++---------- 5 files changed, 52 insertions(+), 50 deletions(-) create mode 100644 mayan/apps/documents/tests/contrib/sample_documents/rotate_alternate.pdf diff --git a/HISTORY.rst b/HISTORY.rst index 443b016b51..fc5a219d7e 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -1,6 +1,12 @@ 3.3.6 (2019-12-XX) ================== - Make list toolbar stick to the top of the view when scrolling. +- Fix page count on some PDF files, and fix a Python 3 incompatibility. + GitLab merge !64. Thanks to O2 Graphics (@O2Graphics). +- Improve the executables paths on FreeBSD/OpenBSD. GitLab merge !63. + Thanks to O2 Graphics (@O2Graphics). +- Fix document orientaton detection. GitLab issue #713. Thanks to + Rob de Canha-Knight (@rssfed23) for the report and debug information. 3.3.5 (2019-12-13) ================== diff --git a/mayan/apps/documents/models/document_version_models.py b/mayan/apps/documents/models/document_version_models.py index 980989d4a4..e5be1264aa 100644 --- a/mayan/apps/documents/models/document_version_models.py +++ b/mayan/apps/documents/models/document_version_models.py @@ -156,8 +156,8 @@ class DocumentVersion(models.Model): for page in self.pages.all(): degrees = page.detect_orientation() if degrees: - layer_saved_transformations.add_to_object( - obj=page, transformation=TransformationRotate, + layer_saved_transformations.add_transformation_to( + obj=page, transformation_class=TransformationRotate, arguments='{{"degrees": {}}}'.format(360 - degrees) ) diff --git a/mayan/apps/documents/tests/contrib/sample_documents/rotate_alternate.pdf b/mayan/apps/documents/tests/contrib/sample_documents/rotate_alternate.pdf new file mode 100644 index 0000000000000000000000000000000000000000..463118e7dbdbaf53c0e789626de9c030d00819b8 GIT binary patch literal 15514 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

E{Xw$V!ew5M|R->L#^_r5>aJA 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 ZJ31Lboqop)kR8Ovg-k^yt{{Q@e*i6%ne+ev literal 0 HcmV?d00001 diff --git a/mayan/apps/documents/tests/literals.py b/mayan/apps/documents/tests/literals.py index defa8f7ac9..adc71f7ba6 100644 --- a/mayan/apps/documents/tests/literals.py +++ b/mayan/apps/documents/tests/literals.py @@ -29,6 +29,7 @@ TEST_NON_ASCII_DOCUMENT_FILENAME = 'I18N_title_áéíóúüñÑ.png' TEST_OFFICE_DOCUMENT = 'simple_2_page_document.doc' TEST_PDF_DOCUMENT_FILENAME = 'mayan_11_1.pdf' TEST_PDF_INDIRECT_ROTATE_LABEL = 'indirect_rotate.pdf' +TEST_PDF_ROTATE_ALTERNATE_LABEL = 'rotate_alternate.pdf' TEST_SMALL_DOCUMENT_FILENAME = 'title_page.png' TEST_SMALL_DOCUMENT_CHECKSUM = 'efa10e6cc21f83078aaa94d5cbe51de67b51af706143b\ afc7fd6d4c02124879a' @@ -71,6 +72,10 @@ TEST_PDF_INDIRECT_ROTATE_PATH = os.path.join( settings.BASE_DIR, 'apps', 'documents', 'tests', 'contrib', 'sample_documents', TEST_PDF_INDIRECT_ROTATE_LABEL ) +TEST_PDF_ROTATE_ALTERNATE_PATH = os.path.join( + settings.BASE_DIR, 'apps', 'documents', 'tests', 'contrib', + 'sample_documents', TEST_PDF_ROTATE_ALTERNATE_LABEL +) TEST_OFFICE_DOCUMENT_PATH = os.path.join( settings.BASE_DIR, 'apps', 'documents', 'tests', 'contrib', 'sample_documents', TEST_OFFICE_DOCUMENT diff --git a/mayan/apps/documents/tests/test_models.py b/mayan/apps/documents/tests/test_models.py index 91ce316b41..0a1ed612fd 100644 --- a/mayan/apps/documents/tests/test_models.py +++ b/mayan/apps/documents/tests/test_models.py @@ -3,7 +3,10 @@ from __future__ import unicode_literals from datetime import timedelta import time +from django.test import override_settings + from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.converter.layers import layer_saved_transformations from ..literals import STUB_EXPIRATION_INTERVAL from ..models import ( @@ -12,18 +15,20 @@ from ..models import ( from .base import GenericDocumentTestCase from .literals import ( - TEST_DOCUMENT_TYPE_LABEL, TEST_MULTI_PAGE_TIFF_PATH, - TEST_PDF_INDIRECT_ROTATE_PATH, TEST_OFFICE_DOCUMENT_PATH, - TEST_SMALL_DOCUMENT_CHECKSUM, TEST_SMALL_DOCUMENT_FILENAME, - TEST_SMALL_DOCUMENT_MIMETYPE, TEST_SMALL_DOCUMENT_PATH, - TEST_SMALL_DOCUMENT_SIZE + TEST_DOCUMENT_TYPE_LABEL, TEST_MULTI_PAGE_TIFF, + TEST_OFFICE_DOCUMENT, TEST_PDF_INDIRECT_ROTATE_LABEL, + TEST_PDF_ROTATE_ALTERNATE_LABEL, TEST_SMALL_DOCUMENT_CHECKSUM, + TEST_SMALL_DOCUMENT_FILENAME, TEST_SMALL_DOCUMENT_MIMETYPE, + TEST_SMALL_DOCUMENT_PATH, TEST_SMALL_DOCUMENT_SIZE + ) -from .mixins import DocumentTestMixin -class DocumentTestCase(DocumentTestMixin, BaseTestCase): +class DocumentTestCase(GenericDocumentTestCase): def test_document_creation(self): - self.assertEqual(self.test_document_type.label, TEST_DOCUMENT_TYPE_LABEL) + self.assertEqual( + self.test_document_type.label, TEST_DOCUMENT_TYPE_LABEL + ) self.assertEqual(self.test_document.exists(), True) self.assertEqual(self.test_document.size, TEST_SMALL_DOCUMENT_SIZE) @@ -32,7 +37,9 @@ class DocumentTestCase(DocumentTestMixin, BaseTestCase): self.test_document.file_mimetype, TEST_SMALL_DOCUMENT_MIMETYPE ) self.assertEqual(self.test_document.file_mime_encoding, 'binary') - self.assertEqual(self.test_document.label, TEST_SMALL_DOCUMENT_FILENAME) + self.assertEqual( + self.test_document.label, TEST_SMALL_DOCUMENT_FILENAME + ) self.assertEqual( self.test_document.checksum, TEST_SMALL_DOCUMENT_CHECKSUM ) @@ -125,41 +132,38 @@ class DocumentTestCase(DocumentTestMixin, BaseTestCase): self.assertEqual(DeletedDocument.objects.count(), 0) -class PDFCompatibilityTestCase(BaseTestCase): +@override_settings(DOCUMENTS_FIX_ORIENTATION=True) +class PDFAlternateRotationTestCase(GenericDocumentTestCase): + test_document_filename = TEST_PDF_ROTATE_ALTERNATE_LABEL + def test_indirect_rotate(self): - self.test_document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE_LABEL + self.assertQuerysetEqual( + qs=Document.objects.all(), values=(repr(self.test_document),) + ) + self.assertEqual( + layer_saved_transformations.get_transformations_for( + obj=self.test_document.latest_version.pages.first() + ).count(), 1 ) - with open(TEST_PDF_INDIRECT_ROTATE_PATH, mode='rb') as file_object: - self.test_document = self.test_document_type.new_document( - file_object=file_object - ) +@override_settings(DOCUMENTS_FIX_ORIENTATION=True) +class PDFIndirectRotationTestCase(GenericDocumentTestCase): + test_document_filename = TEST_PDF_INDIRECT_ROTATE_LABEL + + def test_alternate_rotate(self): self.assertQuerysetEqual( qs=Document.objects.all(), values=(repr(self.test_document),) ) -class OfficeDocumentTestCase(BaseTestCase): - def setUp(self): - super(OfficeDocumentTestCase, self).setUp() - - self.test_document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE_LABEL - ) - - with open(TEST_OFFICE_DOCUMENT_PATH, mode='rb') as file_object: - self.test_document = self.test_document_type.new_document( - file_object=file_object - ) - - def tearDown(self): - self.test_document_type.delete() - super(OfficeDocumentTestCase, self).tearDown() +class OfficeDocumentTestCase(GenericDocumentTestCase): + test_document_filename = TEST_OFFICE_DOCUMENT def test_document_creation(self): - self.assertEqual(self.test_document.file_mimetype, 'application/msword') + self.assertEqual( + self.test_document.file_mimetype, 'application/msword' + ) self.assertEqual( self.test_document.file_mime_encoding, 'binary' ) @@ -170,21 +174,8 @@ class OfficeDocumentTestCase(BaseTestCase): self.assertEqual(self.test_document.page_count, 2) -class MultiPageTiffTestCase(BaseTestCase): - def setUp(self): - super(MultiPageTiffTestCase, self).setUp() - self.test_document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE_LABEL - ) - - with open(TEST_MULTI_PAGE_TIFF_PATH, mode='rb') as file_object: - self.test_document = self.test_document_type.new_document( - file_object=file_object - ) - - def tearDown(self): - self.test_document_type.delete() - super(MultiPageTiffTestCase, self).tearDown() +class MultiPageTiffTestCase(GenericDocumentTestCase): + test_document_filename = TEST_MULTI_PAGE_TIFF def test_document_creation(self): self.assertEqual(self.test_document.file_mimetype, 'image/tiff')