diff --git a/mayan/apps/document_indexing/api.py b/mayan/apps/document_indexing/api.py index 3779097d48..9d1610e78b 100644 --- a/mayan/apps/document_indexing/api.py +++ b/mayan/apps/document_indexing/api.py @@ -5,7 +5,7 @@ import logging from django.utils.translation import ugettext_lazy as _ from .models import Index, IndexInstanceNode -from .settings import AVAILABLE_INDEXING_FUNCTIONS +from .settings import setting_available_indexing_functions logger = logging.getLogger(__name__) @@ -44,7 +44,7 @@ def cascade_eval(document, template_node, parent_index_instance=None): warnings = [] if template_node.enabled: try: - result = eval(template_node.expression, {'document': document}, AVAILABLE_INDEXING_FUNCTIONS) + result = eval(template_node.expression, {'document': document}, setting_available_indexing_functions.value) except Exception as exception: error_message = _('Error indexing document: %(document)s; expression: %(expression)s; %(exception)s') % { 'document': document, 'expression': template_node.expression, 'exception': exception} diff --git a/mayan/apps/document_indexing/settings.py b/mayan/apps/document_indexing/settings.py index 72f51eb4a7..aa075e85f7 100644 --- a/mayan/apps/document_indexing/settings.py +++ b/mayan/apps/document_indexing/settings.py @@ -1,15 +1,11 @@ from __future__ import unicode_literals -from smart_settings.api import register_settings +from django.utils.translation import ugettext_lazy as _ + +from smart_settings import Namespace available_indexing_functions = { } -register_settings( - namespace='document_indexing', - module='document_indexing.settings', - settings=[ - # Definition - {'name': 'AVAILABLE_INDEXING_FUNCTIONS', 'global_name': 'DOCUMENT_INDEXING_AVAILABLE_INDEXING_FUNCTIONS', 'default': available_indexing_functions}, - ] -) +namespace = Namespace(name='document_indexing', label=_('Indexing')) +setting_available_indexing_functions = namespace.add_setting(global_name='DOCUMENT_INDEXING_AVAILABLE_INDEXING_FUNCTIONS', default=available_indexing_functions) diff --git a/mayan/apps/metadata/forms.py b/mayan/apps/metadata/forms.py index 09f51f5db1..5025daece3 100644 --- a/mayan/apps/metadata/forms.py +++ b/mayan/apps/metadata/forms.py @@ -6,7 +6,10 @@ from django.forms.formsets import formset_factory from django.utils.translation import ugettext_lazy as _ from .models import MetadataType -from .settings import AVAILABLE_FUNCTIONS, AVAILABLE_MODELS, setting_available_validators +from .settings import ( + setting_available_functions, setting_available_models, + setting_available_validators +) class MetadataForm(forms.Form): @@ -69,7 +72,7 @@ class MetadataForm(forms.Form): if self.metadata_type.lookup: try: - choices = eval(self.metadata_type.lookup, AVAILABLE_MODELS) + choices = eval(self.metadata_type.lookup, setting_available_models.value) self.fields['value'] = forms.ChoiceField(label=self.fields['value'].label) choices = zip(choices, choices) if not required: @@ -82,7 +85,7 @@ class MetadataForm(forms.Form): if self.metadata_type.default: try: - self.fields['value'].initial = eval(self.metadata_type.default, AVAILABLE_FUNCTIONS) + self.fields['value'].initial = eval(self.metadata_type.default, setting_available_functions.value) except Exception as exception: self.fields['value'].initial = exception diff --git a/mayan/apps/metadata/settings.py b/mayan/apps/metadata/settings.py index 135542731a..b2a64abbc2 100644 --- a/mayan/apps/metadata/settings.py +++ b/mayan/apps/metadata/settings.py @@ -7,7 +7,6 @@ from django.utils.timezone import now from django.utils.translation import ugettext_lazy as _ from smart_settings import Namespace -from smart_settings.api import register_settings from .parsers import MetadataParser @@ -19,17 +18,7 @@ default_available_models = { 'User': User } -register_settings( - namespace='metadata', - module='metadata.settings', - settings=[ - # Definition - {'name': 'AVAILABLE_FUNCTIONS', 'global_name': 'METADATA_AVAILABLE_FUNCTIONS', 'default': default_available_functions}, - {'name': 'AVAILABLE_MODELS', 'global_name': 'METADATA_AVAILABLE_MODELS', 'default': default_available_models}, - ] -) - -# TODO: remove classes, import by string, all settings must be simple serializable types - namespace = Namespace(name='metadata', label=_('Metadata')) setting_available_validators = namespace.add_setting(global_name='METADATA_AVAILABLE_VALIDATORS', default=MetadataParser.get_import_paths()) +setting_available_functions = namespace.add_setting(global_name='METADATA_AVAILABLE_FUNCTIONS', default=default_available_functions) +setting_available_models = namespace.add_setting(global_name='METADATA_AVAILABLE_MODELS', default=default_available_models) diff --git a/mayan/apps/permissions/handlers.py b/mayan/apps/permissions/handlers.py index 38211baaef..f3d3e87d40 100644 --- a/mayan/apps/permissions/handlers.py +++ b/mayan/apps/permissions/handlers.py @@ -4,12 +4,12 @@ from django.core.exceptions import ObjectDoesNotExist from .models import Role -from .settings import DEFAULT_ROLES +from .settings import setting_default_roles def apply_default_roles(sender, instance, **kwargs): if kwargs.get('created', False): - for default_role in DEFAULT_ROLES: + for default_role in setting_default_roles.value: if isinstance(default_role, Role): # If a model is passed, execute method default_role.add_member(instance) diff --git a/mayan/apps/permissions/settings.py b/mayan/apps/permissions/settings.py index 91e64fc9cd..172c724749 100644 --- a/mayan/apps/permissions/settings.py +++ b/mayan/apps/permissions/settings.py @@ -2,12 +2,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from smart_settings.api import register_settings +from smart_settings import Namespace -register_settings( - namespace='permissions', - module='permissions.settings', - settings=[ - {'name': 'DEFAULT_ROLES', 'global_name': 'ROLES_DEFAULT_ROLES', 'default': [], 'description': _('A list of existing roles that are automatically assigned to newly created users')}, - ] -) +namespace = Namespace(name='permissions', label=_('Permissions')) +setting_default_roles = namespace.add_setting(global_name='ROLES_DEFAULT_ROLES', default=[], help_text=_('A list of existing roles that are automatically assigned to newly created users.')) diff --git a/mayan/apps/smart_settings/api.py b/mayan/apps/smart_settings/api.py deleted file mode 100644 index e30fcce335..0000000000 --- a/mayan/apps/smart_settings/api.py +++ /dev/null @@ -1,50 +0,0 @@ -from __future__ import unicode_literals - -from django.conf import settings as django_settings -from django.utils.importlib import import_module - -settings = {} - - -def register_setting(namespace, module, name, global_name, default, exists=False, description='', hidden=False): - # Create namespace if it doesn't exists - settings.setdefault(namespace, []) - - # If passed a string and not a module, import it - if isinstance(module, basestring): - module = import_module(module) - - setting = { - 'module': module, - 'name': name, - 'global_name': global_name, - 'exists': exists, - 'description': description, - 'default': default, - 'hidden': hidden, - } - - # Avoid multiple appends - if setting not in settings[namespace]: - settings[namespace].append(setting) - - # Get the global value - value = getattr(django_settings, global_name, default) - - # Create the local entity - setattr(module, name, value) - return value - - -def register_settings(namespace, module, settings): - for setting in settings: - register_setting( - namespace, - module, - setting['name'], - setting['global_name'], - setting['default'], - setting.get('exists', False), - setting.get('description', ''), - setting.get('hidden', False), - ) diff --git a/mayan/apps/smart_settings/apps.py b/mayan/apps/smart_settings/apps.py index 93f55b6a68..049ff3332b 100644 --- a/mayan/apps/smart_settings/apps.py +++ b/mayan/apps/smart_settings/apps.py @@ -8,7 +8,7 @@ from common.widgets import exists_widget from navigation.api import register_model_list_columns from .classes import Namespace, Setting -from .links import link_check_settings, link_namespace_detail +from .links import link_namespace_detail, link_namespace_list from .widgets import setting_widget @@ -22,7 +22,7 @@ class SmartSettingsApp(MayanAppConfig): super(SmartSettingsApp, self).ready() menu_object.bind_links(links=(link_namespace_detail,), sources=(Namespace,)) - menu_setup.bind_links(links=(link_check_settings,)) + menu_setup.bind_links(links=(link_namespace_list,)) register_model_list_columns(Namespace, [ { diff --git a/mayan/apps/smart_settings/links.py b/mayan/apps/smart_settings/links.py index dcde36368b..bc7fcb3466 100644 --- a/mayan/apps/smart_settings/links.py +++ b/mayan/apps/smart_settings/links.py @@ -9,5 +9,5 @@ def is_superuser(context): return context['request'].user.is_staff or context['request'].user.is_superuser -link_check_settings = Link(condition=is_superuser, icon='fa fa-sliders', text=_('Settings'), view='settings:setting_list') +link_namespace_list = Link(condition=is_superuser, icon='fa fa-sliders', text=_('Settings'), view='settings:namespace_list') link_namespace_detail = Link(condition=is_superuser, text=_('Settings'), view='settings:namespace_detail', args='resolved_object.name') diff --git a/mayan/apps/smart_settings/urls.py b/mayan/apps/smart_settings/urls.py index 4159bad184..49087940b6 100644 --- a/mayan/apps/smart_settings/urls.py +++ b/mayan/apps/smart_settings/urls.py @@ -5,8 +5,7 @@ from django.conf.urls import patterns, url from .views import NamespaceDetailView, NamespaceListView urlpatterns = patterns( - 'smart_settings.views', - url(r'^list/$', 'setting_list', name='setting_list'), + '', url(r'^namespace/all/$', NamespaceListView.as_view(), name='namespace_list'), url(r'^namespace/(?P\w+)/$', NamespaceDetailView.as_view(), name='namespace_detail'), ) diff --git a/mayan/apps/smart_settings/utils.py b/mayan/apps/smart_settings/utils.py deleted file mode 100644 index 33056e8945..0000000000 --- a/mayan/apps/smart_settings/utils.py +++ /dev/null @@ -1,16 +0,0 @@ -from __future__ import unicode_literals - -import types - - -def return_type(value): - if isinstance(value, types.FunctionType): - return value.__doc__ if value.__doc__ else _('Function found') - elif isinstance(value, types.ClassType): - return '%s.%s' % (value.__class__.__module__, value.__class__.__name__) - elif isinstance(value, types.TypeType): - return '%s.%s' % (value.__module__, value.__name__) - elif isinstance(value, types.DictType) or isinstance(value, types.DictionaryType): - return ', '.join(list(value)) - else: - return value diff --git a/mayan/apps/smart_settings/views.py b/mayan/apps/smart_settings/views.py index d58583ca6e..15536cfd77 100644 --- a/mayan/apps/smart_settings/views.py +++ b/mayan/apps/smart_settings/views.py @@ -9,9 +9,7 @@ from common.utils import encapsulate from common.widgets import exists_widget from common.views import SimpleView -from .api import settings from .classes import Namespace -from .utils import return_type # TODO: remove return_type, all settings must be simple types class NamespaceListView(SimpleView): @@ -48,46 +46,3 @@ class NamespaceDetailView(SimpleView): ) return context - - -def setting_list(request): - new_settings = [] - for namespace, sub_settings in settings.items(): - for sub_setting in sub_settings: - new_settings.append({ - 'module': sub_setting['module'], - 'name': sub_setting['name'], - 'global_name': sub_setting['global_name'], - 'description': sub_setting.get('description', None), - 'exists': sub_setting.get('exists', False), - 'default': sub_setting['default'], - }) - - context = { - 'title': _('Settings'), - 'object_list': sorted(new_settings, key=lambda entry: entry['global_name']), - 'hide_link': True, - 'hide_object': True, - 'extra_columns': [ - { - 'name': _('Name'), - 'attribute': encapsulate(lambda x: mark_safe('%s
%s' % (x.get('global_name'), x.get('description')))) - }, - { - 'name': _('Value'), - 'attribute': encapsulate( - lambda x: mark_safe( - '
%s %s
' % ( - return_type(getattr(x['module'], x['name'])), - exists_widget(getattr(x['module'], x['name'])) if x['exists'] else '' - ) - ) - ) - }, - ] - } - - return render_to_response( - 'appearance/generic_list.html', context, - context_instance=RequestContext(request) - )