diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-09-25 23:21:41 +0000 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-09-25 23:21:41 +0000 |
commit | 0c3ebe0befa780485e108bfd85d05fbf6a7bc8e9 (patch) | |
tree | 07c2d02763114c243b16f34c26ed3bcef1b75437 /ipalib | |
parent | ac88500382084d3c24a73c15c5fcfe02660383f7 (diff) | |
download | freeipa.git-0c3ebe0befa780485e108bfd85d05fbf6a7bc8e9.tar.gz freeipa.git-0c3ebe0befa780485e108bfd85d05fbf6a7bc8e9.tar.xz freeipa.git-0c3ebe0befa780485e108bfd85d05fbf6a7bc8e9.zip |
367: Implementing basics of loading plugins out of tree
Diffstat (limited to 'ipalib')
-rw-r--r-- | ipalib/load_plugins.py | 45 | ||||
-rw-r--r-- | ipalib/plugins/__init__.py | 3 |
2 files changed, 44 insertions, 4 deletions
diff --git a/ipalib/load_plugins.py b/ipalib/load_plugins.py index 7863a24b..4352ac65 100644 --- a/ipalib/load_plugins.py +++ b/ipalib/load_plugins.py @@ -27,4 +27,47 @@ Eventually this will also load the out-of tree plugins, but for now it just loads the internal plugins. """ -import plugins +import os +from os import path +import imp +import inspect + + +def load_plugins(src_dir): + """ + Import each Python module found in ``src_dir``. + """ + if not (path.abspath(src_dir) == src_dir and path.isdir(src_dir)): + return + if path.islink(src_dir): + return + suffix = '.py' + for name in sorted(os.listdir(src_dir)): + if not name.endswith(suffix): + continue + py_file = path.join(src_dir, name) + if path.islink(py_file) or not path.isfile(py_file): + continue + module = name[:-len(suffix)] + if module == '__init__': + continue + imp.load_module(module, *imp.find_module(module, [src_dir])) + + +def load_plugins_subpackage(file_in_package): + """ + Load all Python modules found in a plugins/ subpackage. + """ + package_dir = path.dirname(path.abspath(file_in_package)) + plugins_dir = path.join(package_dir, 'plugins') + load_plugins(plugins_dir) + + +load_plugins_subpackage(__file__) +try: + import ipa_server + load_plugins_subpackage(ipa_server.__file__) +except ImportError: + pass + +load_plugins(path.expanduser('~/.freeipa')) diff --git a/ipalib/plugins/__init__.py b/ipalib/plugins/__init__.py index 91b56733..58db94ca 100644 --- a/ipalib/plugins/__init__.py +++ b/ipalib/plugins/__init__.py @@ -20,6 +20,3 @@ """ Sub-package containing all internal plugins. """ - -import example -import override |