diff --git a/HISTORY.rst b/HISTORY.rst index 33c632cde1..40902f1315 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -1,3 +1,10 @@ +3.2.6 (2019-07-XX) +================== +* Remove the smart settings app * import. +* Encode settings YAML before hashing. +* Fix document icon used in the workflow runtime links. +* Add trashed date time label. + 3.2.5 (2019-07-05) ================== * Don't error out if the EXTRA_APPS or the DISABLED_APPS settings diff --git a/mayan/apps/appearance/settings.py b/mayan/apps/appearance/settings.py index 5b93d43525..ad0927530a 100644 --- a/mayan/apps/appearance/settings.py +++ b/mayan/apps/appearance/settings.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace from .literals import DEFAULT_MAXIMUM_TITLE_LENGTH diff --git a/mayan/apps/authentication/settings.py b/mayan/apps/authentication/settings.py index de693442d5..ec264c7933 100644 --- a/mayan/apps/authentication/settings.py +++ b/mayan/apps/authentication/settings.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace from .literals import DEFAULT_LOGIN_METHOD, DEFAULT_MAXIMUM_SESSION_LENGTH diff --git a/mayan/apps/autoadmin/settings.py b/mayan/apps/autoadmin/settings.py index d74b9b0d74..3c21d27339 100644 --- a/mayan/apps/autoadmin/settings.py +++ b/mayan/apps/autoadmin/settings.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace from .literals import DEFAULT_EMAIL, DEFAULT_PASSWORD, DEFAULT_USERNAME diff --git a/mayan/apps/common/settings.py b/mayan/apps/common/settings.py index 841549b38f..84009fe170 100644 --- a/mayan/apps/common/settings.py +++ b/mayan/apps/common/settings.py @@ -6,7 +6,7 @@ from django.conf import settings from django.utils.translation import ugettext_lazy as _ import mayan -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace from .literals import DEFAULT_COMMON_HOME_VIEW diff --git a/mayan/apps/converter/settings.py b/mayan/apps/converter/settings.py index 14ce07a295..b680fa6d47 100644 --- a/mayan/apps/converter/settings.py +++ b/mayan/apps/converter/settings.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace from .literals import ( DEFAULT_LIBREOFFICE_PATH, DEFAULT_PDFTOPPM_DPI, DEFAULT_PDFTOPPM_FORMAT, diff --git a/mayan/apps/django_gpg/settings.py b/mayan/apps/django_gpg/settings.py index b7c763f45f..651f54bcbc 100644 --- a/mayan/apps/django_gpg/settings.py +++ b/mayan/apps/django_gpg/settings.py @@ -5,7 +5,7 @@ import os from django.conf import settings from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace namespace = Namespace(label=_('Signatures'), name='django_gpg') diff --git a/mayan/apps/document_indexing/tests/test_views.py b/mayan/apps/document_indexing/tests/test_views.py index 633939b576..8ce8230d83 100644 --- a/mayan/apps/document_indexing/tests/test_views.py +++ b/mayan/apps/document_indexing/tests/test_views.py @@ -14,7 +14,11 @@ from .literals import TEST_INDEX_LABEL, TEST_INDEX_LABEL_EDITED from .mixins import IndexTestMixin, IndexViewTestMixin -class IndexViewTestCase(IndexTestMixin, IndexViewTestMixin, GenericDocumentViewTestCase): +class IndexViewTestCase( + IndexTestMixin, IndexViewTestMixin, GenericDocumentViewTestCase +): + auto_upload_document = False + def test_index_create_view_no_permission(self): response = self._request_test_index_create_view() self.assertEqual(response.status_code, 403) @@ -72,6 +76,10 @@ class IndexViewTestCase(IndexTestMixin, IndexViewTestMixin, GenericDocumentViewT self.test_index.refresh_from_db() self.assertEqual(self.test_index.label, TEST_INDEX_LABEL_EDITED) + +class IndexInstanceViewTestCase( + IndexTestMixin, IndexViewTestMixin, GenericDocumentViewTestCase +): def _request_index_instance_node_view(self, index_instance_node): return self.get( viewname='indexing:index_instance_node_view', kwargs={ @@ -100,27 +108,27 @@ class IndexViewTestCase(IndexTestMixin, IndexViewTestMixin, GenericDocumentViewT ) self.assertContains(response, text=TEST_INDEX_LABEL, status_code=200) - def _request_index_rebuild_get_view(self): + def _request_indexes_rebuild_get_view(self): return self.get( viewname='indexing:rebuild_index_instances', ) - def _request_index_rebuild_post_view(self): + def _request_indexes_rebuild_post_view(self): return self.post( viewname='indexing:rebuild_index_instances', data={ 'index_templates': self.test_index.pk } ) - def test_index_rebuild_no_permission(self): + def test_indexes_rebuild_no_permission(self): self._create_test_index(rebuild=False) - response = self._request_index_rebuild_get_view() + response = self._request_indexes_rebuild_get_view() self.assertNotContains( response=response, text=self.test_index.label, status_code=200 ) - response = self._request_index_rebuild_post_view() + response = self._request_indexes_rebuild_post_view() # No error since we just don't see the index self.assertEqual(response.status_code, 200) @@ -128,7 +136,7 @@ class IndexViewTestCase(IndexTestMixin, IndexViewTestMixin, GenericDocumentViewT self.test_index.instance_root.get_children_count(), 0 ) - def test_index_rebuild_with_access(self): + def test_indexes_rebuild_with_access(self): self._create_test_index(rebuild=False) self.grant_access( @@ -136,12 +144,12 @@ class IndexViewTestCase(IndexTestMixin, IndexViewTestMixin, GenericDocumentViewT permission=permission_document_indexing_rebuild ) - response = self._request_index_rebuild_get_view() + response = self._request_indexes_rebuild_get_view() self.assertContains( response=response, text=self.test_index.label, status_code=200 ) - response = self._request_index_rebuild_post_view() + response = self._request_indexes_rebuild_post_view() self.assertEqual(response.status_code, 302) # An instance root exists diff --git a/mayan/apps/document_parsing/settings.py b/mayan/apps/document_parsing/settings.py index c6626fbbd1..7bf2b78d3a 100644 --- a/mayan/apps/document_parsing/settings.py +++ b/mayan/apps/document_parsing/settings.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace namespace = Namespace(label=_('Document parsing'), name='document_parsing') diff --git a/mayan/apps/document_signatures/settings.py b/mayan/apps/document_signatures/settings.py index 6e0b75ec23..e146ec667a 100644 --- a/mayan/apps/document_signatures/settings.py +++ b/mayan/apps/document_signatures/settings.py @@ -5,7 +5,7 @@ import os from django.conf import settings from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace namespace = Namespace(label=_('Document signatures'), name='signatures') diff --git a/mayan/apps/document_states/icons.py b/mayan/apps/document_states/icons.py index 8ae3b8e990..ec6aaae232 100644 --- a/mayan/apps/document_states/icons.py +++ b/mayan/apps/document_states/icons.py @@ -1,7 +1,7 @@ from __future__ import absolute_import, unicode_literals from mayan.apps.appearance.classes import Icon -from mayan.apps.documents.icons import icon_document_type +from mayan.apps.documents.icons import icon_document, icon_document_type icon_workflow = Icon(driver_name='fontawesome', symbol='sitemap') @@ -31,11 +31,11 @@ icon_workflow_instance_transition = Icon( driver_name='fontawesome', symbol='arrows-alt-h' ) -icon_workflow_runtime_proxy_document_list = icon_document_type +icon_workflow_runtime_proxy_document_list = icon_document icon_workflow_runtime_proxy_list = Icon( driver_name='fontawesome', symbol='sitemap' ) -icon_workflow_runtime_proxy_state_document_list = icon_document_type +icon_workflow_runtime_proxy_state_document_list = icon_document icon_workflow_runtime_proxy_state_list = Icon( driver_name='fontawesome', symbol='circle' ) diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index 5e8639c466..d0443f1578 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -319,7 +319,8 @@ class DocumentsApp(MayanAppConfig): attribute='document_type', is_sortable=True, source=DeletedDocument ) SourceColumn( - attribute='deleted_date_time', source=DeletedDocument + attribute='deleted_date_time', include_label=True, order=99, + source=DeletedDocument ) # DocumentVersion diff --git a/mayan/apps/documents/settings.py b/mayan/apps/documents/settings.py index 19c0162ca8..ca27496599 100644 --- a/mayan/apps/documents/settings.py +++ b/mayan/apps/documents/settings.py @@ -5,7 +5,7 @@ import os from django.conf import settings from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace from .literals import ( DEFAULT_DOCUMENTS_HASH_BLOCK_SIZE, DEFAULT_LANGUAGE, DEFAULT_LANGUAGE_CODES diff --git a/mayan/apps/file_metadata/settings.py b/mayan/apps/file_metadata/settings.py index 247f0b72ec..4fa78da06f 100644 --- a/mayan/apps/file_metadata/settings.py +++ b/mayan/apps/file_metadata/settings.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace from .literals import DEFAULT_EXIF_PATH diff --git a/mayan/apps/lock_manager/settings.py b/mayan/apps/lock_manager/settings.py index d401b4c462..30448fa1fb 100644 --- a/mayan/apps/lock_manager/settings.py +++ b/mayan/apps/lock_manager/settings.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace from .literals import DEFAULT_BACKEND, DEFAULT_LOCK_TIMEOUT_VALUE diff --git a/mayan/apps/mailer/settings.py b/mayan/apps/mailer/settings.py index ed689b60a3..6ad1772a95 100644 --- a/mayan/apps/mailer/settings.py +++ b/mayan/apps/mailer/settings.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace from .literals import ( DEFAULT_DOCUMENT_BODY_TEMPLATE, DEFAULT_LINK_BODY_TEMPLATE diff --git a/mayan/apps/metadata/settings.py b/mayan/apps/metadata/settings.py index ce7aa6de35..0387f45309 100644 --- a/mayan/apps/metadata/settings.py +++ b/mayan/apps/metadata/settings.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace from .parsers import MetadataParser from .validators import MetadataValidator diff --git a/mayan/apps/mirroring/settings.py b/mayan/apps/mirroring/settings.py index aa16aa1335..41f9b372a5 100644 --- a/mayan/apps/mirroring/settings.py +++ b/mayan/apps/mirroring/settings.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace namespace = Namespace(label=_('Mirroring'), name='mirroring') diff --git a/mayan/apps/ocr/settings.py b/mayan/apps/ocr/settings.py index f2aa1052a3..4293c3ac24 100644 --- a/mayan/apps/ocr/settings.py +++ b/mayan/apps/ocr/settings.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace namespace = Namespace(label=_('OCR'), name='ocr') diff --git a/mayan/apps/smart_settings/__init__.py b/mayan/apps/smart_settings/__init__.py index 143550fa7b..54f25908f0 100644 --- a/mayan/apps/smart_settings/__init__.py +++ b/mayan/apps/smart_settings/__init__.py @@ -1,5 +1,3 @@ from __future__ import unicode_literals -from .classes import Namespace, Setting # NOQA - default_app_config = 'mayan.apps.smart_settings.apps.SmartSettingsApp' diff --git a/mayan/apps/smart_settings/classes.py b/mayan/apps/smart_settings/classes.py index ccedbd5083..9f35323608 100644 --- a/mayan/apps/smart_settings/classes.py +++ b/mayan/apps/smart_settings/classes.py @@ -17,7 +17,9 @@ except ImportError: from django.apps import apps from django.conf import settings from django.utils.functional import Promise -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import ( + force_bytes, force_text, python_2_unicode_compatible +) logger = logging.getLogger(__name__) @@ -141,7 +143,7 @@ class Setting(object): @classmethod def get_hash(cls): return force_text( - hashlib.sha256(cls.dump_data()).hexdigest() + hashlib.sha256(force_bytes(cls.dump_data())).hexdigest() ) @classmethod diff --git a/mayan/apps/smart_settings/tests/test_classes.py b/mayan/apps/smart_settings/tests/test_classes.py index e4c919acce..6e88607f7f 100644 --- a/mayan/apps/smart_settings/tests/test_classes.py +++ b/mayan/apps/smart_settings/tests/test_classes.py @@ -11,12 +11,13 @@ from mayan.apps.common.settings import setting_paginate_by from mayan.apps.common.tests import BaseTestCase from mayan.apps.storage.utils import fs_cleanup -from ..classes import Setting +from ..classes import Namespace, Setting from .literals import ENVIRONMENT_TEST_NAME, ENVIRONMENT_TEST_VALUE +from .mixins import SmartSettingTestMixin -class ClassesTestCase(BaseTestCase): +class ClassesTestCase(SmartSettingTestMixin, BaseTestCase): def test_environment_variable(self): os.environ[ 'MAYAN_{}'.format(ENVIRONMENT_TEST_NAME) @@ -39,3 +40,16 @@ class ClassesTestCase(BaseTestCase): with path_config_backup.open(mode='r') as file_object: self.assertFalse('!!python/' in file_object.read()) + + def test_setting_check_changed(self): + self._create_test_settings_namespace() + test_setting = self.test_settings_namespace.add_setting( + global_name='SMART_SETTINGS_TEST_SETTING', + default='test value' + ) + # Initialize hash cache + Setting.check_changed() + self.assertFalse(Setting.check_changed()) + test_setting.value = 'test value edited' + self.assertTrue(Setting.check_changed()) + diff --git a/mayan/apps/sources/settings.py b/mayan/apps/sources/settings.py index 8f0156d427..8f09ae99b6 100644 --- a/mayan/apps/sources/settings.py +++ b/mayan/apps/sources/settings.py @@ -5,7 +5,7 @@ import os from django.conf import settings from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace namespace = Namespace(label=_('Sources'), name='sources') diff --git a/mayan/apps/storage/settings.py b/mayan/apps/storage/settings.py index e17acbd76c..362aa9e702 100644 --- a/mayan/apps/storage/settings.py +++ b/mayan/apps/storage/settings.py @@ -4,7 +4,7 @@ import tempfile from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace namespace = Namespace(label=_('Storage'), name='storage') diff --git a/mayan/conf.py b/mayan/conf.py index 212322bd5d..898ccdd7da 100644 --- a/mayan/conf.py +++ b/mayan/conf.py @@ -6,7 +6,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from mayan.apps.smart_settings import Namespace +from mayan.apps.smart_settings.classes import Namespace namespace = Namespace(name='mayan', label=_('Mayan'))