Updated API for plugins.

This commit is contained in:
Norman Jäckel 2016-02-16 16:41:45 +01:00
parent 956bba9a13
commit d181eedeb9

View File

@ -3,6 +3,7 @@ import pkgutil
import sys import sys
from importlib import import_module from importlib import import_module
from django.apps import apps
from django.conf import settings from django.conf import settings
from pkg_resources import iter_entry_points from pkg_resources import iter_entry_points
@ -12,8 +13,6 @@ from openslides.utils.main import (
get_win32_portable_user_data_path, get_win32_portable_user_data_path,
) )
plugins = {}
# Methods to collect plugins. # Methods to collect plugins.
@ -52,35 +51,14 @@ def collect_plugins():
return collected_plugins return collected_plugins
# Methods to retrieve plugins and their metadata. # Methods to retrieve plugin metadata and urlpatterns.
def get_plugin(plugin):
"""
Returns the imported module. The plugin argument must be a python dotted
module path.
"""
try:
plugin = plugins[plugin]
except KeyError:
plugins[plugin] = import_module(plugin)
plugin = get_plugin(plugin)
return plugin
def get_plugin_verbose_name(plugin): def get_plugin_verbose_name(plugin):
""" """
Returns the verbose name of a plugin. The plugin argument must be a python Returns the verbose name of a plugin. The plugin argument must be a python
dotted module path. dotted module path.
""" """
plugin = get_plugin(plugin) return apps.get_app_config(plugin).verbose_name
try:
verbose_name = plugin.get_verbose_name()
except AttributeError:
try:
verbose_name = plugin.__verbose_name__
except AttributeError:
verbose_name = plugin.__name__
return verbose_name
def get_plugin_description(plugin): def get_plugin_description(plugin):
@ -88,12 +66,12 @@ def get_plugin_description(plugin):
Returns the short descrption of a plugin. The plugin argument must be a Returns the short descrption of a plugin. The plugin argument must be a
python dotted module path. python dotted module path.
""" """
plugin = get_plugin(plugin) plugin_app_config = apps.get_app_config(plugin)
try: try:
description = plugin.get_description() description = plugin_app_config.get_description()
except AttributeError: except AttributeError:
try: try:
description = plugin.__description__ description = plugin_app_config.description
except AttributeError: except AttributeError:
description = '' description = ''
return description return description
@ -104,12 +82,12 @@ def get_plugin_version(plugin):
Returns the version string of a plugin. The plugin argument must be a Returns the version string of a plugin. The plugin argument must be a
python dotted module path. python dotted module path.
""" """
plugin = get_plugin(plugin) plugin_app_config = apps.get_app_config(plugin)
try: try:
version = plugin.get_version() version = plugin_app_config.get_version()
except AttributeError: except AttributeError:
try: try:
version = plugin.__version__ version = plugin_app_config.version
except AttributeError: except AttributeError:
version = 'unknown' version = 'unknown'
return version return version
@ -120,12 +98,12 @@ def get_plugin_urlpatterns(plugin):
Returns the urlpatterns object for a plugin. The plugin argument must be Returns the urlpatterns object for a plugin. The plugin argument must be
a python dotted module path. a python dotted module path.
""" """
plugin = get_plugin(plugin) plugin_app_config = apps.get_app_config(plugin)
try: try:
urlpatterns = plugin.get_urlpatterns() urlpatterns = plugin_app_config.get_urlpatterns()
except AttributeError: except AttributeError:
try: try:
urlpatterns = plugin.urls.urlpatterns urlpatterns = plugin_app_config.urlpatterns
except AttributeError: except AttributeError:
urlpatterns = None urlpatterns = None
return urlpatterns return urlpatterns