use setuptools entrypoints to load plugins

This commit is contained in:
Benjamin Dauvergne 2014-01-14 18:14:37 +01:00
parent fba08e4a5d
commit a1fda2a7a1
2 changed files with 27 additions and 1 deletions

View File

@ -5,6 +5,7 @@ import os.path
import django.conf.global_settings as DEFAULT_SETTINGS
from django.core.urlresolvers import reverse_lazy
from logging.handlers import SysLogHandler
import pkg_resources
PROJECT_ROOT = os.path.join(os.path.dirname(__file__), '.')
@ -154,6 +155,14 @@ INSTALLED_APPS = (
'ajax_select',
)
# Load plugin applications
for entrypoint in pkg_resources.iter_entry_points('polynum_plugin'):
plugin_class = entrypoint.load()
plugin = plugin_class()
INSTALLED_APPS += tuple(plugin.get_applications())
# From http://django-crispy-forms.readthedocs.org/en/d-0/install.html
CRISPY_TEMPLATE_PACK = 'bootstrap'

View File

@ -1,3 +1,5 @@
import pkg_resources
from django.conf import settings
from django.conf.urls import patterns, include, url
from django.core.urlresolvers import reverse_lazy
@ -19,8 +21,22 @@ request_decorator = combine_decorators(
user_passes_test(user_has_validated_cgu,
login_url=reverse_lazy('cgu-view')))
# Load plugin applications
after_urls = []
before_urls = []
urlpatterns = patterns('',
for entrypoint in pkg_resources.iter_entry_points('polynum_plugin'):
plugin_class = entrypoint.load()
plugin = plugin_class()
for after, urls in plugin.get_urls():
if after:
after_urls.append(url(r'^', include(urls)))
else:
before_urls.append(url(r'^', include(urls)))
urlpatterns = patterns('', *before_urls)
urlpatterns += patterns('',
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
@ -64,3 +80,4 @@ urlpatterns += patterns('',
}),
)
urlpatterns += patterns('', *after_urls)