mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Remove py2-isms and avoid sys.path hacks
This commit is contained in:
parent
58edad6897
commit
ed1eca160e
1 changed files with 20 additions and 12 deletions
|
|
@ -1,9 +1,8 @@
|
||||||
import importlib
|
import importlib
|
||||||
|
import importlib.machinery
|
||||||
|
import importlib.util
|
||||||
import logging
|
import logging
|
||||||
import pkgutil
|
import pkgutil
|
||||||
import sys
|
|
||||||
|
|
||||||
import six
|
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
@ -39,6 +38,20 @@ def list_plugins(ns_pkg=None):
|
||||||
logger.info('No plugins are installed')
|
logger.info('No plugins are installed')
|
||||||
|
|
||||||
|
|
||||||
|
def load_legacy_plugin(plugin, plugin_paths):
|
||||||
|
# Try to find plugin in PLUGIN_PATHS
|
||||||
|
spec = importlib.machinery.PathFinder.find_spec(plugin, plugin_paths)
|
||||||
|
if spec is None:
|
||||||
|
# If failed, try to find it in normal importable locations
|
||||||
|
spec = importlib.util.find_spec(plugin)
|
||||||
|
if spec is None:
|
||||||
|
raise ImportError('Cannot import plugin `{}`'.format(plugin))
|
||||||
|
else:
|
||||||
|
mod = importlib.util.module_from_spec(spec)
|
||||||
|
spec.loader.exec_module(mod)
|
||||||
|
return mod
|
||||||
|
|
||||||
|
|
||||||
def load_plugins(settings):
|
def load_plugins(settings):
|
||||||
logger.debug('Finding namespace plugins')
|
logger.debug('Finding namespace plugins')
|
||||||
namespace_plugins = get_namespace_plugins()
|
namespace_plugins = get_namespace_plugins()
|
||||||
|
|
@ -47,13 +60,8 @@ def load_plugins(settings):
|
||||||
'\n'.join(namespace_plugins))
|
'\n'.join(namespace_plugins))
|
||||||
plugins = []
|
plugins = []
|
||||||
if settings.get('PLUGINS') is not None:
|
if settings.get('PLUGINS') is not None:
|
||||||
_sys_path = sys.path[:]
|
|
||||||
|
|
||||||
for path in settings.get('PLUGIN_PATHS', []):
|
|
||||||
sys.path.insert(0, path)
|
|
||||||
|
|
||||||
for plugin in settings['PLUGINS']:
|
for plugin in settings['PLUGINS']:
|
||||||
if isinstance(plugin, six.string_types):
|
if isinstance(plugin, str):
|
||||||
logger.debug('Loading plugin `%s`', plugin)
|
logger.debug('Loading plugin `%s`', plugin)
|
||||||
# try to find in namespace plugins
|
# try to find in namespace plugins
|
||||||
if plugin in namespace_plugins:
|
if plugin in namespace_plugins:
|
||||||
|
|
@ -64,13 +72,13 @@ def load_plugins(settings):
|
||||||
# try to import it
|
# try to import it
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
plugin = __import__(plugin, globals(), locals(),
|
plugin = load_legacy_plugin(
|
||||||
str('module'))
|
plugin,
|
||||||
|
settings.get('PLUGIN_PATHS', []))
|
||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
logger.error('Cannot load plugin `%s`\n%s', plugin, e)
|
logger.error('Cannot load plugin `%s`\n%s', plugin, e)
|
||||||
continue
|
continue
|
||||||
plugins.append(plugin)
|
plugins.append(plugin)
|
||||||
sys.path = _sys_path
|
|
||||||
else:
|
else:
|
||||||
plugins = list(namespace_plugins.values())
|
plugins = list(namespace_plugins.values())
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue