193 lines
6.3 KiB
Python
193 lines
6.3 KiB
Python
from __future__ import absolute_import, unicode_literals
|
|
|
|
import logging
|
|
import os
|
|
import sys
|
|
import traceback
|
|
import warnings
|
|
|
|
from django import apps
|
|
from django.conf import settings
|
|
from django.conf.urls import include, url
|
|
from django.contrib.auth.signals import user_logged_in
|
|
from django.db.models.signals import post_save
|
|
from django.utils.encoding import force_text
|
|
from django.utils.module_loading import import_string
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from .classes import Template
|
|
from .dependencies import * # NOQA
|
|
from .handlers import (
|
|
handler_pre_initial_setup, handler_pre_upgrade,
|
|
handler_user_locale_profile_session_config, handler_user_locale_profile_create
|
|
)
|
|
from .links import (
|
|
link_about, link_current_user_locale_profile_edit, link_license,
|
|
link_object_error_list_clear, link_setup, link_tools
|
|
)
|
|
|
|
from .literals import MESSAGE_SQLITE_WARNING
|
|
from .menus import (
|
|
menu_about, menu_main, menu_secondary, menu_user
|
|
)
|
|
from .settings import (
|
|
setting_auto_logging, setting_production_error_log_path,
|
|
setting_production_error_logging
|
|
)
|
|
from .signals import pre_initial_setup, pre_upgrade
|
|
from .tasks import task_delete_stale_uploads # NOQA - Force task registration
|
|
from .utils import check_for_sqlite
|
|
from .warnings import DatabaseWarning
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class MayanAppConfig(apps.AppConfig):
|
|
app_namespace = None
|
|
app_url = None
|
|
|
|
def ready(self):
|
|
logger.debug('Initializing app: %s', self.name)
|
|
from mayan.urls import urlpatterns as mayan_urlpatterns
|
|
|
|
if self.app_url:
|
|
top_url = '{}/'.format(self.app_url)
|
|
elif self.app_url is not None:
|
|
top_url = ''
|
|
else:
|
|
top_url = '{}/'.format(self.name)
|
|
|
|
try:
|
|
app_urlpatterns = import_string(
|
|
dotted_path='{}.urls.urlpatterns'.format(self.name)
|
|
)
|
|
except ImportError as exception:
|
|
if force_text(exception) not in ('No module named urls', 'No module named \'{}.urls\''.format(self.name)):
|
|
logger.exception(
|
|
'Import time error when running AppConfig.ready() of app '
|
|
'"%s".', self.name
|
|
)
|
|
exc_info = sys.exc_info()
|
|
traceback.print_exception(*exc_info)
|
|
raise exception
|
|
else:
|
|
mayan_urlpatterns += (
|
|
url(
|
|
regex=r'^{}'.format(top_url), view=include(
|
|
(app_urlpatterns, self.app_namespace or self.name)
|
|
)
|
|
),
|
|
)
|
|
|
|
|
|
class CommonApp(MayanAppConfig):
|
|
app_namespace = 'common'
|
|
app_url = ''
|
|
has_rest_api = True
|
|
has_tests = True
|
|
name = 'mayan.apps.common'
|
|
verbose_name = _('Common')
|
|
|
|
def ready(self):
|
|
super(CommonApp, self).ready()
|
|
if check_for_sqlite():
|
|
warnings.warn(
|
|
category=DatabaseWarning,
|
|
message=force_text(MESSAGE_SQLITE_WARNING)
|
|
)
|
|
|
|
Template(
|
|
name='menu_main', template_name='appearance/main_menu.html'
|
|
)
|
|
|
|
menu_user.bind_links(
|
|
links=(
|
|
link_current_user_locale_profile_edit,
|
|
), position=50
|
|
)
|
|
|
|
menu_about.bind_links(
|
|
links=(
|
|
link_tools, link_setup, link_about, link_license,
|
|
)
|
|
)
|
|
|
|
menu_main.bind_links(links=(menu_about, menu_user,), position=99)
|
|
menu_secondary.bind_links(
|
|
links=(link_object_error_list_clear,), sources=(
|
|
'common:object_error_list',
|
|
)
|
|
)
|
|
|
|
post_save.connect(
|
|
dispatch_uid='common_handler_user_locale_profile_create',
|
|
receiver=handler_user_locale_profile_create,
|
|
sender=settings.AUTH_USER_MODEL
|
|
)
|
|
pre_initial_setup.connect(
|
|
dispatch_uid='common_handler_pre_initial_setup',
|
|
receiver=handler_pre_initial_setup
|
|
)
|
|
pre_upgrade.connect(
|
|
dispatch_uid='common_handler_pre_upgrade',
|
|
receiver=handler_pre_upgrade
|
|
)
|
|
|
|
user_logged_in.connect(
|
|
dispatch_uid='common_handler_user_locale_profile_session_config',
|
|
receiver=handler_user_locale_profile_session_config
|
|
)
|
|
self.setup_auto_logging()
|
|
|
|
def setup_auto_logging(self):
|
|
if setting_auto_logging.value:
|
|
if settings.DEBUG:
|
|
level = 'DEBUG'
|
|
handlers = ['console']
|
|
else:
|
|
level = 'ERROR'
|
|
handlers = ['console']
|
|
|
|
if os.path.exists(settings.MEDIA_ROOT) and setting_production_error_logging.value:
|
|
handlers.append('logfile')
|
|
|
|
loggers = {}
|
|
for project_app in apps.apps.get_app_configs():
|
|
loggers[project_app.name] = {
|
|
'handlers': handlers,
|
|
'propagate': True,
|
|
'level': level,
|
|
}
|
|
|
|
logging_configuration = {
|
|
'version': 1,
|
|
'disable_existing_loggers': False,
|
|
'formatters': {
|
|
'intermediate': {
|
|
'format': '%(name)s <%(process)d> [%(levelname)s] "%(funcName)s() line %(lineno)d %(message)s"',
|
|
},
|
|
'logfile': {
|
|
'format': '%(asctime)s %(name)s <%(process)d> [%(levelname)s] "%(funcName)s() line %(lineno)d %(message)s"'
|
|
},
|
|
},
|
|
'handlers': {
|
|
'console': {
|
|
'class': 'logging.StreamHandler',
|
|
'formatter': 'intermediate',
|
|
'level': 'DEBUG',
|
|
},
|
|
},
|
|
'loggers': loggers
|
|
}
|
|
|
|
if os.path.exists(settings.MEDIA_ROOT) and setting_production_error_logging.value:
|
|
logging_configuration['handlers']['logfile'] = {
|
|
'backupCount': 3,
|
|
'class': 'logging.handlers.RotatingFileHandler',
|
|
'filename': setting_production_error_log_path.value,
|
|
'formatter': 'logfile',
|
|
'maxBytes': 1024,
|
|
}
|
|
|
|
logging.config.dictConfig(logging_configuration)
|