Converted whole project to a smarter method of defining app settings

This commit is contained in:
Roberto Rosario
2011-05-07 01:15:40 -04:00
parent 7469fe991f
commit 7f2c563192
16 changed files with 265 additions and 140 deletions

View File

@@ -1,14 +1,33 @@
from django.conf import settings """Configuration options for the common app"""
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from main.api import register_setting
from common.literals import PAGE_SIZE_LETTER, PAGE_ORIENTATION_PORTRAIT from common.literals import PAGE_SIZE_LETTER, PAGE_ORIENTATION_PORTRAIT
TEMPORARY_DIRECTORY = getattr(settings, 'COMMON_TEMPORARY_DIRECTORY', u'/tmp') TEMPORARY_DIRECTORY = register_setting(
namespace=u'common',
module=u'common.conf.settings',
name=u'TEMPORARY_DIRECTORY',
global_name=u'COMMON_TEMPORARY_DIRECTORY',
default=u'/tmp',
description=_(u'Temporary directory used site wide to store thumbnails, previews and temporary files. If none is specified, one will be created using tempfile.mkdtemp()'),
exists=True
)
setting_description = { DEFAULT_PAPER_SIZE = register_setting(
'COMMON_TEMPORARY_DIRECTORY': _(u'Temporary directory used site wide to store thumbnails, previews and temporary files. If none is specified, one will be created using tempfile.mkdtemp()') namespace=u'common',
} module=u'common.conf.settings',
name=u'DEFAULT_PAPER_SIZE',
global_name=u'COMMON_DEFAULT_PAPER_SIZE',
default=PAGE_SIZE_LETTER,
)
# Printing DEFAULT_PAGE_ORIENTATION = register_setting(
DEFAULT_PAPER_SIZE = getattr(settings, 'COMMON_DEFAULT_PAPER_SIZE', PAGE_SIZE_LETTER) namespace=u'common',
DEFAULT_PAGE_ORIENTATION = getattr(settings, 'COMMON_DEFAULT_PAGE_ORIENTATION', PAGE_ORIENTATION_PORTRAIT) module=u'common.conf.settings',
name=u'DEFAULT_PAGE_ORIENTATION',
global_name=u'COMMON_DEFAULT_PAGE_ORIENTATION',
default=PAGE_ORIENTATION_PORTRAIT,
)

View File

@@ -1,26 +1,23 @@
from django.conf import settings """Configuration options for the converter app"""
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from main.api import register_settings
IM_CONVERT_PATH = getattr(settings, 'CONVERTER_IM_ONVERT_PATH', u'/usr/bin/convert') register_settings(
IM_IDENTIFY_PATH = getattr(settings, 'CONVERTER_IM_IDENTIFY_PATH', u'/usr/bin/identify') namespace=u'converter',
UNPAPER_PATH = getattr(settings, 'CONVERTER_UNPAPER_PATH', u'/usr/bin/unpaper') module=u'converter.conf.settings',
GM_PATH = getattr(settings, 'CONVERTER_GM_PATH', u'/usr/bin/gm') settings=[
GM_SETTINGS = getattr(settings, 'CONVERTER_GM_SETTINGS', u'') {'name': u'IM_CONVERT_PATH', 'global_name': u'CONVERTER_IM_CONVERT_PATH', 'default': u'/usr/bin/convert', 'description': _(u'File path to imagemagick\'s convert program.'), 'exists': True},
GRAPHICS_BACKEND = getattr(settings, 'CONVERTER_GRAPHICS_BACKEND', u'converter.backends.imagemagick') {'name': u'IM_IDENTIFY_PATH', 'global_name': u'CONVERTER_IM_IDENTIFY_PATH', 'default': u'/usr/bin/identify', 'description': _(u'File path to imagemagick\'s identify program.'), 'exists': True},
UNOCONV_PATH = getattr(settings, 'CONVERTER_UNOCONV_PATH', u'/usr/bin/unoconv') {'name': u'UNPAPER_PATH', 'global_name': u'CONVERTER_UNPAPER_PATH', 'default': u'/usr/bin/unpaper', 'description': _(u'File path to unpaper program.'), 'exists': True},
{'name': u'GM_PATH', 'global_name': u'CONVERTER_GM_PATH', 'default': u'/usr/bin/gm', 'description': _(u'File path to graphicsmagick\'s program.'), 'exists': True},
OCR_OPTIONS = getattr(settings, 'CONVERTER_OCR_OPTIONS', u'-colorspace Gray -depth 8 -resample 200x200') {'name': u'GM_SETTINGS', 'global_name': u'CONVERTER_GM_SETTINGS', 'default': u''},
DEFAULT_OPTIONS = getattr(settings, 'CONVERTER_DEFAULT_OPTIONS', u'') {'name': u'GRAPHICS_BACKEND', 'global_name': u'CONVERTER_GRAPHICS_BACKEND', 'default': u'converter.backends.imagemagick', 'description': _(u'Graphics conversion backend to use. Options are: converter.backends.imagemagick and converter.backends.graphicsmagick.')},
LOW_QUALITY_OPTIONS = getattr(settings, 'CONVERTER_LOW_QUALITY_OPTIONS', u'') {'name': u'UNOCONV_PATH', 'global_name': u'CONVERTER_UNOCONV_PATH', 'default': u'/usr/bin/unoconv', 'exists': True},
HIGH_QUALITY_OPTIONS = getattr(settings, 'CONVERTER_HIGH_QUALITY_OPTIONS', u'-density 400') {'name': u'OCR_OPTIONS', 'global_name': u'CONVERTER_OCR_OPTIONS', 'default': u'-colorspace Gray -depth 8 -resample 200x200'},
PRINT_QUALITY_OPTIONS = getattr(settings, 'CONVERTER_HIGH_QUALITY_OPTIONS', u'-density 500') {'name': u'DEFAULT_OPTIONS', 'global_name': u'CONVERTER_DEFAULT_OPTIONS', 'default': u''},
{'name': u'LOW_QUALITY_OPTIONS', 'global_name': u'CONVERTER_LOW_QUALITY_OPTIONS', 'default': u''},
{'name': u'HIGH_QUALITY_OPTIONS', 'global_name': u'CONVERTER_HIGH_QUALITY_OPTIONS', 'default': u'-density 400'},
setting_description = { {'name': u'PRINT_QUALITY_OPTIONS', 'global_name': u'CONVERTER_HIGH_QUALITY_OPTIONS', 'default': u'-density 500'},
'CONVERTER_IM_CONVERT_PATH': _(u'File path to imagemagick\'s convert program.'), ]
'CONVERTER_IM_IDENTIFY_PATH': _(u'File path to imagemagick\'s identify program.'), )
'CONVERTER_GM_PATH': _(u'File path to graphicsmagick\'s program.'),
'CONVERTER_UNPAPER_PATH': _(u'File path to unpaper program.'),
'CONVERTER_GRAPHICS_BACKEND': _(u'Graphics conversion backend to use. Options are: converter.backends.imagemagick and converter.backends.graphicsmagick.'),
}

View File

@@ -1,14 +1,15 @@
"""Configuration options for the documents app"""
import datetime import datetime
import hashlib import hashlib
import uuid import uuid
from django.conf import settings
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
from common.utils import proper_name from common.utils import proper_name
from storage.backends.filebasedstorage import FileBasedStorage from storage.backends.filebasedstorage import FileBasedStorage
from main.api import register_settings
def default_checksum(x): def default_checksum(x):
@@ -36,45 +37,42 @@ available_indexing_functions = {
'proper_name': proper_name 'proper_name': proper_name
} }
# Definition register_settings(
AVAILABLE_FUNCTIONS = getattr(settings, 'DOCUMENTS_METADATA_AVAILABLE_FUNCTIONS', default_available_functions) namespace=u'documents',
AVAILABLE_MODELS = getattr(settings, 'DOCUMENTS_METADATA_AVAILABLE_MODELS', default_available_models) module=u'documents.conf.settings',
AVAILABLE_INDEXING_FUNCTIONS = getattr(settings, 'DOCUMENTS_INDEXING_AVAILABLE_FUNCTIONS', available_indexing_functions) settings=[
# Definition
# Upload {'name': u'AVAILABLE_FUNCTIONS', 'global_name': u'DOCUMENTS_METADATA_AVAILABLE_FUNCTIONS', 'default': default_available_functions},
USE_STAGING_DIRECTORY = getattr(settings, 'DOCUMENTS_USE_STAGING_DIRECTORY', False) {'name': u'AVAILABLE_MODELS', 'global_name': u'DOCUMENTS_METADATA_AVAILABLE_MODELS', 'default': default_available_models},
STAGING_DIRECTORY = getattr(settings, 'DOCUMENTS_STAGING_DIRECTORY', u'/tmp/mayan/staging') {'name': u'AVAILABLE_INDEXING_FUNCTIONS', 'global_name': u'DOCUMENTS_INDEXING_AVAILABLE_FUNCTIONS', 'default': available_indexing_functions},
DELETE_STAGING_FILE_AFTER_UPLOAD = getattr(settings, 'DOCUMENTS_DELETE_STAGING_FILE_AFTER_UPLOAD', False) # Upload
STAGING_FILES_PREVIEW_SIZE = getattr(settings, 'DOCUMENTS_STAGING_FILES_PREVIEW_SIZE', '640x480') {'name': u'USE_STAGING_DIRECTORY', 'global_name': u'DOCUMENTS_USE_STAGING_DIRECTORY', 'default': False},
ENABLE_SINGLE_DOCUMENT_UPLOAD = getattr(settings, 'DOCUMENTS_ENABLE_SINGLE_DOCUMENT_UPLOAD', True) {'name': u'STAGING_DIRECTORY', 'global_name': u'DOCUMENTS_STAGING_DIRECTORY', 'default': u'/tmp/mayan/staging', 'exists': True},
UNCOMPRESS_COMPRESSED_LOCAL_FILES = getattr(settings, 'DOCUMENTS_UNCOMPRESS_COMPRESSED_LOCAL_FILES', True) {'name': u'DELETE_STAGING_FILE_AFTER_UPLOAD', 'global_name': u'DOCUMENTS_DELETE_STAGING_FILE_AFTER_UPLOAD', 'default': False},
UNCOMPRESS_COMPRESSED_STAGING_FILES = getattr(settings, 'DOCUMENTS_UNCOMPRESS_COMPRESSED_STAGING_FILES', True) {'name': u'STAGING_FILES_PREVIEW_SIZE', 'global_name': u'DOCUMENTS_STAGING_FILES_PREVIEW_SIZE', 'default': u'640x480'},
{'name': u'ENABLE_SINGLE_DOCUMENT_UPLOAD', 'global_name': u'DOCUMENTS_ENABLE_SINGLE_DOCUMENT_UPLOAD', 'default': True},
# Saving {'name': u'UNCOMPRESS_COMPRESSED_LOCAL_FILES', 'global_name': u'DOCUMENTS_UNCOMPRESS_COMPRESSED_LOCAL_FILES', 'default': True},
CHECKSUM_FUNCTION = getattr(settings, 'DOCUMENTS_CHECKSUM_FUNCTION', default_checksum) {'name': u'UNCOMPRESS_COMPRESSED_STAGING_FILES', 'global_name': u'DOCUMENTS_UNCOMPRESS_COMPRESSED_STAGING_FILES', 'default': True},
UUID_FUNCTION = getattr(settings, 'DOCUMENTS_UUID_FUNCTION', default_uuid) # Saving
{'name': u'CHECKSUM_FUNCTION', 'global_name': u'DOCUMENTS_CHECKSUM_FUNCTION', 'default': default_checksum},
# Storage {'name': u'UUID_FUNCTION', 'global_name': u'DOCUMENTS_UUID_FUNCTION', 'default': default_uuid},
STORAGE_BACKEND = getattr(settings, 'DOCUMENTS_STORAGE_BACKEND', FileBasedStorage) # Storage
{'name': u'STORAGE_BACKEND', 'global_name': u'DOCUMENTS_STORAGE_BACKEND', 'default': FileBasedStorage},
# Usage # Transformations
PREVIEW_SIZE = getattr(settings, 'DOCUMENTS_PREVIEW_SIZE', '640x480') {'name': u'AVAILABLE_TRANSFORMATIONS', 'global_name': u'DOCUMENTS_AVAILABLE_TRANSFORMATIONS', 'default': available_transformations},
PRINT_SIZE = getattr(settings, 'DOCUMENTS_PREVIEW_SIZE', '1400') {'name': u'DEFAULT_TRANSFORMATIONS', 'global_name': u'DOCUMENTS_DEFAULT_TRANSFORMATIONS', 'default': []},
MULTIPAGE_PREVIEW_SIZE = getattr(settings, 'DOCUMENTS_MULTIPAGE_PREVIEW_SIZE', '160x120') # Usage
THUMBNAIL_SIZE = getattr(settings, 'DOCUMENTS_THUMBNAIL_SIZE', '50x50') {'name': u'PREVIEW_SIZE', 'global_name': u'DOCUMENTS_PREVIEW_SIZE', 'default': u'640x480'},
DISPLAY_SIZE = getattr(settings, 'DOCUMENTS_DISPLAY_SIZE', '1200') {'name': u'PRINT_SIZE', 'global_name': u'DOCUMENTS_PRINT_SIZE', 'default': u'1400'},
RECENT_COUNT = getattr(settings, 'DOCUMENTS_RECENT_COUNT', 40) {'name': u'MULTIPAGE_PREVIEW_SIZE', 'global_name': u'DOCUMENTS_MULTIPAGE_PREVIEW_SIZE', 'default': u'160x120'},
ZOOM_PERCENT_STEP = getattr(settings, 'DOCUMENTS_ZOOM_PERCENT_STEP', 50) {'name': u'THUMBNAIL_SIZE', 'global_name': u'DOCUMENTS_THUMBNAIL_SIZE', 'default': u'50x50'},
ZOOM_MAX_LEVEL = getattr(settings, 'DOCUMENTS_ZOOM_MAX_LEVEL', 200) {'name': u'DISPLAY_SIZE', 'global_name': u'DOCUMENTS_DISPLAY_SIZE', 'default': u'1200'},
ZOOM_MIN_LEVEL = getattr(settings, 'DOCUMENTS_ZOOM_MIN_LEVEL', 50) {'name': u'RECENT_COUNT', 'global_name': u'DOCUMENTS_RECENT_COUNT', 'default': 40, 'description': _(u'Maximum number of recent (created, edited, viewed) documents to remember per user.')},
ROTATION_STEP = getattr(settings, 'DOCUMENTS_ROTATION_STEP', 90) {'name': u'ZOOM_PERCENT_STEP', 'global_name': u'DOCUMENTS_ZOOM_PERCENT_STEP', 'default': 50, 'description': _(u'Amount in percent zoom in or out a document page per user interaction.')},
{'name': u'ZOOM_MAX_LEVEL', 'global_name': u'DOCUMENTS_ZOOM_MAX_LEVEL', 'default': 200, 'description': _(u'Maximum amount in percent (%) to allow user to zoom in a document page interactively.')},
# Transformations {'name': u'ZOOM_MIN_LEVEL', 'global_name': u'DOCUMENTS_ZOOM_MIN_LEVEL', 'default': 50, 'description': _(u'Minimum amount in percent (%) to allow user to zoom out a document page interactively.')},
AVAILABLE_TRANSFORMATIONS = getattr(settings, 'DOCUMENTS_AVAILABLE_TRANSFORMATIONS', available_transformations) {'name': u'ROTATION_STEP', 'global_name': u'DOCUMENTS_ROTATION_STEP', 'default': 90, 'description': _(u'Amount in degrees to rotate a document page per user interaction.')},
DEFAULT_TRANSFORMATIONS = getattr(settings, 'DOCUMENTS_DEFAULT_TRANSFORMATIONS', []) #Groups
{'name': u'GROUP_SHOW_EMPTY', 'global_name': u'DOCUMENTS_GROUP_SHOW_EMPTY', 'default': True},
#Groups ]
GROUP_SHOW_EMPTY = getattr(settings, 'DOCUMENTS_GROUP_SHOW_EMPTY', True) )
setting_description = {
}

View File

@@ -1,4 +1,15 @@
from django.conf import settings """Configuration options for the dynamic_search app"""
from django.utils.translation import ugettext_lazy as _
from main.api import register_settings
register_settings(
namespace=u'dynamic_search',
module=u'dynamic_search.conf.settings',
settings=[
{'name': u'SHOW_OBJECT_TYPE', 'global_name': u'SEARCH_SHOW_OBJECT_TYPE', 'default': True, 'hidden': True},
{'name': u'LIMIT', 'global_name': u'SEARCH_LIMIT', 'default': 100, 'description': _(u'Maximum amount search hits to fetch and display.')},
]
)
SHOW_OBJECT_TYPE = getattr(settings, 'SEARCH_SHOW_OBJECT_TYPE', True)
LIMIT = getattr(settings, 'SEARCH_LIMIT', 100)

View File

@@ -1,6 +1,6 @@
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.template import RequestContext from django.template import RequestContext
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext_lazy as _
from django.contrib import messages from django.contrib import messages
from django.conf import settings from django.conf import settings

View File

@@ -1,11 +1,15 @@
'''Configuration options for the filesystem_serving app """Configuration options for the filesystem_serving app"""
'''
from django.conf import settings from main.api import register_settings
register_settings(
namespace=u'filesystem_serving',
module=u'filesystem_serving.conf.settings',
settings=[
{'name': u'SLUGIFY_PATHS', 'global_name': u'FILESYSTEM_SLUGIFY_PATHS', 'default': False},
{'name': u'MAX_RENAME_COUNT', 'global_name': u'FILESYSTEM_MAX_RENAME_COUNT', 'default': 200},
{'name': u'FILESERVING_PATH', 'global_name': u'FILESYSTEM_FILESERVING_PATH', 'default': u'/tmp/mayan/documents', 'exists': True},
{'name': u'FILESERVING_ENABLE', 'global_name': u'FILESYSTEM_FILESERVING_ENABLE', 'default': True}
]
)
# Serving
FILESERVING_ENABLE = getattr(settings, 'FILESYSTEM_FILESERVING_ENABLE', True)
FILESERVING_PATH = getattr(settings, 'FILESYSTEM_FILESERVING_PATH', u'/tmp/mayan/documents')
SLUGIFY_PATHS = getattr(settings, 'FILESYSTEM_SLUGIFY_PATHS', False)
MAX_RENAME_COUNT = getattr(settings, 'FILESYSTEM_MAX_RENAME_COUNT', 200)

View File

@@ -5,6 +5,8 @@ from permissions import role_list
from user_management import user_list from user_management import user_list
from main.conf.settings import SIDE_BAR_SEARCH from main.conf.settings import SIDE_BAR_SEARCH
from main.conf import settings as main_settings
from main.api import register_setting
def is_superuser(context): def is_superuser(context):
@@ -58,3 +60,6 @@ def get_version():
return ''.join(vers) return ''.join(vers)
__version__ = get_version() __version__ = get_version()
#register_setting(u'main', main_settings, u'SIDE_BAR_SEARCH', u'MAIN_SIDE_BAR_SEARCH')

View File

@@ -1,9 +1,12 @@
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils.functional import lazy from django.utils.functional import lazy
from django.conf import settings as django_settings
from django.utils.importlib import import_module
diagnostics = {} diagnostics = {}
tools = {} tools = {}
reverse_lazy = lazy(reverse, str) reverse_lazy = lazy(reverse, str)
settings = {}
def register_diagnostic(namespace, title, link): def register_diagnostic(namespace, title, link):
@@ -20,3 +23,47 @@ def register_tool(link, title=None, namespace=None):
link['url'] = link.get('url', reverse_lazy(link['view'])) link['url'] = link.get('url', reverse_lazy(link['view']))
namespace_dict['links'].append(link) namespace_dict['links'].append(link)
tools[namespace] = namespace_dict tools[namespace] = namespace_dict
def register_setting(namespace, module, name, global_name, default, exists=False, description=u'', 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', u''),
setting.get('hidden', False),
)

View File

@@ -1,12 +1,13 @@
'''Configuration options for the main app """Configuration options for the main app"""
'''
from django.conf import settings
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from main.api import register_setting
SIDE_BAR_SEARCH = getattr(settings, 'MAIN_SIDE_BAR_SEARCH', False) register_setting(
namespace=u'main',
setting_description = { module=u'main.conf.settings',
'MAIN_SIDE_BAR_SEARCH': _(u'Controls whether the search\ name=u'SIDE_BAR_SEARCH',
functionality is provided by a sidebar widget or by a menu entry.') global_name=u'MAIN_SIDE_BAR_SEARCH',
} default=False,
description=_(u'Controls whether the search functionality is provided by a sidebar widget or by a menu entry.')
)

View File

@@ -4,18 +4,18 @@ from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from common.utils import exists_with_famfam, return_type from common.utils import exists_with_famfam, return_type
from common.conf import settings as common_settings #from common.conf import settings as common_settings
from documents.conf import settings as documents_settings #from documents.conf import settings as documents_settings
from documents.statistics import get_statistics as documents_statistics #from documents.statistics import get_statistics as documents_statistics
from converter.conf import settings as converter_settings #from converter.conf import settings as converter_settings
from ocr.conf import settings as ocr_settings #from ocr.conf import settings as ocr_settings
from ocr.statistics import get_statistics as ocr_statistics #from ocr.statistics import get_statistics as ocr_statistics
from filesystem_serving.conf import settings as filesystem_serving_settings #from filesystem_serving.conf import settings as filesystem_serving_settings
from dynamic_search.conf import settings as search_settings #from dynamic_search.conf import settings as search_settings
from permissions.api import check_permissions from permissions.api import check_permissions
from main.conf import settings as main_settings from main.conf import settings as main_settings
from main.api import diagnostics, tools from main.api import diagnostics, tools, settings
def home(request): def home(request):
@@ -24,11 +24,9 @@ def home(request):
def check_settings(request): def check_settings(request):
"""
settings = [ settings = [
{'name': 'MAIN_SIDE_BAR_SEARCH',
'value': main_settings.SIDE_BAR_SEARCH,
'description': main_settings.setting_description},
{'name': 'DOCUMENTS_METADATA_AVAILABLE_FUNCTIONS', 'value': documents_settings.AVAILABLE_FUNCTIONS}, {'name': 'DOCUMENTS_METADATA_AVAILABLE_FUNCTIONS', 'value': documents_settings.AVAILABLE_FUNCTIONS},
{'name': 'DOCUMENTS_METADATA_AVAILABLE_MODELS', 'value': documents_settings.AVAILABLE_MODELS}, {'name': 'DOCUMENTS_METADATA_AVAILABLE_MODELS', 'value': documents_settings.AVAILABLE_MODELS},
{'name': 'DOCUMENTS_INDEXING_AVAILABLE_INDEXING_FUNCTIONS', 'value': documents_settings.AVAILABLE_INDEXING_FUNCTIONS}, {'name': 'DOCUMENTS_INDEXING_AVAILABLE_INDEXING_FUNCTIONS', 'value': documents_settings.AVAILABLE_INDEXING_FUNCTIONS},
@@ -106,17 +104,30 @@ def check_settings(request):
# Search # Search
{'name': 'SEARCH_LIMIT', 'value': search_settings.LIMIT}, {'name': 'SEARCH_LIMIT', 'value': search_settings.LIMIT},
] ]
"""
new_settings = []
for namespace, sub_settings in settings.items():
for sub_setting in sub_settings:
if not sub_setting.get('hidden', False):
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 = { context = {
'title': _(u'settings'), 'title': _(u'settings'),
'object_list': settings, 'object_list': new_settings,
'hide_link': True, 'hide_link': True,
'hide_object': True, 'hide_object': True,
'extra_columns': [ 'extra_columns': [
{'name': _(u'name'), 'attribute': 'name'}, {'name': _(u'name'), 'attribute': 'global_name'},
{'name': _(u'value'), 'attribute': lambda x: return_type(x['value'])}, {'name': _(u'default'), 'attribute': lambda x: return_type(x['default'])},
{'name': _(u'description'), 'attribute': lambda x: x.get('description', {}).get(x['name'], '')}, {'name': _(u'value'), 'attribute': lambda x: return_type(getattr(x['module'], x['name']))},
{'name': _(u'exists'), 'attribute': lambda x: exists_with_famfam(x['value']) if 'exists' in x else ''}, {'name': _(u'description'), 'attribute': 'description'},
{'name': _(u'exists'), 'attribute': lambda x: exists_with_famfam(getattr(x['module'], x['name'])) if x['exists'] else ''},
] ]
} }

View File

@@ -1,11 +1,21 @@
from django.conf import settings """Configuration options for the ocr app"""
from django.utils.translation import ugettext_lazy as _
from main.api import register_settings
register_settings(
namespace=u'ocr',
module=u'ocr.conf.settings',
settings=[
{'name': u'TESSERACT_PATH', 'global_name': u'OCR_TESSERACT_PATH', 'default': u'/usr/bin/tesseract', 'exists': True},
{'name': u'TESSERACT_LANGUAGE', 'global_name': u'OCR_TESSERACT_LANGUAGE', 'default': u'eng'},
{'name': u'REPLICATION_DELAY', 'global_name': u'OCR_REPLICATION_DELAY', 'default': 10, 'description': _(u'Amount of seconds to delay OCR of documents to allow for the node\'s storage replication overhead.')},
{'name': u'NODE_CONCURRENT_EXECUTION', 'global_name': u'OCR_NODE_CONCURRENT_EXECUTION', 'default': 1, 'description': _(u'Maximum amount of concurrent document OCRs a node can perform.')},
{'name': u'AUTOMATIC_OCR', 'global_name': u'OCR_AUTOMATIC_OCR', 'default': False, 'description': _(u'Automatically queue newly created documents for OCR.')},
{'name': u'PDFTOTEXT_PATH', 'global_name': u'OCR_PDFTOTEXT_PATH', 'default': u'/usr/bin/pdftotext', 'exists': True},
{'name': u'QUEUE_PROCESSING_INTERVAL', 'global_name': u'OCR_QUEUE_PROCESSING_INTERVAL', 'default': 10},
{'name': u'CACHE_URI', 'global_name': u'OCR_CACHE_URI', 'default': None, 'description': _(u'URI in the form: "memcached://127.0.0.1:11211/" to specify a cache backend to use for locking. Multiple hosts can be specified separated by a semicolon.')}
]
)
TESSERACT_PATH = getattr(settings, 'OCR_TESSERACT_PATH', u'/usr/bin/tesseract')
TESSERACT_LANGUAGE = getattr(settings, 'OCR_TESSERACT_LANGUAGE', u'eng')
REPLICATION_DELAY = getattr(settings, 'OCR_REPLICATION_DELAY', 10) # In seconds
NODE_CONCURRENT_EXECUTION = getattr(settings, 'OCR_NODE_CONCURRENT_EXECUTION', 1)
AUTOMATIC_OCR = getattr(settings, 'OCR_AUTOMATIC_OCR', False)
PDFTOTEXT_PATH = getattr(settings, 'OCR_PDFTOTEXT_PATH', u'/usr/bin/pdftotext')
QUEUE_PROCESSING_INTERVAL = getattr(settings, 'OCR_QUEUE_PROCESSING_INTERVAL', 10) # In seconds
CACHE_URI = getattr(settings, 'OCR_CACHE_URI', None)

View File

@@ -7,7 +7,7 @@ from django.template import RequestContext
from django.contrib import messages from django.contrib import messages
from django.views.generic.list_detail import object_list from django.views.generic.list_detail import object_list
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext_lazy as _
from django.conf import settings from django.conf import settings
from celery.task.control import inspect from celery.task.control import inspect

View File

@@ -1,3 +1,12 @@
from django.conf import settings """Configuration options for the permissions app"""
from django.utils.translation import ugettext_lazy as _
DEFAULT_ROLES = getattr(settings, 'ROLES_DEFAULT_ROLES', []) from main.api import register_settings
register_settings(
namespace=u'permissions',
module=u'permissions.conf.settings',
settings=[
{'name': u'DEFAULT_ROLES', 'global_name': u'ROLES_DEFAULT_ROLES', 'default': [], 'description': _('A list of existing roles that are automatically assigned to newly created users')},
]
)

View File

@@ -1,8 +1,15 @@
from django.conf import settings """Configuration options for the storage app"""
from django.utils.translation import ugettext_lazy as _
from main.api import register_settings
GRIDFS_HOST = getattr(settings, 'STORAGE_GRIDFS_HOST', u'localhost') register_settings(
GRIDFS_PORT = getattr(settings, 'STORAGE_GRIDFS_PORT', 27017) namespace=u'storage',
GRIDFS_DATABASE_NAME = getattr(settings, 'STORAGE_GRIDFS_DATABASE_NAME', u'document_storage') module=u'storage.conf.settings',
settings=[
FILESTORAGE_LOCATION = getattr(settings, 'STORAGE_FILESTORAGE_LOCATION', u'document_storage') {'name': u'GRIDFS_HOST', 'global_name': u'STORAGE_GRIDFS_HOST', 'default': u'localhost'},
{'name': u'GRIDFS_PORT', 'global_name': u'STORAGE_GRIDFS_PORT', 'default': 27017},
{'name': u'GRIDFS_DATABASE_NAME', 'global_name': u'STORAGE_GRIDFS_DATABASE_NAME', 'default': u'document_storage'},
{'name': u'FILESTORAGE_LOCATION', 'global_name': u'STORAGE_FILESTORAGE_LOCATION', 'default': u'document_storage', 'exists': True},
]
)

View File

@@ -1,8 +1,13 @@
from django.conf import settings """Configuration options for the web_theme app"""
from django.utils.translation import ugettext_lazy as _
#Theme options are: from main.api import register_settings
#amro, bec, bec-green, blue, default, djime-cerulean, drastic-dark,
#kathleene, olive, orange, red, reidb-greenish, warehouse
THEME = getattr(settings, 'WEB_THEME', 'default') register_settings(
ENABLE_SCROLL_JS = getattr(settings, 'WEB_THEME_ENABLE_SCROLL_JS', True) namespace=u'web_theme',
module=u'web_theme.conf.settings',
settings=[
{'name': u'THEME', 'global_name': u'WEB_THEME_THEME', 'default': u'default', 'description': _(u'CSS theme to apply, options are: amro, bec, bec-green, blue, default, djime-cerulean, drastic-dark, kathleene, olive, orange, red, reidb-greenish and warehouse.')},
{'name': u'ENABLE_SCROLL_JS', 'global_name': u'WEB_THEME_ENABLE_SCROLL_JS', 'default': True, 'hidden': True},
]
)

View File

@@ -197,6 +197,7 @@ TEMPLATE_CONTEXT_PROCESSORS = (
# Usage # Usage
#DOCUMENTS_PREVIEW_SIZE = '640x480' #DOCUMENTS_PREVIEW_SIZE = '640x480'
#DOCUMENTS_PRINT_SIZE = '640x480'
#DOCUMENTS_THUMBNAIL_SIZE = '50x50' #DOCUMENTS_THUMBNAIL_SIZE = '50x50'
#DOCUMENTS_DISPLAY_SIZE = '1200' #DOCUMENTS_DISPLAY_SIZE = '1200'
#DOCUMENTS_MULTIPAGE_PREVIEW_SIZE = '160x120' #DOCUMENTS_MULTIPAGE_PREVIEW_SIZE = '160x120'