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 0000000000..463118e7db Binary files /dev/null and b/mayan/apps/documents/tests/contrib/sample_documents/rotate_alternate.pdf differ 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')