summaryrefslogtreecommitdiffstats
path: root/ipalib
diff options
context:
space:
mode:
authorJan Cholasta <jcholast@redhat.com>2015-03-03 14:33:48 +0000
committerTomas Babej <tbabej@redhat.com>2015-03-05 11:01:36 +0100
commitdae6a1881354e57b58c79ffea0a75f524286855e (patch)
treee318fac565d1614c037ef880ab148e7049b47a96 /ipalib
parent2db741e847c60d712dbc8ee1cd65a978a78eb312 (diff)
downloadfreeipa-dae6a1881354e57b58c79ffea0a75f524286855e.tar.gz
freeipa-dae6a1881354e57b58c79ffea0a75f524286855e.tar.xz
freeipa-dae6a1881354e57b58c79ffea0a75f524286855e.zip
ipalib: Move plugin package setup to ipalib-specific API subclass
https://fedorahosted.org/freeipa/ticket/3090 Reviewed-By: Tomas Babej <tbabej@redhat.com>
Diffstat (limited to 'ipalib')
-rw-r--r--ipalib/__init__.py17
-rw-r--r--ipalib/plugable.py12
2 files changed, 20 insertions, 9 deletions
diff --git a/ipalib/__init__.py b/ipalib/__init__.py
index 6b1ec573a..381f38162 100644
--- a/ipalib/__init__.py
+++ b/ipalib/__init__.py
@@ -898,6 +898,21 @@ else:
__version__ = '%d.%d.%d.%s.%d' % version_info
+class API(plugable.API):
+ def __init__(self, allowed):
+ super(API, self).__init__(allowed, ['ipalib'])
+
+ def bootstrap(self, parser=None, **overrides):
+ super(API, self).bootstrap(parser, **overrides)
+
+ if self.env.context in ('server', 'lite'):
+ self.packages.append('ipaserver')
+ if self.env.context in ('installer', 'updates'):
+ self.packages.append('ipaserver/install/plugins')
+ if self.env.context in ('advise',):
+ self.packages.append('ipaserver/advise/plugins')
+
+
def create_api(mode='dummy'):
"""
Return standard `plugable.API` instance.
@@ -915,7 +930,7 @@ def create_api(mode='dummy'):
- `backend.Backend`
"""
- api = plugable.API(Command, Object, Method, Backend, Updater, Advice)
+ api = API((Command, Object, Method, Backend, Updater, Advice))
if mode is not None:
api.env.mode = mode
assert mode != 'production'
diff --git a/ipalib/plugable.py b/ipalib/plugable.py
index aae762649..4c42e1e44 100644
--- a/ipalib/plugable.py
+++ b/ipalib/plugable.py
@@ -446,8 +446,9 @@ class API(DictProxy):
Dynamic API object through which `Plugin` instances are accessed.
"""
- def __init__(self, *allowed):
+ def __init__(self, allowed, packages):
self.__allowed = allowed
+ self.packages = packages
self.__d = dict()
self.__done = set()
self.__registry = Registry()
@@ -635,13 +636,8 @@ class API(DictProxy):
self.__do_if_not_done('bootstrap')
if self.env.mode in ('dummy', 'unit_test'):
return
- self.import_plugins('ipalib')
- if self.env.context in ('server', 'lite'):
- self.import_plugins('ipaserver')
- if self.env.context in ('installer', 'updates'):
- self.import_plugins('ipaserver/install/plugins')
- if self.env.context in ('advise'):
- self.import_plugins('ipaserver/advise/plugins')
+ for package in self.packages:
+ self.import_plugins(package)
# FIXME: This method has no unit test
def import_plugins(self, package):