From 84d326920fc9e6592b8fe9a56adaf6be0d9358c3 Mon Sep 17 00:00:00 2001 From: Kiall Mac Innes <kiall@hp.com> Date: Fri, 12 Apr 2013 13:11:46 +0100 Subject: [PATCH] Allow for controllers to be loaded dynamically. Change-Id: If85de4c02406e8ffd49da3c04c23db58ad2df119 --- monikerclient/shell.py | 2 +- monikerclient/v1/__init__.py | 16 ++++++++-------- setup.py | 8 +++++++- tools/pip-requires | 1 + 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/monikerclient/shell.py b/monikerclient/shell.py index 42a9e476..51881c04 100644 --- a/monikerclient/shell.py +++ b/monikerclient/shell.py @@ -27,7 +27,7 @@ class MonikerShell(App): super(MonikerShell, self).__init__( description='Moniker Client', version=version.version_string(), - command_manager=CommandManager('moniker.cli'), + command_manager=CommandManager('monikerclient.cli'), ) self.log = logging.getLogger(__name__) diff --git a/monikerclient/v1/__init__.py b/monikerclient/v1/__init__.py index eb24f3a6..67027fec 100644 --- a/monikerclient/v1/__init__.py +++ b/monikerclient/v1/__init__.py @@ -14,12 +14,9 @@ # License for the specific language governing permissions and limitations # under the License. import requests +from stevedore import extension from monikerclient import exceptions from monikerclient.auth import KeystoneAuth -from monikerclient.v1 import diagnostics -from monikerclient.v1 import domains -from monikerclient.v1 import records -from monikerclient.v1 import servers class Client(object): @@ -56,10 +53,13 @@ class Client(object): self.requests.auth = auth self.requests.headers.update(headers) - self.diagnostics = diagnostics.DiagnosticsController(client=self) - self.domains = domains.DomainsController(client=self) - self.records = records.RecordsController(client=self) - self.servers = servers.ServersController(client=self) + def _load_controller(ext): + controller = ext.plugin(client=self) + setattr(self, ext.name, controller) + + # Load all controllers + mgr = extension.ExtensionManager('monikerclient.v1.controllers') + mgr.map(_load_controller) def wrap_api_call(self, func, *args, **kw): """ diff --git a/setup.py b/setup.py index ba93e67e..0e75e2ac 100755 --- a/setup.py +++ b/setup.py @@ -47,7 +47,13 @@ setup( ], cmdclass=common_setup.get_cmdclass(), entry_points=textwrap.dedent(""" - [moniker.cli] + [monikerclient.v1.controllers] + diagnostics = monikerclient.v1.diagnostics:DiagnosticsController + domains = monikerclient.v1.domains:DomainsController + records = monikerclient.v1.records:RecordsController + servers = monikerclient.v1.servers:ServersController + + [monikerclient.cli] domain-list = monikerclient.cli.domains:ListDomainsCommand domain-get = monikerclient.cli.domains:GetDomainCommand domain-create = monikerclient.cli.domains:CreateDomainCommand diff --git a/tools/pip-requires b/tools/pip-requires index 6a4492aa..a358dc05 100644 --- a/tools/pip-requires +++ b/tools/pip-requires @@ -1,5 +1,6 @@ cliff>=1.2.1 jsonschema>=0.8,<1 +stevedore requests>=0.8.3,<1.0 python-keystoneclient>=0.2.0 keyring