mirror of
https://github.com/Hopiu/django-fobi.git
synced 2026-05-10 22:03:09 +00:00
85 lines
2.8 KiB
Python
85 lines
2.8 KiB
Python
__title__ = 'fobi.discover'
|
|
__author__ = 'Artur Barseghyan <artur.barseghyan@gmail.com>'
|
|
__copyright__ = 'Copyright (c) 2014-2015 Artur Barseghyan'
|
|
__license__ = 'GPL 2.0/LGPL 2.1'
|
|
__all__ = ('autodiscover',)
|
|
|
|
import imp
|
|
import logging
|
|
import sys
|
|
|
|
import six
|
|
|
|
from django.conf import settings
|
|
|
|
from nine.versions import DJANGO_GTE_1_7
|
|
|
|
logger = logging.getLogger(__file__)
|
|
|
|
# In Django a dotted path can be used up to the app config class. In
|
|
# such cases the old-school autodiscovery of modules doesn't work but we
|
|
# have a great Django `autodiscover_modules` tool then. In cases if Django
|
|
# version is >= 1.7, we use the Django `autodiscover_modules` tool falling back
|
|
# to our own implementation of it otherwise.
|
|
if DJANGO_GTE_1_7:
|
|
from django.utils.module_loading import autodiscover_modules
|
|
else:
|
|
def autodiscover_modules(module_name):
|
|
for app in settings.INSTALLED_APPS:
|
|
try:
|
|
app = str(app)
|
|
app_path = __import__(app, {}, {}, [app.split('.')[-1]]).__path__
|
|
except (AttributeError, TypeError) as e:
|
|
logger.debug(str(e))
|
|
continue
|
|
|
|
try:
|
|
imp.find_module(module_name, app_path)
|
|
except ImportError as e:
|
|
logger.debug(str(e))
|
|
continue
|
|
__import__('{0}.{1}'.format(app, module_name))
|
|
|
|
from fobi.conf import get_setting
|
|
|
|
def autodiscover():
|
|
"""
|
|
Auto-discovers files that should be found by fobi.
|
|
"""
|
|
# For Python 3 we need to increase the recursion limit, otherwise things
|
|
# break. What we want is to set the recursion limit back to its' initial
|
|
# value after all plugins have been discovered.
|
|
recursion_limit = 1500
|
|
default_recursion_limit = sys.getrecursionlimit()
|
|
|
|
if six.PY3 and recursion_limit > default_recursion_limit:
|
|
sys.setrecursionlimit(recursion_limit)
|
|
|
|
FORM_ELEMENT_PLUGINS_MODULE_NAME = get_setting(
|
|
'FORM_ELEMENT_PLUGINS_MODULE_NAME'
|
|
)
|
|
FORM_HANDLER_PLUGINS_MODULE_NAME = get_setting(
|
|
'FORM_HANDLER_PLUGINS_MODULE_NAME'
|
|
)
|
|
THEMES_MODULE_NAME = get_setting(
|
|
'THEMES_MODULE_NAME'
|
|
)
|
|
FORM_CALLBACKS_MODULE_NAME = get_setting(
|
|
'FORM_CALLBACKS_MODULE_NAME'
|
|
)
|
|
|
|
FORM_IMPORTER_PLUGINS_MODULE_NAME = get_setting(
|
|
'FORM_IMPORTER_PLUGINS_MODULE_NAME'
|
|
)
|
|
|
|
# Discover modules
|
|
autodiscover_modules(FORM_ELEMENT_PLUGINS_MODULE_NAME)
|
|
autodiscover_modules(FORM_HANDLER_PLUGINS_MODULE_NAME)
|
|
autodiscover_modules(THEMES_MODULE_NAME)
|
|
autodiscover_modules(FORM_CALLBACKS_MODULE_NAME)
|
|
|
|
# Do not yet discover form importers
|
|
autodiscover_modules(FORM_IMPORTER_PLUGINS_MODULE_NAME)
|
|
|
|
if six.PY3 and recursion_limit > default_recursion_limit:
|
|
sys.setrecursionlimit(default_recursion_limit)
|