1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import gettext
import importlib
import os
from tryton.config import CURRENT_DIR, get_config_dir
__all__ = ['MODULES', 'register']
_ = gettext.gettext
MODULES = []
def register():
global MODULES
paths = [
os.path.join(get_config_dir(), 'plugins'),
os.path.join(CURRENT_DIR, 'plugins'),
]
paths = list(filter(os.path.isdir, paths))
imported = set()
for path in paths:
finder = importlib.machinery.FileFinder(
path,
(importlib.machinery.SourceFileLoader,
importlib.machinery.SOURCE_SUFFIXES),
(importlib.machinery.SourcelessFileLoader,
importlib.machinery.BYTECODE_SUFFIXES))
for plugin in os.listdir(path):
module = os.path.splitext(plugin)[0]
if (module.startswith('_') or module in imported):
continue
module = 'tryton.plugins.%s' % module
spec = finder.find_spec(module)
if not spec:
continue
module = importlib.util.module_from_spec(spec)
try:
spec.loader.exec_module(module)
except ImportError:
continue
else:
MODULES.append(module)
imported.add(module.__name__)
|