Просмотр исходного кода

Merge pull request #200 from CloudVE/change_package_structure

Change package structure
Nuwan Goonasekera 7 лет назад
Родитель
Сommit
07889a866c
81 измененных файлов с 624 добавлено и 584 удалено
  1. 42 10
      CHANGELOG.rst
  2. 1 1
      README.rst
  3. 1 1
      cloudbridge/__init__.py
  4. 0 0
      cloudbridge/base/__init__.py
  5. 0 0
      cloudbridge/base/helpers.py
  6. 0 0
      cloudbridge/base/middleware.py
  7. 0 0
      cloudbridge/base/provider.py
  8. 35 35
      cloudbridge/base/resources.py
  9. 23 23
      cloudbridge/base/services.py
  10. 5 5
      cloudbridge/base/subservices.py
  11. 0 2
      cloudbridge/cloud/__init__.py
  12. 7 7
      cloudbridge/factory.py
  13. 0 0
      cloudbridge/interfaces/__init__.py
  14. 0 0
      cloudbridge/interfaces/exceptions.py
  15. 0 0
      cloudbridge/interfaces/provider.py
  16. 0 0
      cloudbridge/interfaces/resources.py
  17. 3 3
      cloudbridge/interfaces/services.py
  18. 3 3
      cloudbridge/interfaces/subservices.py
  19. 0 0
      cloudbridge/providers/__init__.py
  20. 0 0
      cloudbridge/providers/aws/__init__.py
  21. 2 2
      cloudbridge/providers/aws/helpers.py
  22. 2 2
      cloudbridge/providers/aws/provider.py
  23. 27 27
      cloudbridge/providers/aws/resources.py
  24. 35 35
      cloudbridge/providers/aws/services.py
  25. 5 5
      cloudbridge/providers/aws/subservices.py
  26. 0 0
      cloudbridge/providers/azure/__init__.py
  27. 4 4
      cloudbridge/providers/azure/azure_client.py
  28. 1 1
      cloudbridge/providers/azure/helpers.py
  29. 9 8
      cloudbridge/providers/azure/provider.py
  30. 28 28
      cloudbridge/providers/azure/resources.py
  31. 34 34
      cloudbridge/providers/azure/services.py
  32. 5 5
      cloudbridge/providers/azure/subservices.py
  33. 0 0
      cloudbridge/providers/gcp/README.rst
  34. 0 0
      cloudbridge/providers/gcp/__init__.py
  35. 1 1
      cloudbridge/providers/gcp/helpers.py
  36. 8 2
      cloudbridge/providers/gcp/provider.py
  37. 28 28
      cloudbridge/providers/gcp/resources.py
  38. 29 29
      cloudbridge/providers/gcp/services.py
  39. 5 5
      cloudbridge/providers/gcp/subservices.py
  40. 0 0
      cloudbridge/providers/mock/__init__.py
  41. 0 0
      cloudbridge/providers/mock/provider.py
  42. 0 0
      cloudbridge/providers/openstack/__init__.py
  43. 1 1
      cloudbridge/providers/openstack/helpers.py
  44. 2 2
      cloudbridge/providers/openstack/provider.py
  45. 27 27
      cloudbridge/providers/openstack/resources.py
  46. 36 36
      cloudbridge/providers/openstack/services.py
  47. 5 5
      cloudbridge/providers/openstack/subservices.py
  48. 1 1
      codeclimate.yml
  49. 6 6
      docs/api_docs/cloud/exceptions.rst
  50. 2 2
      docs/api_docs/cloud/providers.rst
  51. 33 33
      docs/api_docs/cloud/resources.rst
  52. 19 19
      docs/api_docs/cloud/services.rst
  53. 7 7
      docs/getting_started.rst
  54. 1 1
      docs/index.rst
  55. 2 2
      docs/topics/event_system.rst
  56. 5 5
      docs/topics/provider_development.rst
  57. 1 1
      docs/topics/release_process.rst
  58. 3 3
      docs/topics/setup.rst
  59. 3 3
      docs/topics/testing.rst
  60. 2 2
      setup.cfg
  61. 5 5
      setup.py
  62. 0 0
      tests/__init__.py
  63. 0 0
      tests/fixtures/custom_amis.json
  64. 0 0
      tests/fixtures/logo.jpg
  65. 8 8
      tests/helpers/__init__.py
  66. 8 8
      tests/helpers/standard_interface_tests.py
  67. 2 2
      tests/test_base_helpers.py
  68. 12 12
      tests/test_block_store_service.py
  69. 5 6
      tests/test_cloud_factory.py
  70. 4 4
      tests/test_cloud_helpers.py
  71. 13 13
      tests/test_compute_service.py
  72. 7 7
      tests/test_image_service.py
  73. 11 7
      tests/test_interface.py
  74. 5 5
      tests/test_middleware_system.py
  75. 12 12
      tests/test_network_service.py
  76. 5 5
      tests/test_object_life_cycle.py
  77. 9 9
      tests/test_object_store_service.py
  78. 4 4
      tests/test_region_service.py
  79. 10 10
      tests/test_security_service.py
  80. 3 3
      tests/test_vm_types_service.py
  81. 2 2
      tox.ini

+ 42 - 10
CHANGELOG.rst

@@ -1,16 +1,48 @@
+2.0.0 - March 13, 2019 (sha 8b37715a7ff3f079155f2808ca42e4e81dd8c1da)
+---------------------------------------------------------------------
+
+* This is a major release which contains many improvements and some breaking
+  changes to the interface, but the changes are fairly straightforward.
+* Support for Google Cloud (thanks to @mbookman, @chiniforooshan, @baizhang)
+* Support for middleware, event listening and interception, allowing
+  CloudBridge to be extended without needing to modify library code (This is
+  also potentially useful for handling corner cases for specific clouds).
+* The mock provider is now available by default as a standard cloud provider,
+  which is useful for testing applications that use CloudBridge.
+* Providers now operate in a single zone, and therefore, all methods that
+  previously required the zone as a parameter no longer do. Specifically,
+  ``instance.create()``, ``volume.create()``, ``subnet.create``,
+  ``subnet.get_or_create_default()`` are affected in services,
+  and ``snap.create_volume`` is affected in resources. The provider's default
+  zone must now be specified through the provider config.
+* All exceptions that are generated by CloudBridge will now extend from
+  ``CloudBridgeBaseException``
+* The cloud package is deprecated and everything under it has been moved
+  one level up. For example, instead of
+  ``from cloudbridge.cloud.factory import CloudProviderFactory`` use
+  ``from cloudbridge.factory import CloudProviderFactory``.
+* Services are much more uniform now, and sub-services have been introduced
+  for greater uniformity. For example, ``net.create_subnet()`` is now
+  ``net.subnets.create()``
+* ``gateways.get_or_create_inet_gateway()`` is now simply
+  ``gateways.get_or_create()``
+* AWS instance types are now served through Amazon CloudFront for better
+  performance.
+* Miscellaneous bug fixes and improvements.
+
 1.0.2 - September 25, 2018 (sha 621aeed1a8d7c5ad270649f8ee960e9682e57dae)
--------
+-------------------------------------------------------------------------
 * Added AWS instance types caching for better performance
 * Added ``router.subnets`` property
 * Ensure the default network for CloudBridge on AWS has subnets
 
 1.0.1 - September 7, 2018. (sha 3130492008c5e0e115b8dfec880d32a4ac90b761)
--------
+-------------------------------------------------------------------------
 * Fixed minor bug when retrieving buckets with only limited access.
 * Relaxed some library version dependencies (e.g. six).
 
 1.0.0 - September 6, 2018. (sha 11bccd822f21a598fc753995440cf1a409984889)
--------
+-------------------------------------------------------------------------
 
 * Added Microsoft Azure as a provider.
 * Restructured the interface to make it more comprehensible and uniform across
@@ -40,23 +72,23 @@
 * General documentation updates.
 
 0.3.3 - August 7, 2017. (sha 348e1e88935f61f53a83ed8d6a0e012a46621e25)
--------
+----------------------------------------------------------------------
 
 * Remove explicit versioning of requests and Babel.
 
 0.3.2 - June 10, 2017. (sha f07f3cbd758a0872b847b5537d9073c90f87c24d)
--------
+---------------------------------------------------------------------
 
 * Patch release to support files>5GB with OpenStack (thanks @MartinPaulo).
 * Misc bug fixes.
 
 0.3.1 - April 18, 2017. (sha f36a462e886d8444cb2818f6573677ecf0565315)
--------
+----------------------------------------------------------------------
 
 * Patch for binary file handling in OpenStack.
 
 0.3.0 - April 11, 2017. (sha 13539ccda9e4809082796574d18b1b9bb3f2c624)
--------
+----------------------------------------------------------------------
 
 * Reworked test framework to rely on tox's test generation features. This
   allows for individual test cases to be run on a per provider basis.
@@ -71,7 +103,7 @@
 * General documentation updates (testing, release process)
 
 0.2.0 - March 23, 2017. (sha a442d96b829ea2c721728520b01981fa61774625)
--------
+----------------------------------------------------------------------
 
 * Reworked the instance launch method to require subnet vs. network. This
   removed the option of adding network interface to a launch config object.
@@ -87,7 +119,7 @@
 
 
 0.1.1 - Aug 10, 2016. (sha 0122fb1173c88ae64e40140ffd35ff3797e9e4ad)
--------
+--------------------------------------------------------------------
 
 * For AWS, always launch instances into private networking (i.e., VPC).
 * Support for using OpenStack Keystone v3.
@@ -98,7 +130,7 @@
 
 
 0.1.0 - Jan 30, 2016.
--------
+---------------------
 
 * Initial release of CloudBridge.
 * Support for Bucket, Instance, Instance type, Key pair, Machine image.

+ 1 - 1
README.rst

@@ -82,7 +82,7 @@ exploring the API:
 
 .. code-block:: python
 
-  from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
+  from cloudbridge.factory import CloudProviderFactory, ProviderList
 
   provider = CloudProviderFactory().create_provider(ProviderList.AWS, {})
   print(provider.security.key_pairs.list())

+ 1 - 1
cloudbridge/__init__.py

@@ -2,7 +2,7 @@
 import logging
 
 # Current version of the library
-__version__ = '1.0.2'
+__version__ = '2.0.0'
 
 
 def get_version():

+ 0 - 0
cloudbridge/cloud/base/__init__.py → cloudbridge/base/__init__.py


+ 0 - 0
cloudbridge/cloud/base/helpers.py → cloudbridge/base/helpers.py


+ 0 - 0
cloudbridge/cloud/base/middleware.py → cloudbridge/base/middleware.py


+ 0 - 0
cloudbridge/cloud/base/provider.py → cloudbridge/base/provider.py


+ 35 - 35
cloudbridge/cloud/base/resources.py → cloudbridge/base/resources.py

@@ -12,42 +12,42 @@ import uuid
 
 import six
 
-from cloudbridge.cloud.interfaces.exceptions import \
+from cloudbridge.interfaces.exceptions import \
     InvalidConfigurationException
-from cloudbridge.cloud.interfaces.exceptions import InvalidLabelException
-from cloudbridge.cloud.interfaces.exceptions import InvalidNameException
-from cloudbridge.cloud.interfaces.exceptions import WaitStateException
-from cloudbridge.cloud.interfaces.resources import AttachmentInfo
-from cloudbridge.cloud.interfaces.resources import Bucket
-from cloudbridge.cloud.interfaces.resources import BucketObject
-from cloudbridge.cloud.interfaces.resources import CloudResource
-from cloudbridge.cloud.interfaces.resources import FloatingIP
-from cloudbridge.cloud.interfaces.resources import FloatingIpState
-from cloudbridge.cloud.interfaces.resources import GatewayState
-from cloudbridge.cloud.interfaces.resources import Instance
-from cloudbridge.cloud.interfaces.resources import InstanceState
-from cloudbridge.cloud.interfaces.resources import InternetGateway
-from cloudbridge.cloud.interfaces.resources import KeyPair
-from cloudbridge.cloud.interfaces.resources import LaunchConfig
-from cloudbridge.cloud.interfaces.resources import MachineImage
-from cloudbridge.cloud.interfaces.resources import MachineImageState
-from cloudbridge.cloud.interfaces.resources import Network
-from cloudbridge.cloud.interfaces.resources import NetworkState
-from cloudbridge.cloud.interfaces.resources import ObjectLifeCycleMixin
-from cloudbridge.cloud.interfaces.resources import PageableObjectMixin
-from cloudbridge.cloud.interfaces.resources import PlacementZone
-from cloudbridge.cloud.interfaces.resources import Region
-from cloudbridge.cloud.interfaces.resources import ResultList
-from cloudbridge.cloud.interfaces.resources import Router
-from cloudbridge.cloud.interfaces.resources import Snapshot
-from cloudbridge.cloud.interfaces.resources import SnapshotState
-from cloudbridge.cloud.interfaces.resources import Subnet
-from cloudbridge.cloud.interfaces.resources import SubnetState
-from cloudbridge.cloud.interfaces.resources import VMFirewall
-from cloudbridge.cloud.interfaces.resources import VMFirewallRule
-from cloudbridge.cloud.interfaces.resources import VMType
-from cloudbridge.cloud.interfaces.resources import Volume
-from cloudbridge.cloud.interfaces.resources import VolumeState
+from cloudbridge.interfaces.exceptions import InvalidLabelException
+from cloudbridge.interfaces.exceptions import InvalidNameException
+from cloudbridge.interfaces.exceptions import WaitStateException
+from cloudbridge.interfaces.resources import AttachmentInfo
+from cloudbridge.interfaces.resources import Bucket
+from cloudbridge.interfaces.resources import BucketObject
+from cloudbridge.interfaces.resources import CloudResource
+from cloudbridge.interfaces.resources import FloatingIP
+from cloudbridge.interfaces.resources import FloatingIpState
+from cloudbridge.interfaces.resources import GatewayState
+from cloudbridge.interfaces.resources import Instance
+from cloudbridge.interfaces.resources import InstanceState
+from cloudbridge.interfaces.resources import InternetGateway
+from cloudbridge.interfaces.resources import KeyPair
+from cloudbridge.interfaces.resources import LaunchConfig
+from cloudbridge.interfaces.resources import MachineImage
+from cloudbridge.interfaces.resources import MachineImageState
+from cloudbridge.interfaces.resources import Network
+from cloudbridge.interfaces.resources import NetworkState
+from cloudbridge.interfaces.resources import ObjectLifeCycleMixin
+from cloudbridge.interfaces.resources import PageableObjectMixin
+from cloudbridge.interfaces.resources import PlacementZone
+from cloudbridge.interfaces.resources import Region
+from cloudbridge.interfaces.resources import ResultList
+from cloudbridge.interfaces.resources import Router
+from cloudbridge.interfaces.resources import Snapshot
+from cloudbridge.interfaces.resources import SnapshotState
+from cloudbridge.interfaces.resources import Subnet
+from cloudbridge.interfaces.resources import SubnetState
+from cloudbridge.interfaces.resources import VMFirewall
+from cloudbridge.interfaces.resources import VMFirewallRule
+from cloudbridge.interfaces.resources import VMType
+from cloudbridge.interfaces.resources import Volume
+from cloudbridge.interfaces.resources import VolumeState
 
 from . import helpers as cb_helpers
 

+ 23 - 23
cloudbridge/cloud/base/services.py → cloudbridge/base/services.py

@@ -3,29 +3,29 @@ Base implementation for services available through a provider
 """
 import logging
 
-from cloudbridge.cloud.interfaces.exceptions import InvalidParamException
-from cloudbridge.cloud.interfaces.resources import Network
-from cloudbridge.cloud.interfaces.services import BucketObjectService
-from cloudbridge.cloud.interfaces.services import BucketService
-from cloudbridge.cloud.interfaces.services import CloudService
-from cloudbridge.cloud.interfaces.services import ComputeService
-from cloudbridge.cloud.interfaces.services import FloatingIPService
-from cloudbridge.cloud.interfaces.services import GatewayService
-from cloudbridge.cloud.interfaces.services import ImageService
-from cloudbridge.cloud.interfaces.services import InstanceService
-from cloudbridge.cloud.interfaces.services import KeyPairService
-from cloudbridge.cloud.interfaces.services import NetworkService
-from cloudbridge.cloud.interfaces.services import NetworkingService
-from cloudbridge.cloud.interfaces.services import RegionService
-from cloudbridge.cloud.interfaces.services import RouterService
-from cloudbridge.cloud.interfaces.services import SecurityService
-from cloudbridge.cloud.interfaces.services import SnapshotService
-from cloudbridge.cloud.interfaces.services import StorageService
-from cloudbridge.cloud.interfaces.services import SubnetService
-from cloudbridge.cloud.interfaces.services import VMFirewallRuleService
-from cloudbridge.cloud.interfaces.services import VMFirewallService
-from cloudbridge.cloud.interfaces.services import VMTypeService
-from cloudbridge.cloud.interfaces.services import VolumeService
+from cloudbridge.interfaces.exceptions import InvalidParamException
+from cloudbridge.interfaces.resources import Network
+from cloudbridge.interfaces.services import BucketObjectService
+from cloudbridge.interfaces.services import BucketService
+from cloudbridge.interfaces.services import CloudService
+from cloudbridge.interfaces.services import ComputeService
+from cloudbridge.interfaces.services import FloatingIPService
+from cloudbridge.interfaces.services import GatewayService
+from cloudbridge.interfaces.services import ImageService
+from cloudbridge.interfaces.services import InstanceService
+from cloudbridge.interfaces.services import KeyPairService
+from cloudbridge.interfaces.services import NetworkService
+from cloudbridge.interfaces.services import NetworkingService
+from cloudbridge.interfaces.services import RegionService
+from cloudbridge.interfaces.services import RouterService
+from cloudbridge.interfaces.services import SecurityService
+from cloudbridge.interfaces.services import SnapshotService
+from cloudbridge.interfaces.services import StorageService
+from cloudbridge.interfaces.services import SubnetService
+from cloudbridge.interfaces.services import VMFirewallRuleService
+from cloudbridge.interfaces.services import VMFirewallService
+from cloudbridge.interfaces.services import VMTypeService
+from cloudbridge.interfaces.services import VolumeService
 
 from . import helpers as cb_helpers
 from .middleware import dispatch

+ 5 - 5
cloudbridge/cloud/base/subservices.py → cloudbridge/base/subservices.py

@@ -1,10 +1,10 @@
 import logging
 
-from cloudbridge.cloud.interfaces.subservices import BucketObjectSubService
-from cloudbridge.cloud.interfaces.subservices import FloatingIPSubService
-from cloudbridge.cloud.interfaces.subservices import GatewaySubService
-from cloudbridge.cloud.interfaces.subservices import SubnetSubService
-from cloudbridge.cloud.interfaces.subservices import VMFirewallRuleSubService
+from cloudbridge.interfaces.subservices import BucketObjectSubService
+from cloudbridge.interfaces.subservices import FloatingIPSubService
+from cloudbridge.interfaces.subservices import GatewaySubService
+from cloudbridge.interfaces.subservices import SubnetSubService
+from cloudbridge.interfaces.subservices import VMFirewallRuleSubService
 
 from .resources import BasePageableObjectMixin
 

+ 0 - 2
cloudbridge/cloud/__init__.py

@@ -1,2 +0,0 @@
-from .factory import CloudProviderFactory  # noqa
-from .factory import ProviderList  # noqa

+ 7 - 7
cloudbridge/cloud/factory.py → cloudbridge/factory.py

@@ -4,9 +4,9 @@ import logging
 import pkgutil
 from collections import defaultdict
 
-from cloudbridge.cloud import providers
-from cloudbridge.cloud.interfaces import CloudProvider
-from cloudbridge.cloud.interfaces import TestMockHelperMixin
+from cloudbridge import providers
+from cloudbridge.interfaces import CloudProvider
+from cloudbridge.interfaces import TestMockHelperMixin
 
 
 log = logging.getLogger(__name__)
@@ -33,7 +33,7 @@ class CloudProviderFactory(object):
     def register_provider_class(self, cls):
         """
         Registers a provider class with the factory. The class must
-        inherit from cloudbridge.cloud.interfaces.CloudProvider
+        inherit from cloudbridge.interfaces.CloudProvider
         and also have a class attribute named PROVIDER_ID.
 
         The PROVIDER_ID is a user friendly name for the cloud provider,
@@ -43,7 +43,7 @@ class CloudProviderFactory(object):
         :type  cls: class
         :param cls: A class implementing the CloudProvider interface.
                     Mock providers must also implement
-                    :py:class:`cloudbridge.cloud.base.helpers.
+                    :py:class:`cloudbridge.base.helpers.
                     TestMockHelperMixin`.
         """
         if isinstance(cls, type) and issubclass(cls, CloudProvider):
@@ -64,7 +64,7 @@ class CloudProviderFactory(object):
     def discover_providers(self):
         """
         Discover all available providers within the
-        ``cloudbridge.cloud.providers`` package.
+        ``cloudbridge.providers`` package.
         Note that this methods does not guard against a failed import.
         """
         for _, modname, _ in pkgutil.iter_modules(providers.__path__):
@@ -93,7 +93,7 @@ class CloudProviderFactory(object):
         Get a list of available providers.
 
         It uses a simple automatic discovery system by iterating through all
-        submodules in cloudbridge.cloud.providers.
+        submodules in cloudbridge.providers.
 
         :rtype: dict
         :return: A dict of available providers and their implementations in the

+ 0 - 0
cloudbridge/cloud/interfaces/__init__.py → cloudbridge/interfaces/__init__.py


+ 0 - 0
cloudbridge/cloud/interfaces/exceptions.py → cloudbridge/interfaces/exceptions.py


+ 0 - 0
cloudbridge/cloud/interfaces/provider.py → cloudbridge/interfaces/provider.py


+ 0 - 0
cloudbridge/cloud/interfaces/resources.py → cloudbridge/interfaces/resources.py


+ 3 - 3
cloudbridge/cloud/interfaces/services.py → cloudbridge/interfaces/services.py

@@ -5,7 +5,7 @@ from abc import ABCMeta
 from abc import abstractmethod
 from abc import abstractproperty
 
-from cloudbridge.cloud.interfaces.resources import PageableObjectMixin
+from cloudbridge.interfaces.resources import PageableObjectMixin
 
 
 class CloudService(object):
@@ -1358,8 +1358,8 @@ class VMFirewallRuleService(CloudService):
         Example:
 
         .. code-block:: python
-            from cloudbridge.cloud.interfaces.resources import TrafficDirection
-            from cloudbridge.cloud.interfaces.resources import BaseNetwork
+            from cloudbridge.interfaces.resources import TrafficDirection
+            from cloudbridge.interfaces.resources import BaseNetwork
 
             fw = provider.security.vm_firewalls.get('my_fw_id')
             fw.rules.create(TrafficDirection.INBOUND, protocol='tcp',

+ 3 - 3
cloudbridge/cloud/interfaces/subservices.py → cloudbridge/interfaces/subservices.py

@@ -1,7 +1,7 @@
 from abc import ABCMeta
 from abc import abstractmethod
 
-from cloudbridge.cloud.interfaces.resources import PageableObjectMixin
+from cloudbridge.interfaces.resources import PageableObjectMixin
 
 
 class BucketObjectSubService(PageableObjectMixin):
@@ -232,8 +232,8 @@ class VMFirewallRuleSubService(PageableObjectMixin):
         Example:
 
         .. code-block:: python
-            from cloudbridge.cloud.interfaces.resources import TrafficDirection
-            from cloudbridge.cloud.interfaces.resources import BaseNetwork
+            from cloudbridge.interfaces.resources import TrafficDirection
+            from cloudbridge.interfaces.resources import BaseNetwork
 
             fw = provider.security.vm_firewalls.get('my_fw_id')
             fw.rules.create(TrafficDirection.INBOUND, protocol='tcp',

+ 0 - 0
cloudbridge/cloud/providers/__init__.py → cloudbridge/providers/__init__.py


+ 0 - 0
cloudbridge/cloud/providers/aws/__init__.py → cloudbridge/providers/aws/__init__.py


+ 2 - 2
cloudbridge/cloud/providers/aws/helpers.py → cloudbridge/providers/aws/helpers.py

@@ -7,8 +7,8 @@ from botocore import xform_name
 from botocore.exceptions import ClientError
 from botocore.utils import merge_dicts
 
-from cloudbridge.cloud.base.resources import ClientPagedResultList
-from cloudbridge.cloud.base.resources import ServerPagedResultList
+from cloudbridge.base.resources import ClientPagedResultList
+from cloudbridge.base.resources import ServerPagedResultList
 
 
 def trim_empty_params(params_dict):

+ 2 - 2
cloudbridge/cloud/providers/aws/provider.py → cloudbridge/providers/aws/provider.py

@@ -3,8 +3,8 @@ import logging as log
 
 import boto3
 
-from cloudbridge.cloud.base import BaseCloudProvider
-from cloudbridge.cloud.base.helpers import get_env
+from cloudbridge.base import BaseCloudProvider
+from cloudbridge.base.helpers import get_env
 
 from .services import AWSComputeService
 from .services import AWSNetworkingService

+ 27 - 27
cloudbridge/cloud/providers/aws/resources.py → cloudbridge/providers/aws/resources.py

@@ -7,33 +7,33 @@ import logging
 
 from botocore.exceptions import ClientError
 
-from cloudbridge.cloud.base.resources import BaseAttachmentInfo
-from cloudbridge.cloud.base.resources import BaseBucket
-from cloudbridge.cloud.base.resources import BaseBucketObject
-from cloudbridge.cloud.base.resources import BaseFloatingIP
-from cloudbridge.cloud.base.resources import BaseInstance
-from cloudbridge.cloud.base.resources import BaseInternetGateway
-from cloudbridge.cloud.base.resources import BaseKeyPair
-from cloudbridge.cloud.base.resources import BaseLaunchConfig
-from cloudbridge.cloud.base.resources import BaseMachineImage
-from cloudbridge.cloud.base.resources import BaseNetwork
-from cloudbridge.cloud.base.resources import BasePlacementZone
-from cloudbridge.cloud.base.resources import BaseRegion
-from cloudbridge.cloud.base.resources import BaseRouter
-from cloudbridge.cloud.base.resources import BaseSnapshot
-from cloudbridge.cloud.base.resources import BaseSubnet
-from cloudbridge.cloud.base.resources import BaseVMFirewall
-from cloudbridge.cloud.base.resources import BaseVMFirewallRule
-from cloudbridge.cloud.base.resources import BaseVMType
-from cloudbridge.cloud.base.resources import BaseVolume
-from cloudbridge.cloud.interfaces.resources import GatewayState
-from cloudbridge.cloud.interfaces.resources import InstanceState
-from cloudbridge.cloud.interfaces.resources import MachineImageState
-from cloudbridge.cloud.interfaces.resources import NetworkState
-from cloudbridge.cloud.interfaces.resources import RouterState
-from cloudbridge.cloud.interfaces.resources import SnapshotState
-from cloudbridge.cloud.interfaces.resources import SubnetState
-from cloudbridge.cloud.interfaces.resources import VolumeState
+from cloudbridge.base.resources import BaseAttachmentInfo
+from cloudbridge.base.resources import BaseBucket
+from cloudbridge.base.resources import BaseBucketObject
+from cloudbridge.base.resources import BaseFloatingIP
+from cloudbridge.base.resources import BaseInstance
+from cloudbridge.base.resources import BaseInternetGateway
+from cloudbridge.base.resources import BaseKeyPair
+from cloudbridge.base.resources import BaseLaunchConfig
+from cloudbridge.base.resources import BaseMachineImage
+from cloudbridge.base.resources import BaseNetwork
+from cloudbridge.base.resources import BasePlacementZone
+from cloudbridge.base.resources import BaseRegion
+from cloudbridge.base.resources import BaseRouter
+from cloudbridge.base.resources import BaseSnapshot
+from cloudbridge.base.resources import BaseSubnet
+from cloudbridge.base.resources import BaseVMFirewall
+from cloudbridge.base.resources import BaseVMFirewallRule
+from cloudbridge.base.resources import BaseVMType
+from cloudbridge.base.resources import BaseVolume
+from cloudbridge.interfaces.resources import GatewayState
+from cloudbridge.interfaces.resources import InstanceState
+from cloudbridge.interfaces.resources import MachineImageState
+from cloudbridge.interfaces.resources import NetworkState
+from cloudbridge.interfaces.resources import RouterState
+from cloudbridge.interfaces.resources import SnapshotState
+from cloudbridge.interfaces.resources import SubnetState
+from cloudbridge.interfaces.resources import VolumeState
 
 from .helpers import find_tag_value
 from .helpers import trim_empty_params

+ 35 - 35
cloudbridge/cloud/providers/aws/services.py → cloudbridge/providers/aws/services.py

@@ -9,42 +9,42 @@ import cachetools
 
 import requests
 
-import cloudbridge.cloud.base.helpers as cb_helpers
-from cloudbridge.cloud.base.middleware import dispatch
-from cloudbridge.cloud.base.resources import ClientPagedResultList
-from cloudbridge.cloud.base.services import BaseBucketObjectService
-from cloudbridge.cloud.base.services import BaseBucketService
-from cloudbridge.cloud.base.services import BaseComputeService
-from cloudbridge.cloud.base.services import BaseFloatingIPService
-from cloudbridge.cloud.base.services import BaseGatewayService
-from cloudbridge.cloud.base.services import BaseImageService
-from cloudbridge.cloud.base.services import BaseInstanceService
-from cloudbridge.cloud.base.services import BaseKeyPairService
-from cloudbridge.cloud.base.services import BaseNetworkService
-from cloudbridge.cloud.base.services import BaseNetworkingService
-from cloudbridge.cloud.base.services import BaseRegionService
-from cloudbridge.cloud.base.services import BaseRouterService
-from cloudbridge.cloud.base.services import BaseSecurityService
-from cloudbridge.cloud.base.services import BaseSnapshotService
-from cloudbridge.cloud.base.services import BaseStorageService
-from cloudbridge.cloud.base.services import BaseSubnetService
-from cloudbridge.cloud.base.services import BaseVMFirewallRuleService
-from cloudbridge.cloud.base.services import BaseVMFirewallService
-from cloudbridge.cloud.base.services import BaseVMTypeService
-from cloudbridge.cloud.base.services import BaseVolumeService
-from cloudbridge.cloud.interfaces.exceptions import DuplicateResourceException
-from cloudbridge.cloud.interfaces.exceptions import \
+import cloudbridge.base.helpers as cb_helpers
+from cloudbridge.base.middleware import dispatch
+from cloudbridge.base.resources import ClientPagedResultList
+from cloudbridge.base.services import BaseBucketObjectService
+from cloudbridge.base.services import BaseBucketService
+from cloudbridge.base.services import BaseComputeService
+from cloudbridge.base.services import BaseFloatingIPService
+from cloudbridge.base.services import BaseGatewayService
+from cloudbridge.base.services import BaseImageService
+from cloudbridge.base.services import BaseInstanceService
+from cloudbridge.base.services import BaseKeyPairService
+from cloudbridge.base.services import BaseNetworkService
+from cloudbridge.base.services import BaseNetworkingService
+from cloudbridge.base.services import BaseRegionService
+from cloudbridge.base.services import BaseRouterService
+from cloudbridge.base.services import BaseSecurityService
+from cloudbridge.base.services import BaseSnapshotService
+from cloudbridge.base.services import BaseStorageService
+from cloudbridge.base.services import BaseSubnetService
+from cloudbridge.base.services import BaseVMFirewallRuleService
+from cloudbridge.base.services import BaseVMFirewallService
+from cloudbridge.base.services import BaseVMTypeService
+from cloudbridge.base.services import BaseVolumeService
+from cloudbridge.interfaces.exceptions import DuplicateResourceException
+from cloudbridge.interfaces.exceptions import \
     InvalidConfigurationException
-from cloudbridge.cloud.interfaces.exceptions import InvalidParamException
-from cloudbridge.cloud.interfaces.exceptions import InvalidValueException
-from cloudbridge.cloud.interfaces.resources import KeyPair
-from cloudbridge.cloud.interfaces.resources import MachineImage
-from cloudbridge.cloud.interfaces.resources import Network
-from cloudbridge.cloud.interfaces.resources import Snapshot
-from cloudbridge.cloud.interfaces.resources import TrafficDirection
-from cloudbridge.cloud.interfaces.resources import VMFirewall
-from cloudbridge.cloud.interfaces.resources import VMType
-from cloudbridge.cloud.interfaces.resources import Volume
+from cloudbridge.interfaces.exceptions import InvalidParamException
+from cloudbridge.interfaces.exceptions import InvalidValueException
+from cloudbridge.interfaces.resources import KeyPair
+from cloudbridge.interfaces.resources import MachineImage
+from cloudbridge.interfaces.resources import Network
+from cloudbridge.interfaces.resources import Snapshot
+from cloudbridge.interfaces.resources import TrafficDirection
+from cloudbridge.interfaces.resources import VMFirewall
+from cloudbridge.interfaces.resources import VMType
+from cloudbridge.interfaces.resources import Volume
 
 from .helpers import BotoEC2Service
 from .helpers import BotoS3Service

+ 5 - 5
cloudbridge/cloud/providers/aws/subservices.py → cloudbridge/providers/aws/subservices.py

@@ -1,10 +1,10 @@
 import logging
 
-from cloudbridge.cloud.base.subservices import BaseBucketObjectSubService
-from cloudbridge.cloud.base.subservices import BaseFloatingIPSubService
-from cloudbridge.cloud.base.subservices import BaseGatewaySubService
-from cloudbridge.cloud.base.subservices import BaseSubnetSubService
-from cloudbridge.cloud.base.subservices import BaseVMFirewallRuleSubService
+from cloudbridge.base.subservices import BaseBucketObjectSubService
+from cloudbridge.base.subservices import BaseFloatingIPSubService
+from cloudbridge.base.subservices import BaseGatewaySubService
+from cloudbridge.base.subservices import BaseSubnetSubService
+from cloudbridge.base.subservices import BaseVMFirewallRuleSubService
 
 log = logging.getLogger(__name__)
 

+ 0 - 0
cloudbridge/cloud/providers/azure/__init__.py → cloudbridge/providers/azure/__init__.py


+ 4 - 4
cloudbridge/cloud/providers/azure/azure_client.py → cloudbridge/providers/azure/azure_client.py

@@ -19,10 +19,10 @@ from msrestazure.azure_exceptions import CloudError
 
 import tenacity
 
-from cloudbridge.cloud.interfaces.exceptions import DuplicateResourceException
-from cloudbridge.cloud.interfaces.exceptions import InvalidLabelException
-from cloudbridge.cloud.interfaces.exceptions import ProviderConnectionException
-from cloudbridge.cloud.interfaces.exceptions import WaitStateException
+from cloudbridge.interfaces.exceptions import DuplicateResourceException
+from cloudbridge.interfaces.exceptions import InvalidLabelException
+from cloudbridge.interfaces.exceptions import ProviderConnectionException
+from cloudbridge.interfaces.exceptions import WaitStateException
 
 from . import helpers as azure_helpers
 

+ 1 - 1
cloudbridge/cloud/providers/azure/helpers.py → cloudbridge/providers/azure/helpers.py

@@ -1,4 +1,4 @@
-from cloudbridge.cloud.interfaces.exceptions import InvalidValueException
+from cloudbridge.interfaces.exceptions import InvalidValueException
 
 
 # def filter_by_tag(list_items, filters):

+ 9 - 8
cloudbridge/cloud/providers/azure/provider.py → cloudbridge/providers/azure/provider.py

@@ -8,14 +8,15 @@ from msrestazure.azure_exceptions import CloudError
 import tenacity
 
 import cloudbridge
-from cloudbridge.cloud.base import BaseCloudProvider
-from cloudbridge.cloud.base.helpers import get_env
-from cloudbridge.cloud.interfaces.exceptions import ProviderConnectionException
-from cloudbridge.cloud.providers.azure.azure_client import AzureClient
-from cloudbridge.cloud.providers.azure.services import AzureComputeService
-from cloudbridge.cloud.providers.azure.services import AzureNetworkingService
-from cloudbridge.cloud.providers.azure.services import AzureSecurityService
-from cloudbridge.cloud.providers.azure.services import AzureStorageService
+from cloudbridge.base import BaseCloudProvider
+from cloudbridge.base.helpers import get_env
+from cloudbridge.interfaces.exceptions import ProviderConnectionException
+from cloudbridge.providers.azure.azure_client import AzureClient
+
+from .services import AzureComputeService
+from .services import AzureNetworkingService
+from .services import AzureSecurityService
+from .services import AzureStorageService
 
 log = logging.getLogger(__name__)
 

+ 28 - 28
cloudbridge/cloud/providers/azure/resources.py → cloudbridge/providers/azure/resources.py

@@ -12,34 +12,34 @@ from msrestazure.azure_exceptions import CloudError
 
 import pysftp
 
-from cloudbridge.cloud.base.resources import BaseAttachmentInfo
-from cloudbridge.cloud.base.resources import BaseBucket
-from cloudbridge.cloud.base.resources import BaseBucketObject
-from cloudbridge.cloud.base.resources import BaseFloatingIP
-from cloudbridge.cloud.base.resources import BaseInstance
-from cloudbridge.cloud.base.resources import BaseInternetGateway
-from cloudbridge.cloud.base.resources import BaseKeyPair
-from cloudbridge.cloud.base.resources import BaseLaunchConfig
-from cloudbridge.cloud.base.resources import BaseMachineImage
-from cloudbridge.cloud.base.resources import BaseNetwork
-from cloudbridge.cloud.base.resources import BasePlacementZone
-from cloudbridge.cloud.base.resources import BaseRegion
-from cloudbridge.cloud.base.resources import BaseRouter
-from cloudbridge.cloud.base.resources import BaseSnapshot
-from cloudbridge.cloud.base.resources import BaseSubnet
-from cloudbridge.cloud.base.resources import BaseVMFirewall
-from cloudbridge.cloud.base.resources import BaseVMFirewallRule
-from cloudbridge.cloud.base.resources import BaseVMType
-from cloudbridge.cloud.base.resources import BaseVolume
-from cloudbridge.cloud.interfaces import InstanceState
-from cloudbridge.cloud.interfaces import VolumeState
-from cloudbridge.cloud.interfaces.resources import Instance
-from cloudbridge.cloud.interfaces.resources import MachineImageState
-from cloudbridge.cloud.interfaces.resources import NetworkState
-from cloudbridge.cloud.interfaces.resources import RouterState
-from cloudbridge.cloud.interfaces.resources import SnapshotState
-from cloudbridge.cloud.interfaces.resources import SubnetState
-from cloudbridge.cloud.interfaces.resources import TrafficDirection
+from cloudbridge.base.resources import BaseAttachmentInfo
+from cloudbridge.base.resources import BaseBucket
+from cloudbridge.base.resources import BaseBucketObject
+from cloudbridge.base.resources import BaseFloatingIP
+from cloudbridge.base.resources import BaseInstance
+from cloudbridge.base.resources import BaseInternetGateway
+from cloudbridge.base.resources import BaseKeyPair
+from cloudbridge.base.resources import BaseLaunchConfig
+from cloudbridge.base.resources import BaseMachineImage
+from cloudbridge.base.resources import BaseNetwork
+from cloudbridge.base.resources import BasePlacementZone
+from cloudbridge.base.resources import BaseRegion
+from cloudbridge.base.resources import BaseRouter
+from cloudbridge.base.resources import BaseSnapshot
+from cloudbridge.base.resources import BaseSubnet
+from cloudbridge.base.resources import BaseVMFirewall
+from cloudbridge.base.resources import BaseVMFirewallRule
+from cloudbridge.base.resources import BaseVMType
+from cloudbridge.base.resources import BaseVolume
+from cloudbridge.interfaces import InstanceState
+from cloudbridge.interfaces import VolumeState
+from cloudbridge.interfaces.resources import Instance
+from cloudbridge.interfaces.resources import MachineImageState
+from cloudbridge.interfaces.resources import NetworkState
+from cloudbridge.interfaces.resources import RouterState
+from cloudbridge.interfaces.resources import SnapshotState
+from cloudbridge.interfaces.resources import SubnetState
+from cloudbridge.interfaces.resources import TrafficDirection
 
 from . import helpers as azure_helpers
 from .subservices import AzureBucketObjectSubService

+ 34 - 34
cloudbridge/cloud/providers/azure/services.py → cloudbridge/providers/azure/services.py

@@ -7,40 +7,40 @@ from azure.mgmt.compute.models import DiskCreateOption
 
 from msrestazure.azure_exceptions import CloudError
 
-import cloudbridge.cloud.base.helpers as cb_helpers
-from cloudbridge.cloud.base.middleware import dispatch
-from cloudbridge.cloud.base.resources import ClientPagedResultList
-from cloudbridge.cloud.base.resources import ServerPagedResultList
-from cloudbridge.cloud.base.services import BaseBucketObjectService
-from cloudbridge.cloud.base.services import BaseBucketService
-from cloudbridge.cloud.base.services import BaseComputeService
-from cloudbridge.cloud.base.services import BaseFloatingIPService
-from cloudbridge.cloud.base.services import BaseGatewayService
-from cloudbridge.cloud.base.services import BaseImageService
-from cloudbridge.cloud.base.services import BaseInstanceService
-from cloudbridge.cloud.base.services import BaseKeyPairService
-from cloudbridge.cloud.base.services import BaseNetworkService
-from cloudbridge.cloud.base.services import BaseNetworkingService
-from cloudbridge.cloud.base.services import BaseRegionService
-from cloudbridge.cloud.base.services import BaseRouterService
-from cloudbridge.cloud.base.services import BaseSecurityService
-from cloudbridge.cloud.base.services import BaseSnapshotService
-from cloudbridge.cloud.base.services import BaseStorageService
-from cloudbridge.cloud.base.services import BaseSubnetService
-from cloudbridge.cloud.base.services import BaseVMFirewallRuleService
-from cloudbridge.cloud.base.services import BaseVMFirewallService
-from cloudbridge.cloud.base.services import BaseVMTypeService
-from cloudbridge.cloud.base.services import BaseVolumeService
-from cloudbridge.cloud.interfaces.exceptions import DuplicateResourceException
-from cloudbridge.cloud.interfaces.exceptions import InvalidParamException
-from cloudbridge.cloud.interfaces.exceptions import InvalidValueException
-from cloudbridge.cloud.interfaces.resources import MachineImage
-from cloudbridge.cloud.interfaces.resources import Network
-from cloudbridge.cloud.interfaces.resources import Snapshot
-from cloudbridge.cloud.interfaces.resources import TrafficDirection
-from cloudbridge.cloud.interfaces.resources import VMFirewall
-from cloudbridge.cloud.interfaces.resources import VMType
-from cloudbridge.cloud.interfaces.resources import Volume
+import cloudbridge.base.helpers as cb_helpers
+from cloudbridge.base.middleware import dispatch
+from cloudbridge.base.resources import ClientPagedResultList
+from cloudbridge.base.resources import ServerPagedResultList
+from cloudbridge.base.services import BaseBucketObjectService
+from cloudbridge.base.services import BaseBucketService
+from cloudbridge.base.services import BaseComputeService
+from cloudbridge.base.services import BaseFloatingIPService
+from cloudbridge.base.services import BaseGatewayService
+from cloudbridge.base.services import BaseImageService
+from cloudbridge.base.services import BaseInstanceService
+from cloudbridge.base.services import BaseKeyPairService
+from cloudbridge.base.services import BaseNetworkService
+from cloudbridge.base.services import BaseNetworkingService
+from cloudbridge.base.services import BaseRegionService
+from cloudbridge.base.services import BaseRouterService
+from cloudbridge.base.services import BaseSecurityService
+from cloudbridge.base.services import BaseSnapshotService
+from cloudbridge.base.services import BaseStorageService
+from cloudbridge.base.services import BaseSubnetService
+from cloudbridge.base.services import BaseVMFirewallRuleService
+from cloudbridge.base.services import BaseVMFirewallService
+from cloudbridge.base.services import BaseVMTypeService
+from cloudbridge.base.services import BaseVolumeService
+from cloudbridge.interfaces.exceptions import DuplicateResourceException
+from cloudbridge.interfaces.exceptions import InvalidParamException
+from cloudbridge.interfaces.exceptions import InvalidValueException
+from cloudbridge.interfaces.resources import MachineImage
+from cloudbridge.interfaces.resources import Network
+from cloudbridge.interfaces.resources import Snapshot
+from cloudbridge.interfaces.resources import TrafficDirection
+from cloudbridge.interfaces.resources import VMFirewall
+from cloudbridge.interfaces.resources import VMType
+from cloudbridge.interfaces.resources import Volume
 
 from .resources import AzureBucket
 from .resources import AzureBucketObject

+ 5 - 5
cloudbridge/cloud/providers/azure/subservices.py → cloudbridge/providers/azure/subservices.py

@@ -1,10 +1,10 @@
 import logging
 
-from cloudbridge.cloud.base.subservices import BaseBucketObjectSubService
-from cloudbridge.cloud.base.subservices import BaseFloatingIPSubService
-from cloudbridge.cloud.base.subservices import BaseGatewaySubService
-from cloudbridge.cloud.base.subservices import BaseSubnetSubService
-from cloudbridge.cloud.base.subservices import BaseVMFirewallRuleSubService
+from cloudbridge.base.subservices import BaseBucketObjectSubService
+from cloudbridge.base.subservices import BaseFloatingIPSubService
+from cloudbridge.base.subservices import BaseGatewaySubService
+from cloudbridge.base.subservices import BaseSubnetSubService
+from cloudbridge.base.subservices import BaseVMFirewallRuleSubService
 
 log = logging.getLogger(__name__)
 

+ 0 - 0
cloudbridge/cloud/providers/gcp/README.rst → cloudbridge/providers/gcp/README.rst


+ 0 - 0
cloudbridge/cloud/providers/gcp/__init__.py → cloudbridge/providers/gcp/__init__.py


+ 1 - 1
cloudbridge/cloud/providers/gcp/helpers.py → cloudbridge/providers/gcp/helpers.py

@@ -4,7 +4,7 @@ from googleapiclient.errors import HttpError
 
 import tenacity
 
-from cloudbridge.cloud.interfaces.exceptions import ProviderInternalException
+from cloudbridge.interfaces.exceptions import ProviderInternalException
 
 
 def gcp_projects(provider):

+ 8 - 2
cloudbridge/cloud/providers/gcp/provider.py → cloudbridge/providers/gcp/provider.py

@@ -15,8 +15,8 @@ from googleapiclient import discovery
 from oauth2client.client import GoogleCredentials
 from oauth2client.service_account import ServiceAccountCredentials
 
-from cloudbridge.cloud.base import BaseCloudProvider
-from cloudbridge.cloud.interfaces.exceptions import ProviderConnectionException
+from cloudbridge.base import BaseCloudProvider
+from cloudbridge.interfaces.exceptions import ProviderConnectionException
 
 from .services import GCPComputeService
 from .services import GCPNetworkingService
@@ -245,6 +245,12 @@ class GCPCloudProvider(BaseCloudProvider):
         self._networking = GCPNetworkingService(self)
         self._storage = GCPStorageService(self)
 
+    # Override base class implementation because it will cause
+    # an infinite loop
+    @property
+    def zone_name(self):
+        return self._zone_name
+
     @property
     def compute(self):
         return self._compute

+ 28 - 28
cloudbridge/cloud/providers/gcp/resources.py → cloudbridge/providers/gcp/resources.py

@@ -15,34 +15,34 @@ from collections import namedtuple
 
 import googleapiclient
 
-from cloudbridge.cloud.base.resources import BaseAttachmentInfo
-from cloudbridge.cloud.base.resources import BaseBucket
-from cloudbridge.cloud.base.resources import BaseBucketObject
-from cloudbridge.cloud.base.resources import BaseFloatingIP
-from cloudbridge.cloud.base.resources import BaseInstance
-from cloudbridge.cloud.base.resources import BaseInternetGateway
-from cloudbridge.cloud.base.resources import BaseKeyPair
-from cloudbridge.cloud.base.resources import BaseLaunchConfig
-from cloudbridge.cloud.base.resources import BaseMachineImage
-from cloudbridge.cloud.base.resources import BaseNetwork
-from cloudbridge.cloud.base.resources import BasePlacementZone
-from cloudbridge.cloud.base.resources import BaseRegion
-from cloudbridge.cloud.base.resources import BaseRouter
-from cloudbridge.cloud.base.resources import BaseSnapshot
-from cloudbridge.cloud.base.resources import BaseSubnet
-from cloudbridge.cloud.base.resources import BaseVMFirewall
-from cloudbridge.cloud.base.resources import BaseVMFirewallRule
-from cloudbridge.cloud.base.resources import BaseVMType
-from cloudbridge.cloud.base.resources import BaseVolume
-from cloudbridge.cloud.interfaces.resources import GatewayState
-from cloudbridge.cloud.interfaces.resources import InstanceState
-from cloudbridge.cloud.interfaces.resources import MachineImageState
-from cloudbridge.cloud.interfaces.resources import NetworkState
-from cloudbridge.cloud.interfaces.resources import RouterState
-from cloudbridge.cloud.interfaces.resources import SnapshotState
-from cloudbridge.cloud.interfaces.resources import SubnetState
-from cloudbridge.cloud.interfaces.resources import TrafficDirection
-from cloudbridge.cloud.interfaces.resources import VolumeState
+from cloudbridge.base.resources import BaseAttachmentInfo
+from cloudbridge.base.resources import BaseBucket
+from cloudbridge.base.resources import BaseBucketObject
+from cloudbridge.base.resources import BaseFloatingIP
+from cloudbridge.base.resources import BaseInstance
+from cloudbridge.base.resources import BaseInternetGateway
+from cloudbridge.base.resources import BaseKeyPair
+from cloudbridge.base.resources import BaseLaunchConfig
+from cloudbridge.base.resources import BaseMachineImage
+from cloudbridge.base.resources import BaseNetwork
+from cloudbridge.base.resources import BasePlacementZone
+from cloudbridge.base.resources import BaseRegion
+from cloudbridge.base.resources import BaseRouter
+from cloudbridge.base.resources import BaseSnapshot
+from cloudbridge.base.resources import BaseSubnet
+from cloudbridge.base.resources import BaseVMFirewall
+from cloudbridge.base.resources import BaseVMFirewallRule
+from cloudbridge.base.resources import BaseVMType
+from cloudbridge.base.resources import BaseVolume
+from cloudbridge.interfaces.resources import GatewayState
+from cloudbridge.interfaces.resources import InstanceState
+from cloudbridge.interfaces.resources import MachineImageState
+from cloudbridge.interfaces.resources import NetworkState
+from cloudbridge.interfaces.resources import RouterState
+from cloudbridge.interfaces.resources import SnapshotState
+from cloudbridge.interfaces.resources import SubnetState
+from cloudbridge.interfaces.resources import TrafficDirection
+from cloudbridge.interfaces.resources import VolumeState
 
 from . import helpers
 from .subservices import GCPBucketObjectSubService

+ 29 - 29
cloudbridge/cloud/providers/gcp/services.py → cloudbridge/providers/gcp/services.py

@@ -7,35 +7,35 @@ import uuid
 
 import googleapiclient
 
-from cloudbridge.cloud.base import helpers as cb_helpers
-from cloudbridge.cloud.base.middleware import dispatch
-from cloudbridge.cloud.base.resources import ClientPagedResultList
-from cloudbridge.cloud.base.resources import ServerPagedResultList
-from cloudbridge.cloud.base.services import BaseBucketObjectService
-from cloudbridge.cloud.base.services import BaseBucketService
-from cloudbridge.cloud.base.services import BaseComputeService
-from cloudbridge.cloud.base.services import BaseFloatingIPService
-from cloudbridge.cloud.base.services import BaseGatewayService
-from cloudbridge.cloud.base.services import BaseImageService
-from cloudbridge.cloud.base.services import BaseInstanceService
-from cloudbridge.cloud.base.services import BaseKeyPairService
-from cloudbridge.cloud.base.services import BaseNetworkService
-from cloudbridge.cloud.base.services import BaseNetworkingService
-from cloudbridge.cloud.base.services import BaseRegionService
-from cloudbridge.cloud.base.services import BaseRouterService
-from cloudbridge.cloud.base.services import BaseSecurityService
-from cloudbridge.cloud.base.services import BaseSnapshotService
-from cloudbridge.cloud.base.services import BaseStorageService
-from cloudbridge.cloud.base.services import BaseSubnetService
-from cloudbridge.cloud.base.services import BaseVMFirewallRuleService
-from cloudbridge.cloud.base.services import BaseVMFirewallService
-from cloudbridge.cloud.base.services import BaseVMTypeService
-from cloudbridge.cloud.base.services import BaseVolumeService
-from cloudbridge.cloud.interfaces.exceptions import DuplicateResourceException
-from cloudbridge.cloud.interfaces.exceptions import InvalidParamException
-from cloudbridge.cloud.interfaces.resources import TrafficDirection
-from cloudbridge.cloud.interfaces.resources import VMFirewall
-from cloudbridge.cloud.providers.gcp import helpers
+from cloudbridge.base import helpers as cb_helpers
+from cloudbridge.base.middleware import dispatch
+from cloudbridge.base.resources import ClientPagedResultList
+from cloudbridge.base.resources import ServerPagedResultList
+from cloudbridge.base.services import BaseBucketObjectService
+from cloudbridge.base.services import BaseBucketService
+from cloudbridge.base.services import BaseComputeService
+from cloudbridge.base.services import BaseFloatingIPService
+from cloudbridge.base.services import BaseGatewayService
+from cloudbridge.base.services import BaseImageService
+from cloudbridge.base.services import BaseInstanceService
+from cloudbridge.base.services import BaseKeyPairService
+from cloudbridge.base.services import BaseNetworkService
+from cloudbridge.base.services import BaseNetworkingService
+from cloudbridge.base.services import BaseRegionService
+from cloudbridge.base.services import BaseRouterService
+from cloudbridge.base.services import BaseSecurityService
+from cloudbridge.base.services import BaseSnapshotService
+from cloudbridge.base.services import BaseStorageService
+from cloudbridge.base.services import BaseSubnetService
+from cloudbridge.base.services import BaseVMFirewallRuleService
+from cloudbridge.base.services import BaseVMFirewallService
+from cloudbridge.base.services import BaseVMTypeService
+from cloudbridge.base.services import BaseVolumeService
+from cloudbridge.interfaces.exceptions import DuplicateResourceException
+from cloudbridge.interfaces.exceptions import InvalidParamException
+from cloudbridge.interfaces.resources import TrafficDirection
+from cloudbridge.interfaces.resources import VMFirewall
+from cloudbridge.providers.gcp import helpers
 
 from .resources import GCPBucket
 from .resources import GCPBucketObject

+ 5 - 5
cloudbridge/cloud/providers/gcp/subservices.py → cloudbridge/providers/gcp/subservices.py

@@ -1,10 +1,10 @@
 import logging
 
-from cloudbridge.cloud.base.subservices import BaseBucketObjectSubService
-from cloudbridge.cloud.base.subservices import BaseFloatingIPSubService
-from cloudbridge.cloud.base.subservices import BaseGatewaySubService
-from cloudbridge.cloud.base.subservices import BaseSubnetSubService
-from cloudbridge.cloud.base.subservices import BaseVMFirewallRuleSubService
+from cloudbridge.base.subservices import BaseBucketObjectSubService
+from cloudbridge.base.subservices import BaseFloatingIPSubService
+from cloudbridge.base.subservices import BaseGatewaySubService
+from cloudbridge.base.subservices import BaseSubnetSubService
+from cloudbridge.base.subservices import BaseVMFirewallRuleSubService
 
 
 log = logging.getLogger(__name__)

+ 0 - 0
cloudbridge/cloud/providers/mock/__init__.py → cloudbridge/providers/mock/__init__.py


+ 0 - 0
cloudbridge/cloud/providers/mock/provider.py → cloudbridge/providers/mock/provider.py


+ 0 - 0
cloudbridge/cloud/providers/openstack/__init__.py → cloudbridge/providers/openstack/__init__.py


+ 1 - 1
cloudbridge/cloud/providers/openstack/helpers.py → cloudbridge/providers/openstack/helpers.py

@@ -4,7 +4,7 @@ Helper functions
 import itertools
 import logging as log
 
-from cloudbridge.cloud.base.resources import ServerPagedResultList
+from cloudbridge.base.resources import ServerPagedResultList
 
 
 def os_result_limit(provider, requested_limit=None):

+ 2 - 2
cloudbridge/cloud/providers/openstack/provider.py → cloudbridge/providers/openstack/provider.py

@@ -17,8 +17,8 @@ from openstack import connection
 
 from swiftclient import client as swift_client
 
-from cloudbridge.cloud.base import BaseCloudProvider
-from cloudbridge.cloud.base.helpers import get_env
+from cloudbridge.base import BaseCloudProvider
+from cloudbridge.base.helpers import get_env
 
 from .services import OpenStackComputeService
 from .services import OpenStackNetworkingService

+ 27 - 27
cloudbridge/cloud/providers/openstack/resources.py → cloudbridge/providers/openstack/resources.py

@@ -23,33 +23,33 @@ from swiftclient.service import SwiftService
 from swiftclient.service import SwiftUploadObject
 from swiftclient.utils import generate_temp_url
 
-from cloudbridge.cloud.base.resources import BaseAttachmentInfo
-from cloudbridge.cloud.base.resources import BaseBucket
-from cloudbridge.cloud.base.resources import BaseBucketObject
-from cloudbridge.cloud.base.resources import BaseFloatingIP
-from cloudbridge.cloud.base.resources import BaseInstance
-from cloudbridge.cloud.base.resources import BaseInternetGateway
-from cloudbridge.cloud.base.resources import BaseKeyPair
-from cloudbridge.cloud.base.resources import BaseMachineImage
-from cloudbridge.cloud.base.resources import BaseNetwork
-from cloudbridge.cloud.base.resources import BasePlacementZone
-from cloudbridge.cloud.base.resources import BaseRegion
-from cloudbridge.cloud.base.resources import BaseRouter
-from cloudbridge.cloud.base.resources import BaseSnapshot
-from cloudbridge.cloud.base.resources import BaseSubnet
-from cloudbridge.cloud.base.resources import BaseVMFirewall
-from cloudbridge.cloud.base.resources import BaseVMFirewallRule
-from cloudbridge.cloud.base.resources import BaseVMType
-from cloudbridge.cloud.base.resources import BaseVolume
-from cloudbridge.cloud.interfaces.resources import GatewayState
-from cloudbridge.cloud.interfaces.resources import InstanceState
-from cloudbridge.cloud.interfaces.resources import MachineImageState
-from cloudbridge.cloud.interfaces.resources import NetworkState
-from cloudbridge.cloud.interfaces.resources import RouterState
-from cloudbridge.cloud.interfaces.resources import SnapshotState
-from cloudbridge.cloud.interfaces.resources import SubnetState
-from cloudbridge.cloud.interfaces.resources import TrafficDirection
-from cloudbridge.cloud.interfaces.resources import VolumeState
+from cloudbridge.base.resources import BaseAttachmentInfo
+from cloudbridge.base.resources import BaseBucket
+from cloudbridge.base.resources import BaseBucketObject
+from cloudbridge.base.resources import BaseFloatingIP
+from cloudbridge.base.resources import BaseInstance
+from cloudbridge.base.resources import BaseInternetGateway
+from cloudbridge.base.resources import BaseKeyPair
+from cloudbridge.base.resources import BaseMachineImage
+from cloudbridge.base.resources import BaseNetwork
+from cloudbridge.base.resources import BasePlacementZone
+from cloudbridge.base.resources import BaseRegion
+from cloudbridge.base.resources import BaseRouter
+from cloudbridge.base.resources import BaseSnapshot
+from cloudbridge.base.resources import BaseSubnet
+from cloudbridge.base.resources import BaseVMFirewall
+from cloudbridge.base.resources import BaseVMFirewallRule
+from cloudbridge.base.resources import BaseVMType
+from cloudbridge.base.resources import BaseVolume
+from cloudbridge.interfaces.resources import GatewayState
+from cloudbridge.interfaces.resources import InstanceState
+from cloudbridge.interfaces.resources import MachineImageState
+from cloudbridge.interfaces.resources import NetworkState
+from cloudbridge.interfaces.resources import RouterState
+from cloudbridge.interfaces.resources import SnapshotState
+from cloudbridge.interfaces.resources import SubnetState
+from cloudbridge.interfaces.resources import TrafficDirection
+from cloudbridge.interfaces.resources import VolumeState
 
 from .subservices import OpenStackBucketObjectSubService
 from .subservices import OpenStackFloatingIPSubService

+ 36 - 36
cloudbridge/cloud/providers/openstack/services.py → cloudbridge/providers/openstack/services.py

@@ -16,43 +16,43 @@ from openstack.exceptions import ResourceNotFound
 
 from swiftclient import ClientException as SwiftClientException
 
-import cloudbridge.cloud.base.helpers as cb_helpers
-from cloudbridge.cloud.base.middleware import dispatch
-from cloudbridge.cloud.base.resources import BaseLaunchConfig
-from cloudbridge.cloud.base.resources import ClientPagedResultList
-from cloudbridge.cloud.base.services import BaseBucketObjectService
-from cloudbridge.cloud.base.services import BaseBucketService
-from cloudbridge.cloud.base.services import BaseComputeService
-from cloudbridge.cloud.base.services import BaseFloatingIPService
-from cloudbridge.cloud.base.services import BaseGatewayService
-from cloudbridge.cloud.base.services import BaseImageService
-from cloudbridge.cloud.base.services import BaseInstanceService
-from cloudbridge.cloud.base.services import BaseKeyPairService
-from cloudbridge.cloud.base.services import BaseNetworkService
-from cloudbridge.cloud.base.services import BaseNetworkingService
-from cloudbridge.cloud.base.services import BaseRegionService
-from cloudbridge.cloud.base.services import BaseRouterService
-from cloudbridge.cloud.base.services import BaseSecurityService
-from cloudbridge.cloud.base.services import BaseSnapshotService
-from cloudbridge.cloud.base.services import BaseStorageService
-from cloudbridge.cloud.base.services import BaseSubnetService
-from cloudbridge.cloud.base.services import BaseVMFirewallRuleService
-from cloudbridge.cloud.base.services import BaseVMFirewallService
-from cloudbridge.cloud.base.services import BaseVMTypeService
-from cloudbridge.cloud.base.services import BaseVolumeService
-from cloudbridge.cloud.interfaces.exceptions \
+import cloudbridge.base.helpers as cb_helpers
+from cloudbridge.base.middleware import dispatch
+from cloudbridge.base.resources import BaseLaunchConfig
+from cloudbridge.base.resources import ClientPagedResultList
+from cloudbridge.base.services import BaseBucketObjectService
+from cloudbridge.base.services import BaseBucketService
+from cloudbridge.base.services import BaseComputeService
+from cloudbridge.base.services import BaseFloatingIPService
+from cloudbridge.base.services import BaseGatewayService
+from cloudbridge.base.services import BaseImageService
+from cloudbridge.base.services import BaseInstanceService
+from cloudbridge.base.services import BaseKeyPairService
+from cloudbridge.base.services import BaseNetworkService
+from cloudbridge.base.services import BaseNetworkingService
+from cloudbridge.base.services import BaseRegionService
+from cloudbridge.base.services import BaseRouterService
+from cloudbridge.base.services import BaseSecurityService
+from cloudbridge.base.services import BaseSnapshotService
+from cloudbridge.base.services import BaseStorageService
+from cloudbridge.base.services import BaseSubnetService
+from cloudbridge.base.services import BaseVMFirewallRuleService
+from cloudbridge.base.services import BaseVMFirewallService
+from cloudbridge.base.services import BaseVMTypeService
+from cloudbridge.base.services import BaseVolumeService
+from cloudbridge.interfaces.exceptions \
     import DuplicateResourceException
-from cloudbridge.cloud.interfaces.exceptions import InvalidParamException
-from cloudbridge.cloud.interfaces.exceptions import InvalidValueException
-from cloudbridge.cloud.interfaces.resources import KeyPair
-from cloudbridge.cloud.interfaces.resources import MachineImage
-from cloudbridge.cloud.interfaces.resources import Network
-from cloudbridge.cloud.interfaces.resources import Snapshot
-from cloudbridge.cloud.interfaces.resources import Subnet
-from cloudbridge.cloud.interfaces.resources import TrafficDirection
-from cloudbridge.cloud.interfaces.resources import VMFirewall
-from cloudbridge.cloud.interfaces.resources import VMType
-from cloudbridge.cloud.interfaces.resources import Volume
+from cloudbridge.interfaces.exceptions import InvalidParamException
+from cloudbridge.interfaces.exceptions import InvalidValueException
+from cloudbridge.interfaces.resources import KeyPair
+from cloudbridge.interfaces.resources import MachineImage
+from cloudbridge.interfaces.resources import Network
+from cloudbridge.interfaces.resources import Snapshot
+from cloudbridge.interfaces.resources import Subnet
+from cloudbridge.interfaces.resources import TrafficDirection
+from cloudbridge.interfaces.resources import VMFirewall
+from cloudbridge.interfaces.resources import VMType
+from cloudbridge.interfaces.resources import Volume
 
 from . import helpers as oshelpers
 from .resources import OpenStackBucket

+ 5 - 5
cloudbridge/cloud/providers/openstack/subservices.py → cloudbridge/providers/openstack/subservices.py

@@ -1,10 +1,10 @@
 import logging
 
-from cloudbridge.cloud.base.subservices import BaseBucketObjectSubService
-from cloudbridge.cloud.base.subservices import BaseFloatingIPSubService
-from cloudbridge.cloud.base.subservices import BaseGatewaySubService
-from cloudbridge.cloud.base.subservices import BaseSubnetSubService
-from cloudbridge.cloud.base.subservices import BaseVMFirewallRuleSubService
+from cloudbridge.base.subservices import BaseBucketObjectSubService
+from cloudbridge.base.subservices import BaseFloatingIPSubService
+from cloudbridge.base.subservices import BaseGatewaySubService
+from cloudbridge.base.subservices import BaseSubnetSubService
+from cloudbridge.base.subservices import BaseVMFirewallRuleSubService
 
 
 log = logging.getLogger(__name__)

+ 1 - 1
codeclimate.yml

@@ -26,5 +26,5 @@ ratings:
   - "**.py"
   - "**.rb"
 exclude_paths:
-- test/**/*
+- tests/**/*
 - docs/**/*

+ 6 - 6
docs/api_docs/cloud/exceptions.rst

@@ -5,30 +5,30 @@ Exceptions
 
 CloudBridgeBaseException
 ------------------------
-.. autoclass:: cloudbridge.cloud.interfaces.exceptions.CloudBridgeBaseException
+.. autoclass:: cloudbridge.interfaces.exceptions.CloudBridgeBaseException
     :members:
 
 WaitStateException
 ------------------
-.. autoclass:: cloudbridge.cloud.interfaces.exceptions.WaitStateException
+.. autoclass:: cloudbridge.interfaces.exceptions.WaitStateException
     :members:
 
 InvalidConfigurationException
 -----------------------------
-.. autoclass:: cloudbridge.cloud.interfaces.exceptions.InvalidConfigurationException
+.. autoclass:: cloudbridge.interfaces.exceptions.InvalidConfigurationException
     :members:
 
 ProviderConnectionException
 -----------------------------
-.. autoclass:: cloudbridge.cloud.interfaces.exceptions.ProviderConnectionException
+.. autoclass:: cloudbridge.interfaces.exceptions.ProviderConnectionException
     :members:
 
 InvalidLabelException
 -----------------------------
-.. autoclass:: cloudbridge.cloud.interfaces.exceptions.InvalidLabelException
+.. autoclass:: cloudbridge.interfaces.exceptions.InvalidLabelException
     :members:
 
 InvalidValueException
 -----------------------------
-.. autoclass:: cloudbridge.cloud.interfaces.exceptions.InvalidValueException
+.. autoclass:: cloudbridge.interfaces.exceptions.InvalidValueException
     :members:

+ 2 - 2
docs/api_docs/cloud/providers.rst

@@ -3,11 +3,11 @@ Providers
 
 CloudProvider
 -------------
-.. autoclass:: cloudbridge.cloud.interfaces.provider.CloudProvider
+.. autoclass:: cloudbridge.interfaces.provider.CloudProvider
     :members:
     :special-members: __init__
 
 ContainerProvider
 -----------------
-.. autoclass:: cloudbridge.cloud.interfaces.provider.ContainerProvider
+.. autoclass:: cloudbridge.interfaces.provider.ContainerProvider
     :members:

+ 33 - 33
docs/api_docs/cloud/resources.rst

@@ -5,166 +5,166 @@ Resources
 
 CloudServiceType
 ------------------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.CloudServiceType
+.. autoclass:: cloudbridge.interfaces.resources.CloudServiceType
     :members:
 
 CloudResource
 -------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.CloudResource
+.. autoclass:: cloudbridge.interfaces.resources.CloudResource
     :members:
 
 Configuration
 -------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.Configuration
+.. autoclass:: cloudbridge.interfaces.resources.Configuration
     :members:
 
 ObjectLifeCycleMixin
 --------------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.ObjectLifeCycleMixin
+.. autoclass:: cloudbridge.interfaces.resources.ObjectLifeCycleMixin
     :members:
 
 PageableObjectMixin
 --------------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.PageableObjectMixin
+.. autoclass:: cloudbridge.interfaces.resources.PageableObjectMixin
     :members:
 
 ResultList
 ----------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.ResultList
+.. autoclass:: cloudbridge.interfaces.resources.ResultList
     :members:
 
 InstanceState
 -------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.InstanceState
+.. autoclass:: cloudbridge.interfaces.resources.InstanceState
     :members:
 
 Instance
 --------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.Instance
+.. autoclass:: cloudbridge.interfaces.resources.Instance
     :members:
 
 MachineImageState
 -----------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.MachineImageState
+.. autoclass:: cloudbridge.interfaces.resources.MachineImageState
     :members:
 
 LaunchConfig
 ------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.LaunchConfig
+.. autoclass:: cloudbridge.interfaces.resources.LaunchConfig
     :members:
 
 MachineImage
 ------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.MachineImage
+.. autoclass:: cloudbridge.interfaces.resources.MachineImage
     :members:
 
 NetworkState
 ------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.NetworkState
+.. autoclass:: cloudbridge.interfaces.resources.NetworkState
     :members:
 
 Network
 -------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.Network
+.. autoclass:: cloudbridge.interfaces.resources.Network
     :members:
 
 SubnetState
 ------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.SubnetState
+.. autoclass:: cloudbridge.interfaces.resources.SubnetState
     :members:
 
 Subnet
 ------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.Subnet
+.. autoclass:: cloudbridge.interfaces.resources.Subnet
     :members:
 
 FloatingIP
 ----------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.FloatingIP
+.. autoclass:: cloudbridge.interfaces.resources.FloatingIP
     :members:
 
 RouterState
 ------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.RouterState
+.. autoclass:: cloudbridge.interfaces.resources.RouterState
     :members:
 
 Router
 ------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.Router
+.. autoclass:: cloudbridge.interfaces.resources.Router
     :members:
 
 Gateway
 --------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.Gateway
+.. autoclass:: cloudbridge.interfaces.resources.Gateway
     :members:
 
 InternetGateway
 ---------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.InternetGateway
+.. autoclass:: cloudbridge.interfaces.resources.InternetGateway
     :members:
 
 VolumeState
 -----------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.VolumeState
+.. autoclass:: cloudbridge.interfaces.resources.VolumeState
     :members:
 
 Volume
 ------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.Volume
+.. autoclass:: cloudbridge.interfaces.resources.Volume
     :members:
 
 SnapshotState
 -------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.SnapshotState
+.. autoclass:: cloudbridge.interfaces.resources.SnapshotState
     :members:
 
 Snapshot
 --------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.Snapshot
+.. autoclass:: cloudbridge.interfaces.resources.Snapshot
     :members:
 
 KeyPair
 -------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.KeyPair
+.. autoclass:: cloudbridge.interfaces.resources.KeyPair
     :members:
 
 Region
 ------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.Region
+.. autoclass:: cloudbridge.interfaces.resources.Region
     :members:
 
 PlacementZone
 -------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.PlacementZone
+.. autoclass:: cloudbridge.interfaces.resources.PlacementZone
     :members:
 
 VMType
 ------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.VMType
+.. autoclass:: cloudbridge.interfaces.resources.VMType
     :members:
 
 VMFirewall
 -------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.VMFirewall
+.. autoclass:: cloudbridge.interfaces.resources.VMFirewall
     :members:
 
 VMFirewallRule
 -----------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.VMFirewallRule
+.. autoclass:: cloudbridge.interfaces.resources.VMFirewallRule
     :members:
     :undoc-members:
 
 TrafficDirection
 -----------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.TrafficDirection
+.. autoclass:: cloudbridge.interfaces.resources.TrafficDirection
     :members:
 
 BucketObject
 ---------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.BucketObject
+.. autoclass:: cloudbridge.interfaces.resources.BucketObject
     :members:
 
 Bucket
 ---------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.Bucket
+.. autoclass:: cloudbridge.interfaces.resources.Bucket
     :members:

+ 19 - 19
docs/api_docs/cloud/services.rst

@@ -5,95 +5,95 @@ Services
 
 CloudService
 ---------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.CloudService
+.. autoclass:: cloudbridge.interfaces.services.CloudService
     :members:
 
 ComputeService
 --------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.ComputeService
+.. autoclass:: cloudbridge.interfaces.services.ComputeService
     :members:
 
 InstanceService
 ---------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.InstanceService
+.. autoclass:: cloudbridge.interfaces.services.InstanceService
     :members:
 
 VolumeService
 -------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.VolumeService
+.. autoclass:: cloudbridge.interfaces.services.VolumeService
     :members:
 
 SnapshotService
 ---------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.SnapshotService
+.. autoclass:: cloudbridge.interfaces.services.SnapshotService
     :members:
 
 StorageService
 -----------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.StorageService
+.. autoclass:: cloudbridge.interfaces.services.StorageService
     :members:
 
 ImageService
 ------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.ImageService
+.. autoclass:: cloudbridge.interfaces.services.ImageService
     :members:
 
 NetworkingService
 -----------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.NetworkingService
+.. autoclass:: cloudbridge.interfaces.services.NetworkingService
     :members:
 
 NetworkService
 -----------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.NetworkService
+.. autoclass:: cloudbridge.interfaces.services.NetworkService
     :members:
 
 SubnetService
 -----------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.SubnetService
+.. autoclass:: cloudbridge.interfaces.services.SubnetService
     :members:
 
 FloatingIPService
 -----------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.FloatingIPSubService
+.. autoclass:: cloudbridge.interfaces.resources.FloatingIPSubService
     :members:
 
 RouterService
 -----------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.RouterService
+.. autoclass:: cloudbridge.interfaces.services.RouterService
     :members:
 
 GatewayService
 -----------------
-.. autoclass:: cloudbridge.cloud.interfaces.resources.GatewaySubService
+.. autoclass:: cloudbridge.interfaces.resources.GatewaySubService
     :members:
 
 BucketService
 ---------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.BucketService
+.. autoclass:: cloudbridge.interfaces.services.BucketService
     :members:
 
 SecurityService
 ---------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.SecurityService
+.. autoclass:: cloudbridge.interfaces.services.SecurityService
     :members:
 
 KeyPairService
 --------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.KeyPairService
+.. autoclass:: cloudbridge.interfaces.services.KeyPairService
     :members:
 
 VMFirewallService
 --------------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.VMFirewallService
+.. autoclass:: cloudbridge.interfaces.services.VMFirewallService
     :members:
 
 VMTypeService
 --------------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.VMTypeService
+.. autoclass:: cloudbridge.interfaces.services.VMTypeService
     :members:
 
 RegionService
 -------------
-.. autoclass:: cloudbridge.cloud.interfaces.services.RegionService
+.. autoclass:: cloudbridge.interfaces.services.RegionService
     :members:

+ 7 - 7
docs/getting_started.rst

@@ -28,7 +28,7 @@ AWS:
 
 .. code-block:: python
 
-    from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
+    from cloudbridge.factory import CloudProviderFactory, ProviderList
 
     config = {'aws_access_key': 'AKIAJW2XCYO4AF55XFEQ',
               'aws_secret_key': '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'}
@@ -39,7 +39,7 @@ OpenStack (with Keystone authentication v2):
 
 .. code-block:: python
 
-    from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
+    from cloudbridge.factory import CloudProviderFactory, ProviderList
 
     config = {'os_username': 'username',
               'os_password': 'password',
@@ -54,7 +54,7 @@ OpenStack (with Keystone authentication v3):
 
 .. code-block:: python
 
-    from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
+    from cloudbridge.factory import CloudProviderFactory, ProviderList
 
     config = {'os_username': 'username',
               'os_password': 'password',
@@ -70,7 +70,7 @@ Azure:
 
 .. code-block:: python
 
-    from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
+    from cloudbridge.factory import CloudProviderFactory, ProviderList
 
     config = {'azure_subscription_id': 'REPLACE WITH ACTUAL VALUE',
               'azure_client_id': 'REPLACE WITH ACTUAL VALUE',
@@ -83,7 +83,7 @@ Google Compute Cloud:
 
 .. code-block:: python
 
-    from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
+    from cloudbridge.factory import CloudProviderFactory, ProviderList
 
     config = {'gcp_project_name': 'project name',
               'gcp_service_creds_file': 'service_file.json',
@@ -147,7 +147,7 @@ a private network.
 
 .. code-block:: python
 
-    from cloudbridge.cloud.interfaces.resources import TrafficDirection
+    from cloudbridge.interfaces.resources import TrafficDirection
     fw = provider.security.vm_firewalls.create(
         label='cb-firewall', description='A VM firewall used by
         CloudBridge', network=net)
@@ -269,7 +269,7 @@ To wrap things up, let's clean up all the resources we have created
 
 .. code-block:: python
 
-    from cloudbridge.cloud.interfaces import InstanceState
+    from cloudbridge.interfaces import InstanceState
     inst.delete()
     inst.wait_for([InstanceState.DELETED, InstanceState.UNKNOWN],
                    terminal_states=[InstanceState.ERROR])  # Blocking call

+ 1 - 1
docs/index.rst

@@ -18,7 +18,7 @@ look like the following.
 
 .. code-block:: python
 
-	from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
+	from cloudbridge.factory import CloudProviderFactory, ProviderList
 
 	provider = CloudProviderFactory().create_provider(ProviderList.AWS, {})
 	print(provider.compute.instances.list())

+ 2 - 2
docs/topics/event_system.rst

@@ -69,7 +69,7 @@ wishes to extend the chain of handlers with their own code:
 
 .. code-block:: python
 
-    from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
+    from cloudbridge.factory import CloudProviderFactory, ProviderList
 
     provider = CloudProviderFactory().create_provider(ProviderList.FIRST, {})
     id = 'thisIsAnID'
@@ -81,7 +81,7 @@ can do so without modifying CloudBridge code:
 
 .. code-block:: python
 
-    from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
+    from cloudbridge.factory import CloudProviderFactory, ProviderList
 
     provider = CloudProviderFactory().create_provider(ProviderList.AZURE, {})
 

+ 5 - 5
docs/topics/provider_development.rst

@@ -17,7 +17,7 @@ add a class variable named ``PROVIDER_ID``.
 
 .. code-block:: python
 
-    from cloudbridge.cloud.base import BaseCloudProvider
+    from cloudbridge.base import BaseCloudProvider
 
 
     class GCPCloudProvider(BaseCloudProvider):
@@ -94,7 +94,7 @@ Service in turn.
 
 .. code-block:: python
 
-    from cloudbridge.cloud.base.services import BaseSecurityService
+    from cloudbridge.base.services import BaseSecurityService
 
 
     class GCPSecurityService(BaseSecurityService):
@@ -137,9 +137,9 @@ next implement these services.
 
 .. code-block:: python
 
-    from cloudbridge.cloud.base.services import BaseKeyPairService
-    from cloudbridge.cloud.base.services import BaseSecurityGroupService
-    from cloudbridge.cloud.base.services import BaseSecurityService
+    from cloudbridge.base.services import BaseKeyPairService
+    from cloudbridge.base.services import BaseSecurityGroupService
+    from cloudbridge.base.services import BaseSecurityService
 
 
     class GCPSecurityService(BaseSecurityService):

+ 1 - 1
docs/topics/release_process.rst

@@ -39,7 +39,7 @@ Release Process
 
 .. code-block:: bash
 
-   git tag -a v1.0.0 -m "Release 1.0.0"
+   git tag -a v2.0.0 -m "Release 2.0.0"
    git push
    git push --tags
 

+ 3 - 3
docs/topics/setup.rst

@@ -21,7 +21,7 @@ will override environment values.
 
 .. code-block:: python
 
-    from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
+    from cloudbridge.factory import CloudProviderFactory, ProviderList
 
     ## For AWS
     config = {'aws_access_key' : '<your_access_key>',
@@ -268,7 +268,7 @@ OPENSTACK):
 
 .. code-block:: python
 
-    from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
+    from cloudbridge.factory import CloudProviderFactory, ProviderList
 
     provider = CloudProviderFactory().create_provider(ProviderList.AWS, {})
 
@@ -313,7 +313,7 @@ Once the file is created, you can create a connection as follows, replacing
 
 .. code-block:: python
 
-    from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList
+    from cloudbridge.factory import CloudProviderFactory, ProviderList
 
     provider = CloudProviderFactory().create_provider(ProviderList.AWS, {})
 

+ 3 - 3
docs/topics/testing.rst

@@ -48,10 +48,10 @@ against a specific infrastructure, say aws, use a command like this:
 Specific test cases
 ~~~~~~~~~~~~~~~~~~~~
 You can run a specific test case, as follows:
-``tox -- test/test_image_service.py:CloudImageServiceTestCase.test_create_and_list_imag``
+``tox -- tests/test_image_service.py:CloudImageServiceTestCase.test_create_and_list_imag``
 
 It can also be restricted to a particular environment as follows:
-``tox -e "py27-aws" -- test/test_cloud_factory.py:CloudFactoryTestCase``
+``tox -e "py27-aws" -- tests/test_cloud_factory.py:CloudFactoryTestCase``
 
 See nosetest documentation for other parameters that can be passed in.
 
@@ -63,7 +63,7 @@ environment variable prior to running the tests, or they will default to
 ``CB_TEST_PROVIDER=aws``.
 
 You can also run a specific test case, as follows:
-``python setup.py test -s test.test_cloud_factory.CloudFactoryTestCase``
+``python setup.py test -s tests.test_cloud_factory.CloudFactoryTestCase``
 
 Using a mock provider
 ~~~~~~~~~~~~~~~~~~~~~

+ 2 - 2
setup.cfg

@@ -2,7 +2,7 @@
 branch = True
 source = cloudbridge
 omit =
-  cloudbridge/cloud/interfaces/*
+  cloudbridge/interfaces/*
   cloudbridge/__init__.py
 
 [nosetests]
@@ -20,4 +20,4 @@ logging-filter=cloudbridge
 universal = 1
 
 [flake8]
-application_import_names = cloudbridge, test
+application_import_names = cloudbridge, tests

+ 5 - 5
setup.py

@@ -24,10 +24,10 @@ REQS_BASE = [
     'tenacity>=4.12.0,<=5.0',
     'cachetools>=2.1.0',
     'deprecated>=1.2.3',
-    'pyeventsystem'
+    'pyeventsystem<2'
 ]
 REQS_AWS = [
-    'boto3>=1.9.86'
+    'boto3>=1.9.86,<=1.9.114'
 ]
 # Install azure>=3.0.0 package to find which of the azure libraries listed
 # below are compatible with each other. List individual libraries instead
@@ -46,8 +46,8 @@ REQS_AZURE = [
     'pysftp==0.2.9'
 ]
 REQS_GCP = [
-    'google-api-python-client',
-    'oauth2client'
+    'google-api-python-client<=1.7.8',
+    'oauth2client<=4.1.3'
 ]
 REQS_OPENSTACK = [
     'openstacksdk>=0.12.0,<=0.17',
@@ -102,5 +102,5 @@ setup(
         'Programming Language :: Python :: 3.5',
         'Programming Language :: Python :: 3.6',
         'Programming Language :: Python :: Implementation :: CPython'],
-    test_suite="test"
+    test_suite="tests"
 )

+ 0 - 0
test/__init__.py → tests/__init__.py


+ 0 - 0
test/fixtures/custom_amis.json → tests/fixtures/custom_amis.json


+ 0 - 0
test/fixtures/logo.jpg → tests/fixtures/logo.jpg


+ 8 - 8
test/helpers/__init__.py → tests/helpers/__init__.py

@@ -5,14 +5,14 @@ import sys
 import unittest
 import uuid
 
-from cloudbridge.cloud.base import helpers as cb_helpers
-from cloudbridge.cloud.factory import CloudProviderFactory
-from cloudbridge.cloud.interfaces import CloudProvider
-from cloudbridge.cloud.interfaces import InstanceState
-from cloudbridge.cloud.interfaces import TestMockHelperMixin
-from cloudbridge.cloud.interfaces.resources import FloatingIpState
-from cloudbridge.cloud.interfaces.resources import NetworkState
-from cloudbridge.cloud.interfaces.resources import SubnetState
+from cloudbridge.base import helpers as cb_helpers
+from cloudbridge.factory import CloudProviderFactory
+from cloudbridge.interfaces import CloudProvider
+from cloudbridge.interfaces import InstanceState
+from cloudbridge.interfaces import TestMockHelperMixin
+from cloudbridge.interfaces.resources import FloatingIpState
+from cloudbridge.interfaces.resources import NetworkState
+from cloudbridge.interfaces.resources import SubnetState
 
 
 def parse_bool(val):

+ 8 - 8
test/helpers/standard_interface_tests.py → tests/helpers/standard_interface_tests.py

@@ -9,16 +9,16 @@ import uuid
 
 import tenacity
 
-from cloudbridge.cloud.base import helpers as cb_helpers
-from cloudbridge.cloud.interfaces.exceptions \
+from cloudbridge.base import helpers as cb_helpers
+from cloudbridge.interfaces.exceptions \
     import InvalidNameException
-from cloudbridge.cloud.interfaces.exceptions import InvalidParamException
-from cloudbridge.cloud.interfaces.resources import LabeledCloudResource
-from cloudbridge.cloud.interfaces.resources import ObjectLifeCycleMixin
-from cloudbridge.cloud.interfaces.resources import ResultList
-from cloudbridge.cloud.providers.aws.services import AWSImageService
+from cloudbridge.interfaces.exceptions import InvalidParamException
+from cloudbridge.interfaces.resources import LabeledCloudResource
+from cloudbridge.interfaces.resources import ObjectLifeCycleMixin
+from cloudbridge.interfaces.resources import ResultList
+from cloudbridge.providers.aws.services import AWSImageService
 
-import test.helpers as helpers
+import tests.helpers as helpers
 
 
 def check_repr(test, obj):

+ 2 - 2
test/test_base_helpers.py → tests/test_base_helpers.py

@@ -1,7 +1,7 @@
 import unittest
 
-from cloudbridge.cloud.base import helpers as cb_helpers
-from cloudbridge.cloud.interfaces.exceptions import InvalidParamException
+from cloudbridge.base import helpers as cb_helpers
+from cloudbridge.interfaces.exceptions import InvalidParamException
 
 
 class BaseHelpersTestCase(unittest.TestCase):

+ 12 - 12
test/test_block_store_service.py → tests/test_block_store_service.py

@@ -2,18 +2,18 @@ import time
 
 import six
 
-from cloudbridge.cloud.base import helpers as cb_helpers
-from cloudbridge.cloud.factory import ProviderList
-from cloudbridge.cloud.interfaces import SnapshotState
-from cloudbridge.cloud.interfaces import VolumeState
-from cloudbridge.cloud.interfaces.provider import TestMockHelperMixin
-from cloudbridge.cloud.interfaces.resources import AttachmentInfo
-from cloudbridge.cloud.interfaces.resources import Snapshot
-from cloudbridge.cloud.interfaces.resources import Volume
-
-from test import helpers
-from test.helpers import ProviderTestBase
-from test.helpers import standard_interface_tests as sit
+from cloudbridge.base import helpers as cb_helpers
+from cloudbridge.factory import ProviderList
+from cloudbridge.interfaces import SnapshotState
+from cloudbridge.interfaces import VolumeState
+from cloudbridge.interfaces.provider import TestMockHelperMixin
+from cloudbridge.interfaces.resources import AttachmentInfo
+from cloudbridge.interfaces.resources import Snapshot
+from cloudbridge.interfaces.resources import Volume
+
+from tests import helpers
+from tests.helpers import ProviderTestBase
+from tests.helpers import standard_interface_tests as sit
 
 
 class CloudBlockStoreServiceTestCase(ProviderTestBase):

+ 5 - 6
test/test_cloud_factory.py → tests/test_cloud_factory.py

@@ -1,11 +1,10 @@
 import unittest
 
-from cloudbridge.cloud import factory
-from cloudbridge.cloud import interfaces
-from cloudbridge.cloud.factory import CloudProviderFactory
-from cloudbridge.cloud.interfaces import TestMockHelperMixin
-from cloudbridge.cloud.interfaces.provider import CloudProvider
-from cloudbridge.cloud.providers.aws import AWSCloudProvider
+from cloudbridge import factory, interfaces
+from cloudbridge.factory import CloudProviderFactory
+from cloudbridge.interfaces import TestMockHelperMixin
+from cloudbridge.interfaces.provider import CloudProvider
+from cloudbridge.providers.aws import AWSCloudProvider
 
 
 class CloudFactoryTestCase(unittest.TestCase):

+ 4 - 4
test/test_cloud_helpers.py → tests/test_cloud_helpers.py

@@ -2,11 +2,11 @@ import itertools
 
 import six
 
-from cloudbridge.cloud.base.helpers import get_env
-from cloudbridge.cloud.base.resources import ClientPagedResultList
-from cloudbridge.cloud.base.resources import ServerPagedResultList
+from cloudbridge.base.helpers import get_env
+from cloudbridge.base.resources import ClientPagedResultList
+from cloudbridge.base.resources import ServerPagedResultList
 
-from test.helpers import ProviderTestBase
+from tests.helpers import ProviderTestBase
 
 
 class DummyResult(object):

+ 13 - 13
test/test_compute_service.py → tests/test_compute_service.py

@@ -2,19 +2,19 @@ import ipaddress
 
 import six
 
-from cloudbridge.cloud.base import helpers as cb_helpers
-from cloudbridge.cloud.base.resources import BaseNetwork
-from cloudbridge.cloud.factory import ProviderList
-from cloudbridge.cloud.interfaces import InstanceState
-from cloudbridge.cloud.interfaces import InvalidConfigurationException
-from cloudbridge.cloud.interfaces.exceptions import WaitStateException
-from cloudbridge.cloud.interfaces.resources import Instance
-from cloudbridge.cloud.interfaces.resources import SnapshotState
-from cloudbridge.cloud.interfaces.resources import VMType
-
-from test import helpers
-from test.helpers import ProviderTestBase
-from test.helpers import standard_interface_tests as sit
+from cloudbridge.base import helpers as cb_helpers
+from cloudbridge.base.resources import BaseNetwork
+from cloudbridge.factory import ProviderList
+from cloudbridge.interfaces import InstanceState
+from cloudbridge.interfaces import InvalidConfigurationException
+from cloudbridge.interfaces.exceptions import WaitStateException
+from cloudbridge.interfaces.resources import Instance
+from cloudbridge.interfaces.resources import SnapshotState
+from cloudbridge.interfaces.resources import VMType
+
+from tests import helpers
+from tests.helpers import ProviderTestBase
+from tests.helpers import standard_interface_tests as sit
 
 
 class CloudComputeServiceTestCase(ProviderTestBase):

+ 7 - 7
test/test_image_service.py → tests/test_image_service.py

@@ -1,11 +1,11 @@
-from cloudbridge.cloud.base import helpers as cb_helpers
-from cloudbridge.cloud.interfaces import MachineImageState
-from cloudbridge.cloud.interfaces.resources import Instance
-from cloudbridge.cloud.interfaces.resources import MachineImage
+from cloudbridge.base import helpers as cb_helpers
+from cloudbridge.interfaces import MachineImageState
+from cloudbridge.interfaces.resources import Instance
+from cloudbridge.interfaces.resources import MachineImage
 
-from test import helpers
-from test.helpers import ProviderTestBase
-from test.helpers import standard_interface_tests as sit
+from tests import helpers
+from tests.helpers import ProviderTestBase
+from tests.helpers import standard_interface_tests as sit
 
 
 class CloudImageServiceTestCase(ProviderTestBase):

+ 11 - 7
test/test_interface.py → tests/test_interface.py

@@ -1,12 +1,12 @@
 import unittest
 
 import cloudbridge
-from cloudbridge.cloud import interfaces
-from cloudbridge.cloud.factory import CloudProviderFactory
-from cloudbridge.cloud.interfaces import TestMockHelperMixin
-from cloudbridge.cloud.interfaces.exceptions import ProviderConnectionException
+from cloudbridge import interfaces
+from cloudbridge.factory import CloudProviderFactory
+from cloudbridge.interfaces import TestMockHelperMixin
+from cloudbridge.interfaces.exceptions import ProviderConnectionException
 
-from test.helpers import ProviderTestBase
+from tests.helpers import ProviderTestBase
 
 
 class CloudInterfaceTestCase(ProviderTestBase):
@@ -76,7 +76,9 @@ class CloudInterfaceTestCase(ProviderTestBase):
             cloned_provider.region_name)
         matches = [zone.name for zone in region.zones
                    if zone.name == cloned_provider.zone_name]
-        self.assertListEqual([cloned_provider.zone_name], matches)
+        # FIXME: GCP always requires a zone, so skip for now
+        if self.provider.PROVIDER_ID != 'gcp':
+            self.assertListEqual([cloned_provider.zone_name], matches)
 
     def test_provider_always_has_zone(self):
         cloned_config = self.provider.config.copy()
@@ -88,4 +90,6 @@ class CloudInterfaceTestCase(ProviderTestBase):
         cloned_config['openstack_zone_name'] = None
         cloned_provider = CloudProviderFactory().create_provider(
                 self.provider.PROVIDER_ID, cloned_config)
-        self.assertIsNotNone(cloned_provider.zone_name)
+        # FIXME: GCP always requires a zone, so skip for now
+        if self.provider.PROVIDER_ID != 'gcp':
+            self.assertIsNotNone(cloned_provider.zone_name)

+ 5 - 5
test/test_middleware_system.py → tests/test_middleware_system.py

@@ -4,10 +4,10 @@ from pyeventsystem.events import SimpleEventDispatcher
 from pyeventsystem.middleware import SimpleMiddlewareManager
 from pyeventsystem.middleware import implement
 
-from cloudbridge.cloud.base.middleware import EventDebugLoggingMiddleware
-from cloudbridge.cloud.base.middleware import ExceptionWrappingMiddleware
-from cloudbridge.cloud.interfaces.exceptions import CloudBridgeBaseException
-from cloudbridge.cloud.interfaces.exceptions import \
+from cloudbridge.base.middleware import EventDebugLoggingMiddleware
+from cloudbridge.base.middleware import ExceptionWrappingMiddleware
+from cloudbridge.interfaces.exceptions import CloudBridgeBaseException
+from cloudbridge.interfaces.exceptions import \
     InvalidConfigurationException
 
 from .helpers import skipIfPython
@@ -82,7 +82,7 @@ class EventDebugLoggingMiddlewareTestCase(unittest.TestCase):
         some_obj = SomeDummyClass()
         manager.add(some_obj)
 
-        with self.assertLogs('cloudbridge.cloud.base.middleware',
+        with self.assertLogs('cloudbridge.base.middleware',
                              level='DEBUG') as cm:
             dispatcher.dispatch(self, EVENT_NAME,
                                 "named_param", keyword_param="hello")

+ 12 - 12
test/test_network_service.py → tests/test_network_service.py

@@ -1,15 +1,15 @@
-from cloudbridge.cloud.base import helpers as cb_helpers
-from cloudbridge.cloud.base.resources import BaseNetwork
-from cloudbridge.cloud.interfaces.resources import FloatingIP
-from cloudbridge.cloud.interfaces.resources import Network
-from cloudbridge.cloud.interfaces.resources import NetworkState
-from cloudbridge.cloud.interfaces.resources import RouterState
-from cloudbridge.cloud.interfaces.resources import Subnet
-from cloudbridge.cloud.interfaces.resources import SubnetState
-
-import test.helpers as helpers
-from test.helpers import ProviderTestBase
-from test.helpers import standard_interface_tests as sit
+from cloudbridge.base import helpers as cb_helpers
+from cloudbridge.base.resources import BaseNetwork
+from cloudbridge.interfaces.resources import FloatingIP
+from cloudbridge.interfaces.resources import Network
+from cloudbridge.interfaces.resources import NetworkState
+from cloudbridge.interfaces.resources import RouterState
+from cloudbridge.interfaces.resources import Subnet
+from cloudbridge.interfaces.resources import SubnetState
+
+import tests.helpers as helpers
+from tests.helpers import ProviderTestBase
+from tests.helpers import standard_interface_tests as sit
 
 
 class CloudNetworkServiceTestCase(ProviderTestBase):

+ 5 - 5
test/test_object_life_cycle.py → tests/test_object_life_cycle.py

@@ -1,9 +1,9 @@
-from cloudbridge.cloud.base import helpers as cb_helpers
-from cloudbridge.cloud.interfaces import VolumeState
-from cloudbridge.cloud.interfaces.exceptions import WaitStateException
+from cloudbridge.base import helpers as cb_helpers
+from cloudbridge.interfaces import VolumeState
+from cloudbridge.interfaces.exceptions import WaitStateException
 
-from test import helpers
-from test.helpers import ProviderTestBase
+from tests import helpers
+from tests.helpers import ProviderTestBase
 
 
 class CloudObjectLifeCycleTestCase(ProviderTestBase):

+ 9 - 9
test/test_object_store_service.py → tests/test_object_store_service.py

@@ -7,15 +7,15 @@ from unittest import skip
 
 import requests
 
-from cloudbridge.cloud.base import helpers as cb_helpers
-from cloudbridge.cloud.interfaces.exceptions import DuplicateResourceException
-from cloudbridge.cloud.interfaces.provider import TestMockHelperMixin
-from cloudbridge.cloud.interfaces.resources import Bucket
-from cloudbridge.cloud.interfaces.resources import BucketObject
-
-from test import helpers
-from test.helpers import ProviderTestBase
-from test.helpers import standard_interface_tests as sit
+from cloudbridge.base import helpers as cb_helpers
+from cloudbridge.interfaces.exceptions import DuplicateResourceException
+from cloudbridge.interfaces.provider import TestMockHelperMixin
+from cloudbridge.interfaces.resources import Bucket
+from cloudbridge.interfaces.resources import BucketObject
+
+from tests import helpers
+from tests.helpers import ProviderTestBase
+from tests.helpers import standard_interface_tests as sit
 
 
 class CloudObjectStoreServiceTestCase(ProviderTestBase):

+ 4 - 4
test/test_region_service.py → tests/test_region_service.py

@@ -1,10 +1,10 @@
 import six
 
-from cloudbridge.cloud.interfaces import Region
+from cloudbridge.interfaces import Region
 
-from test import helpers
-from test.helpers import ProviderTestBase
-from test.helpers import standard_interface_tests as sit
+from tests import helpers
+from tests.helpers import ProviderTestBase
+from tests.helpers import standard_interface_tests as sit
 
 
 class CloudRegionServiceTestCase(ProviderTestBase):

+ 10 - 10
test/test_security_service.py → tests/test_security_service.py

@@ -1,14 +1,14 @@
 """Test cloudbridge.security modules."""
-import cloudbridge.cloud.base.helpers as cb_helpers
-from cloudbridge.cloud.interfaces.exceptions import DuplicateResourceException
-from cloudbridge.cloud.interfaces.resources import KeyPair
-from cloudbridge.cloud.interfaces.resources import TrafficDirection
-from cloudbridge.cloud.interfaces.resources import VMFirewall
-from cloudbridge.cloud.interfaces.resources import VMFirewallRule
-
-from test import helpers
-from test.helpers import ProviderTestBase
-from test.helpers import standard_interface_tests as sit
+import cloudbridge.base.helpers as cb_helpers
+from cloudbridge.interfaces.exceptions import DuplicateResourceException
+from cloudbridge.interfaces.resources import KeyPair
+from cloudbridge.interfaces.resources import TrafficDirection
+from cloudbridge.interfaces.resources import VMFirewall
+from cloudbridge.interfaces.resources import VMFirewallRule
+
+from tests import helpers
+from tests.helpers import ProviderTestBase
+from tests.helpers import standard_interface_tests as sit
 
 
 class CloudSecurityServiceTestCase(ProviderTestBase):

+ 3 - 3
test/test_vm_types_service.py → tests/test_vm_types_service.py

@@ -1,8 +1,8 @@
 import six
 
-from test import helpers
-from test.helpers import ProviderTestBase
-from test.helpers import standard_interface_tests as sit
+from tests import helpers
+from tests.helpers import ProviderTestBase
+from tests.helpers import standard_interface_tests as sit
 
 
 class CloudVMTypeServiceTestCase(ProviderTestBase):

+ 2 - 2
tox.ini

@@ -9,11 +9,11 @@
 envlist = {py27,py36,pypy}-{aws,azure,gcp,openstack,mock}
 
 [testenv]
-commands = flake8 cloudbridge test setup.py
+commands = flake8 cloudbridge tests setup.py
            # see setup.cfg for options sent to nosetests and coverage
            nosetests -v --nocapture --nologcapture --logging-format='%(asctime)s [%(levelname)s] %(name)s: %(message)s' {posargs}
 setenv =
-    MOTO_AMIS_PATH=./test/fixtures/custom_amis.json
+    MOTO_AMIS_PATH=./tests/fixtures/custom_amis.json
     # Fix for moto import issue: https://github.com/travis-ci/travis-ci/issues/7940
     BOTO_CONFIG=/dev/null
     aws: CB_TEST_PROVIDER=aws