Files
mayan-edms/mayan/apps/common/apps.py
Roberto Rosario 0e972eff06 Fix typos and PEP8 warnings
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
2019-07-07 01:12:25 -04:00

194 lines
6.4 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_secondary, menu_topbar, 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/menu_main.html'
)
Template(
name='menu_topbar', template_name='appearance/menu_topbar.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_topbar.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)