diff --git a/HISTORY.rst b/HISTORY.rst index d30f2eb105..b6de64996c 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -3,6 +3,7 @@ - Improve setting migration method matching. Avoid executing a migrations for settings with similar but shorter names. - Fix sources app setting migrations. +- Add OCR app setting migrations. 3.3.1 (2019-12-04) ================== diff --git a/mayan/apps/ocr/setting_migrations.py b/mayan/apps/ocr/setting_migrations.py new file mode 100644 index 0000000000..5ee961a085 --- /dev/null +++ b/mayan/apps/ocr/setting_migrations.py @@ -0,0 +1,15 @@ +from __future__ import unicode_literals + +from mayan.apps.common.serialization import yaml_load +from mayan.apps.smart_settings.classes import NamespaceMigration + + +class OCRSettingMigration(NamespaceMigration): + """ + From version 0001 to 0002 backend arguments are no longer quoted + but YAML valid too. Changed in version 3.3. + """ + def ocr_backend_arguments_0001(self, value): + return yaml_load( + stream=value or '{}', + ) diff --git a/mayan/apps/ocr/settings.py b/mayan/apps/ocr/settings.py index 51b92149aa..7f3517807a 100644 --- a/mayan/apps/ocr/settings.py +++ b/mayan/apps/ocr/settings.py @@ -4,7 +4,12 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.smart_settings.classes import Namespace -namespace = Namespace(label=_('OCR'), name='ocr') +from .setting_migrations import OCRSettingMigration + +namespace = Namespace( + label=_('OCR'), migration_class=OCRSettingMigration, name='ocr', + version='0002' +) setting_ocr_backend = namespace.add_setting( global_name='OCR_BACKEND', diff --git a/mayan/apps/ocr/tests/test_setting_migrations.py b/mayan/apps/ocr/tests/test_setting_migrations.py new file mode 100644 index 0000000000..fa768a04fe --- /dev/null +++ b/mayan/apps/ocr/tests/test_setting_migrations.py @@ -0,0 +1,36 @@ +from __future__ import unicode_literals + +from django.conf import settings +from django.utils.encoding import force_bytes + +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.common.tests.mixins import EnvironmentTestCaseMixin +from mayan.apps.smart_settings.classes import Setting +from mayan.apps.storage.utils import NamedTemporaryFile + +from ..settings import setting_ocr_backend_arguments + + +class OCRSettingMigrationTestCase(EnvironmentTestCaseMixin, BaseTestCase): + def test_ocr_backend_arguments_0001(self): + + test_value = {'location': 'test value'} + + with NamedTemporaryFile() as file_object: + settings.CONFIGURATION_FILEPATH = file_object.name + file_object.write( + force_bytes( + '{}: {}'.format( + 'OCR_BACKEND_ARGUMENTS', + '"{}"'.format( + Setting.serialize_value(value=test_value) + ) + ) + ) + ) + file_object.seek(0) + Setting._config_file_cache = None + + self.assertEqual( + setting_ocr_backend_arguments.value, test_value + )