diff options
author | Jan Cholasta <jcholast@redhat.com> | 2015-03-03 14:33:48 +0000 |
---|---|---|
committer | Tomas Babej <tbabej@redhat.com> | 2015-03-05 11:01:36 +0100 |
commit | dae6a1881354e57b58c79ffea0a75f524286855e (patch) | |
tree | e318fac565d1614c037ef880ab148e7049b47a96 | |
parent | 2db741e847c60d712dbc8ee1cd65a978a78eb312 (diff) | |
download | freeipa-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>
-rw-r--r-- | ipalib/__init__.py | 17 | ||||
-rw-r--r-- | ipalib/plugable.py | 12 |
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): |