update code from PR review notes
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/7a1bb847 Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/7a1bb847 Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/7a1bb847 Branch: refs/heads/trunk Commit: 7a1bb8475e9d767b1eef51d23e93822325a2f4e3 Parents: 2888c72 Author: Anthony Shaw <anthonys...@apache.org> Authored: Sat Jun 25 20:18:59 2016 +1000 Committer: Anthony Shaw <anthonys...@apache.org> Committed: Sat Jun 25 20:18:59 2016 +1000 ---------------------------------------------------------------------- libcloud/__init__.py | 58 ++------------------------------- libcloud/base.py | 81 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 55 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/7a1bb847/libcloud/__init__.py ---------------------------------------------------------------------- diff --git a/libcloud/__init__.py b/libcloud/__init__.py index eea2bbb..4c42e91 100644 --- a/libcloud/__init__.py +++ b/libcloud/__init__.py @@ -21,24 +21,9 @@ libcloud provides a unified interface to the cloud computing resources. import os import codecs -from libcloud.backup.providers import Provider as BackupProvider -from libcloud.backup.providers import get_driver as get_backup_driver - -from libcloud.compute.providers import Provider as ComputeProvider -from libcloud.compute.providers import get_driver as get_compute_driver - -from libcloud.container.providers import Provider as ContainerProvider -from libcloud.container.providers import get_driver as get_container_driver - -from libcloud.dns.providers import Provider as DnsProvider -from libcloud.dns.providers import get_driver as get_dns_driver - -from libcloud.loadbalancer.providers import Provider as LoadBalancerProvider -from libcloud.loadbalancer.providers import get_driver as \ - get_loadbalancer_driver - -from libcloud.storage.providers import Provider as StorageProvider -from libcloud.storage.providers import get_driver as get_storage_driver +from libcloud.base import DriverType # NOQA +from libcloud.base import DriverTypeFactoryMap # NOQA +from libcloud.base import get_driver # NOQA __all__ = ['__version__', 'enable_debug'] @@ -94,40 +79,3 @@ def _init_once(): paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG) _init_once() - - -class DriverType: - """ Backup-as-a-service driver """ - BACKUP = BackupProvider - - """ Compute-as-a-Service driver """ - COMPUTE = ComputeProvider - - """ Container-as-a-Service driver """ - CONTAINER = ContainerProvider - - """ DNS service provider driver """ - DNS = DnsProvider - - """ Load balancer provider-driver """ - LOADBALANCER = LoadBalancerProvider - - """ Storage-as-a-Service driver """ - STORAGE = StorageProvider - - -DriverTypeFactoryMap = { - DriverType.BACKUP: get_backup_driver, - DriverType.COMPUTE: get_compute_driver, - DriverType.CONTAINER: get_container_driver, - DriverType.DNS: get_dns_driver, - DriverType.LOADBALANCER: get_loadbalancer_driver, - DriverType.STORAGE: get_storage_driver -} - - -def get_driver(type, provider): - """ - Get a driver - """ - return DriverTypeFactoryMap[type](provider) http://git-wip-us.apache.org/repos/asf/libcloud/blob/7a1bb847/libcloud/base.py ---------------------------------------------------------------------- diff --git a/libcloud/base.py b/libcloud/base.py new file mode 100644 index 0000000..6491f98 --- /dev/null +++ b/libcloud/base.py @@ -0,0 +1,81 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from libcloud.backup.providers import Provider as BackupProvider +from libcloud.backup.providers import get_driver as get_backup_driver + +from libcloud.compute.providers import Provider as ComputeProvider +from libcloud.compute.providers import get_driver as get_compute_driver + +from libcloud.container.providers import Provider as ContainerProvider +from libcloud.container.providers import get_driver as get_container_driver + +from libcloud.dns.providers import Provider as DnsProvider +from libcloud.dns.providers import get_driver as get_dns_driver + +from libcloud.loadbalancer.providers import Provider as LoadBalancerProvider +from libcloud.loadbalancer.providers import get_driver as \ + get_loadbalancer_driver + +from libcloud.storage.providers import Provider as StorageProvider +from libcloud.storage.providers import get_driver as get_storage_driver + + +class DriverType(object): + """ Backup-as-a-service driver """ + BACKUP = BackupProvider + + """ Compute-as-a-Service driver """ + COMPUTE = ComputeProvider + + """ Container-as-a-Service driver """ + CONTAINER = ContainerProvider + + """ DNS service provider driver """ + DNS = DnsProvider + + """ Load balancer provider-driver """ + LOADBALANCER = LoadBalancerProvider + + """ Storage-as-a-Service driver """ + STORAGE = StorageProvider + + +DriverTypeFactoryMap = { + DriverType.BACKUP: get_backup_driver, + DriverType.COMPUTE: get_compute_driver, + DriverType.CONTAINER: get_container_driver, + DriverType.DNS: get_dns_driver, + DriverType.LOADBALANCER: get_loadbalancer_driver, + DriverType.STORAGE: get_storage_driver +} + + +class DriverTypeNotFoundError(KeyError): + def __init__(self): + self.message = "Driver type not found." + + def __repr__(self): + return self.message + + +def get_driver(type, provider): + """ + Get a driver + """ + try: + return DriverTypeFactoryMap[type](provider) + except KeyError: + raise DriverTypeNotFoundError()