diff --git a/mayan/apps/smart_settings/classes.py b/mayan/apps/smart_settings/classes.py index e0615818a3..81a9700b7e 100644 --- a/mayan/apps/smart_settings/classes.py +++ b/mayan/apps/smart_settings/classes.py @@ -13,6 +13,8 @@ from django.conf import settings from django.utils.functional import Promise from django.utils.encoding import force_text, python_2_unicode_compatible +from .utils import read_configuration_file + logger = logging.getLogger(__name__) @@ -173,7 +175,13 @@ class Setting(object): ) ) else: - self.raw_value = getattr(settings, self.global_name, self.default) + self.raw_value = read_configuration_file( + path=settings.CONFIGURATION_FILEPATH + ).get( + self.global_name, getattr( + settings, self.global_name, self.default + ) + ) self.yaml = Setting.serialize_value(self.raw_value) self.loaded = True diff --git a/mayan/apps/smart_settings/literals.py b/mayan/apps/smart_settings/literals.py new file mode 100644 index 0000000000..b8ba171ff9 --- /dev/null +++ b/mayan/apps/smart_settings/literals.py @@ -0,0 +1,12 @@ +from __future__ import unicode_literals + +DJANGO_SETTINGS_LIST = ( + 'ALLOWED_HOSTS', 'APPEND_SLASH', 'AUTH_PASSWORD_VALIDATORS', + 'DATA_UPLOAD_MAX_MEMORY_SIZE', 'DATABASES', 'DEBUG', 'DEFAULT_FROM_EMAIL', + 'DISALLOWED_USER_AGENTS', 'EMAIL_BACKEND', 'EMAIL_HOST', + 'EMAIL_HOST_PASSWORD', 'EMAIL_HOST_USER', 'EMAIL_PORT', 'EMAIL_TIMEOUT', + 'EMAIL_USE_SSL', 'EMAIL_USE_TLS', 'FILE_UPLOAD_MAX_MEMORY_SIZE', + 'HOME_VIEW', 'INSTALLED_APPS', 'INTERNAL_IPS', 'LANGUAGES', + 'LANGUAGE_CODE', 'LOGIN_REDIRECT_URL', 'LOGIN_URL', 'STATIC_URL', + 'STATICFILES_STORAGE', 'TIME_ZONE', 'WSGI_APPLICATION', +) diff --git a/mayan/apps/smart_settings/tests/literals.py b/mayan/apps/smart_settings/tests/literals.py index 381ddaaef2..5c0b0db1a1 100644 --- a/mayan/apps/smart_settings/tests/literals.py +++ b/mayan/apps/smart_settings/tests/literals.py @@ -1,4 +1,4 @@ from __future__ import unicode_literals -ENVIRONMENT_TEST_NAME = 'PAGINATE_BY' -ENVIRONMENT_TEST_VALUE = '999999' +TEST_SETTING_NAME = 'COMMON_PAGINATE_BY' +TEST_SETTING_VALUE = 999999 diff --git a/mayan/apps/smart_settings/tests/test_classes.py b/mayan/apps/smart_settings/tests/test_classes.py index 517fccacdc..3ec0bbd2ba 100644 --- a/mayan/apps/smart_settings/tests/test_classes.py +++ b/mayan/apps/smart_settings/tests/test_classes.py @@ -2,15 +2,39 @@ from __future__ import absolute_import, unicode_literals import os +import yaml + +from django.conf import settings + from mayan.apps.common.settings import setting_paginate_by from mayan.apps.common.tests import BaseTestCase +from mayan.apps.common.utils import fs_cleanup, mkstemp -from .literals import ENVIRONMENT_TEST_NAME, ENVIRONMENT_TEST_VALUE +from .literals import TEST_SETTING_NAME, TEST_SETTING_VALUE class ClassesTestCase(BaseTestCase): + def test_config_file(self): + test_config_file_descriptor, test_config_filename = mkstemp() + with open(test_config_filename, mode='w') as file_object: + file_object.write( + yaml.safe_dump( + {TEST_SETTING_NAME: TEST_SETTING_VALUE} + ) + ) + + settings.CONFIGURATION_FILEPATH = test_config_filename + setting_value = setting_paginate_by.value + fs_cleanup(filename=test_config_filename) + + self.assertEqual(setting_value, TEST_SETTING_VALUE) + def test_environment_variable(self): - os.environ[ - 'MAYAN_{}'.format(ENVIRONMENT_TEST_NAME) - ] = ENVIRONMENT_TEST_VALUE - self.assertTrue(setting_paginate_by.value, ENVIRONMENT_TEST_VALUE) + os.environ['MAYAN_{}'.format(TEST_SETTING_NAME)] = '{}'.format( + TEST_SETTING_VALUE + ) + + setting_value = setting_paginate_by.value + os.environ.pop('MAYAN_{}'.format(TEST_SETTING_NAME)) + self.assertEqual(setting_value, TEST_SETTING_VALUE) + diff --git a/mayan/settings/utils.py b/mayan/apps/smart_settings/utils.py similarity index 100% rename from mayan/settings/utils.py rename to mayan/apps/smart_settings/utils.py diff --git a/mayan/settings/base.py b/mayan/settings/base.py index 9104a74664..6d3034930e 100644 --- a/mayan/settings/base.py +++ b/mayan/settings/base.py @@ -16,12 +16,14 @@ import sys from django.utils.translation import ugettext_lazy as _ +from mayan.apps.smart_settings.literals import DJANGO_SETTINGS_LIST +from mayan.apps.smart_settings.utils import ( + get_environment_variables, read_configuration_file, yaml_loads +) + from .literals import ( CONFIGURATION_FILENAME, CONFIGURATION_LAST_GOOD_FILENAME, - DEFAULT_SECRET_KEY, DJANGO_SETTINGS_LIST, SECRET_KEY_FILENAME, SYSTEM_DIR -) -from .utils import ( - get_environment_variables, read_configuration_file, yaml_loads + DEFAULT_SECRET_KEY, SECRET_KEY_FILENAME, SYSTEM_DIR ) # Build paths inside the project like this: os.path.join(BASE_DIR, ...) @@ -327,9 +329,15 @@ DATABASES = { } } -CONFIGURATION_FILEPATH = os.path.join(MEDIA_ROOT, CONFIGURATION_FILENAME) -CONFIGURATION_LAST_GOOD_FILEPATH = os.path.join( - MEDIA_ROOT, CONFIGURATION_LAST_GOOD_FILENAME +CONFIGURATION_FILEPATH = os.environ.get( + 'MAYAN_CONFIGURATION_FILEPATH', os.path.join( + MEDIA_ROOT, CONFIGURATION_FILENAME + ) +) +CONFIGURATION_LAST_GOOD_FILEPATH = os.environ.get( + 'MAYAN_CONFIGURATION_LAST_GOOD_FILEPATH', os.path.join( + MEDIA_ROOT, CONFIGURATION_LAST_GOOD_FILENAME + ) ) if 'revertsettings' not in sys.argv: diff --git a/mayan/settings/literals.py b/mayan/settings/literals.py index 7cd0108d68..b30b20544b 100644 --- a/mayan/settings/literals.py +++ b/mayan/settings/literals.py @@ -1,16 +1,5 @@ from __future__ import unicode_literals -DJANGO_SETTINGS_LIST = ( - 'ALLOWED_HOSTS', 'APPEND_SLASH', 'AUTH_PASSWORD_VALIDATORS', - 'DATA_UPLOAD_MAX_MEMORY_SIZE', 'DATABASES', 'DEBUG', 'DEFAULT_FROM_EMAIL', - 'DISALLOWED_USER_AGENTS', 'EMAIL_BACKEND', 'EMAIL_HOST', - 'EMAIL_HOST_PASSWORD', 'EMAIL_HOST_USER', 'EMAIL_PORT', 'EMAIL_TIMEOUT', - 'EMAIL_USE_SSL', 'EMAIL_USE_TLS', 'FILE_UPLOAD_MAX_MEMORY_SIZE', - 'HOME_VIEW', 'INSTALLED_APPS', 'INTERNAL_IPS', 'LANGUAGES', - 'LANGUAGE_CODE', 'LOGIN_REDIRECT_URL', 'LOGIN_URL', 'STATIC_URL', - 'STATICFILES_STORAGE', 'TIME_ZONE', 'WSGI_APPLICATION', -) - DEFAULT_SECRET_KEY = 'secret-key-missing!' SECRET_KEY_FILENAME = 'SECRET_KEY' SYSTEM_DIR = 'system'