]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Quantum should use openstack.common.importutils
authorZhongyue Luo <lzyeval@gmail.com>
Mon, 4 Jun 2012 03:32:17 +0000 (11:32 +0800)
committerZhongyue Luo <lzyeval@gmail.com>
Mon, 4 Jun 2012 06:47:42 +0000 (14:47 +0800)
Implements blueprint use-common-importutils

Change-Id: Ib71a557ea6090d5c8d789b1e4c7b17855f7ee814

12 files changed:
openstack-common.conf
quantum/common/utils.py
quantum/manager.py
quantum/openstack/common/importutils.py [new file with mode: 0644]
quantum/plugins/cisco/l2network_plugin.py
quantum/plugins/cisco/models/l2network_multi_blade.py
quantum/plugins/cisco/models/l2network_single_blade.py
quantum/plugins/cisco/nexus/cisco_nexus_plugin.py
quantum/plugins/cisco/services/services_logistics.py
quantum/plugins/cisco/tests/unit/test_l2network_multi_blade.py
quantum/plugins/cisco/ucs/cisco_ucs_plugin.py
quantum/tests/unit/_test_api.py

index 8024763722e9a0d207b2fbb37561ff51be5b817d..31b82b840d128e7397f6dc8dee6e1afd2ebb4d78 100644 (file)
@@ -1,7 +1,7 @@
 [DEFAULT]
 
 # The list of modules to copy from openstack-common
-modules=cfg,iniparser,setup
+modules=cfg,importutils,iniparser,setup
 
 # The base module to hold the copy of openstack.common
 base=quantum
index a44a2e4bb51e261e5c6e95f6d8922290a75d33ec..1c2fc971d7e0f569b0c8825c7fbfe35357b222d0 100644 (file)
@@ -36,27 +36,6 @@ from quantum.common.exceptions import ProcessExecutionError
 from quantum.common import flags
 
 
-def import_class(import_str):
-    """Returns a class from a string including module and class."""
-    mod_str, _sep, class_str = import_str.rpartition('.')
-    try:
-        __import__(mod_str)
-        return getattr(sys.modules[mod_str], class_str)
-    except (ImportError, ValueError, AttributeError), exc:
-        print(('Inner Exception: %s'), exc)
-        raise exception.ClassNotFound(class_name=class_str)
-
-
-def import_object(import_str):
-    """Returns an object including a module or module and class."""
-    try:
-        __import__(import_str)
-        return sys.modules[import_str]
-    except ImportError:
-        cls = import_class(import_str)
-        return cls()
-
-
 # NOTE(jkoelker) Since to_primitive isn't used anywhere can we just drop it
 def to_primitive(value):
     if isinstance(value, (list, tuple)):
index b6324866825dbc171dde8021c3bcac25c72d480f..4db5ffdf53573e8a54b0c979572e1c12fe15511d 100644 (file)
@@ -29,6 +29,7 @@ import os
 from quantum.common import utils
 from quantum.common.config import find_config_file
 from quantum.common.exceptions import ClassNotFound
+from quantum.openstack.common import importutils
 from quantum.quantum_plugin_base import QuantumPluginBase
 
 
@@ -66,7 +67,7 @@ class QuantumManager(object):
 
         # If the plugin can't be found let them know gracefully
         try:
-            plugin_klass = utils.import_class(options['plugin_provider'])
+            plugin_klass = importutils.import_class(options['plugin_provider'])
         except ClassNotFound:
             raise Exception("Plugin not found.  You can install a "
                             "plugin with: pip install <plugin-name>\n"
diff --git a/quantum/openstack/common/importutils.py b/quantum/openstack/common/importutils.py
new file mode 100644 (file)
index 0000000..7654af5
--- /dev/null
@@ -0,0 +1,44 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Import related utilities and helper functions.
+"""
+
+import sys
+
+
+def import_class(import_str):
+    """Returns a class from a string including module and class"""
+    mod_str, _sep, class_str = import_str.rpartition('.')
+    try:
+        __import__(mod_str)
+        return getattr(sys.modules[mod_str], class_str)
+    except (ImportError, ValueError, AttributeError), exc:
+        raise ImportError('Class %s cannot be found (%s)' %
+                (class_str, str(exc)))
+
+
+def import_object(import_str, *args, **kwargs):
+    """Import a class and return an instance of it."""
+    return import_class(import_str)(*args, **kwargs)
+
+
+def import_module(import_str):
+    """Import a module."""
+    __import__(import_str)
+    return sys.modules[import_str]
index 6d6810a50af6cabd7919d9744c7e3ab5cf44feb2..deb58ee0fe3a3660d037fef65f0b7e11d54d53fd 100644 (file)
@@ -21,7 +21,7 @@ import logging
 import re
 
 from quantum.common import exceptions as exc
-from quantum.common import utils
+from quantum.openstack.common import importutils
 from quantum.quantum_plugin_base import QuantumPluginBase
 from quantum.plugins.cisco import l2network_plugin_configuration as conf
 from quantum.plugins.cisco.common import cisco_constants as const
@@ -44,8 +44,8 @@ class L2Network(QuantumPluginBase):
     def __init__(self):
         cdb.initialize()
         cred.Store.initialize()
-        self._model = utils.import_object(conf.MODEL_CLASS)
-        self._vlan_mgr = utils.import_object(conf.MANAGER_CLASS)
+        self._model = importutils.import_object(conf.MODEL_CLASS)
+        self._vlan_mgr = importutils.import_object(conf.MANAGER_CLASS)
         LOG.debug("L2Network plugin initialization done successfully\n")
 
     """
index 219d75c9ab8d8dfbad11c036a9f19ded3d7c9fa7..f55888fcca88ac9ea4fb2fb604ea2d063e5d501b 100644 (file)
@@ -22,7 +22,7 @@ import logging
 import platform
 
 from quantum.common import exceptions as exc
-from quantum.common import utils
+from quantum.openstack.common import importutils
 from quantum.plugins.cisco.l2network_model_base import L2NetworkModelBase
 from quantum.plugins.cisco import l2network_plugin_configuration as conf
 from quantum.plugins.cisco.common import cisco_constants as const
@@ -45,13 +45,13 @@ class L2NetworkMultiBlade(L2NetworkModelBase):
 
     def __init__(self):
         for key in conf.PLUGINS[const.PLUGINS].keys():
-            self._plugins[key] = utils.import_object(
-                conf.PLUGINS[const.PLUGINS][key])
+            plugin_obj = conf.PLUGINS[const.PLUGINS][key]
+            self._plugins[key] = importutils.import_object(plugin_obj)
             LOG.debug("Loaded device plugin %s\n" %
                       conf.PLUGINS[const.PLUGINS][key])
             if key in conf.PLUGINS[const.INVENTORY].keys():
-                self._inventory[key] = utils.import_object(
-                    conf.PLUGINS[const.INVENTORY][key])
+                inventory_obj = conf.PLUGINS[const.INVENTORY][key]
+                self._inventory[key] = importutils.import_object(inventory_obj)
                 LOG.debug("Loaded device inventory %s\n" %
                           conf.PLUGINS[const.INVENTORY][key])
 
index d6567d3b4993554340836837112f32c6204f1928..61395d889bb07c7bb589bb7eb0ed2e3414840f60 100644 (file)
@@ -22,7 +22,7 @@ import logging
 import platform
 
 from quantum.common import exceptions as exc
-from quantum.common import utils
+from quantum.openstack.common import importutils
 from quantum.plugins.cisco.l2network_model_base import L2NetworkModelBase
 from quantum.plugins.cisco import l2network_plugin_configuration as conf
 from quantum.plugins.cisco.common import cisco_constants as const
@@ -42,13 +42,13 @@ class L2NetworkSingleBlade(L2NetworkModelBase):
 
     def __init__(self):
         for key in conf.PLUGINS[const.PLUGINS].keys():
-            self._plugins[key] = utils.import_object(
-                conf.PLUGINS[const.PLUGINS][key])
+            plugin_obj = conf.PLUGINS[const.PLUGINS][key]
+            self._plugins[key] = importutils.import_object(plugin_obj)
             LOG.debug("Loaded device plugin %s\n" %
                       conf.PLUGINS[const.PLUGINS][key])
             if key in conf.PLUGINS[const.INVENTORY].keys():
-                self._inventory[key] = utils.import_object(
-                    conf.PLUGINS[const.INVENTORY][key])
+                inventory_obj = conf.PLUGINS[const.INVENTORY][key]
+                self._inventory[key] = importutils.import_object(inventory_obj)
                 LOG.debug("Loaded device inventory %s\n" %
                           conf.PLUGINS[const.INVENTORY][key])
 
index 36e1394a860e0fe615fd2b63761640e12fd56c10..30511a67b5de9c96f9a6c669cc35dc6207a0bc86 100644 (file)
@@ -23,7 +23,7 @@ PlugIn for Nexus OS driver
 import logging
 
 from quantum.common import exceptions as exc
-from quantum.common import utils
+from quantum.openstack.common import importutils
 from quantum.plugins.cisco.common import cisco_constants as const
 from quantum.plugins.cisco.common import cisco_credentials as cred
 from quantum.plugins.cisco.db import api as db
@@ -46,7 +46,7 @@ class NexusPlugin(L2DevicePluginBase):
         """
         Extracts the configuration parameters from the configuration file
         """
-        self._client = utils.import_object(conf.NEXUS_DRIVER)
+        self._client = importutils.import_object(conf.NEXUS_DRIVER)
         LOG.debug("Loaded driver %s\n" % conf.NEXUS_DRIVER)
         self._nexus_ip = conf.NEXUS_IP_ADDRESS
         self._nexus_username = cred.Store.getUsername(conf.NEXUS_IP_ADDRESS)
index a83976b9b2d6705c5141104414837ccbed6cb5dc..bf486dc95e7be55670726eaed7a0487aa75f120e 100644 (file)
@@ -24,7 +24,7 @@ import subprocess
 import re
 import time
 
-from quantum.common import utils
+from quantum.openstack.common import importutils
 from quantum.plugins.cisco import l2network_plugin_configuration as conf
 from quantum.plugins.cisco.common import cisco_constants as const
 from quantum.plugins.cisco.db import services_db as sdb
@@ -106,8 +106,8 @@ class ServicesLogistics():
         """
         _plugins = {}
         for key in conf.PLUGINS[const.PLUGINS].keys():
-            _plugins[key] = (
-                utils.import_object(conf.PLUGINS[const.PLUGINS][key]))
+            plugin_obj = conf.PLUGINS[const.PLUGINS][key]
+            _plugins[key] = importutils.import_object(plugin_obj)
         if not plugin_key in _plugins.keys():
             LOG.debug("No %s Plugin loaded" % plugin_key)
             return False
index e69d4bf3e9cf785a61355212ff89896242fc617e..1b0d1a2477fe45c62e7259e6f0462170204a117a 100644 (file)
@@ -23,7 +23,7 @@ import logging
 import unittest
 
 from quantum.common import exceptions as exc
-from quantum.common import utils
+from quantum.openstack.common import importutils
 from quantum.plugins.cisco.common import cisco_constants as const
 from quantum.plugins.cisco.common import cisco_credentials as creds
 from quantum.plugins.cisco.db import api as db
@@ -78,8 +78,8 @@ class TestMultiBlade(unittest.TestCase):
         # Get UCS inventory to make sure all UCSs are affected by tests
         for key in conf.PLUGINS[const.PLUGINS].keys():
             if key in conf.PLUGINS[const.INVENTORY].keys():
-                self._inventory[key] = utils.import_object(
-                    conf.PLUGINS[const.INVENTORY][key])
+                plugin_obj = conf.PLUGINS[const.INVENTORY][key]
+                self._inventory[key] = importutils.import_object(plugin_obj)
 
         self.ucs_count = self._inventory['ucs_plugin']._inventory.__len__()
 
index 52594679339b93bbcce06816e36d657a25bb5358..e2dcd6715691077cd0a83264850b96c48057205f 100644 (file)
@@ -20,7 +20,7 @@
 import logging
 
 from quantum.common import exceptions as exc
-from quantum.common import utils
+from quantum.openstack.common import importutils
 from quantum.plugins.cisco.common import cisco_constants as const
 from quantum.plugins.cisco.common import cisco_credentials as cred
 from quantum.plugins.cisco.common import cisco_exceptions as cexc
@@ -39,7 +39,7 @@ class UCSVICPlugin(L2DevicePluginBase):
     """UCS Device Plugin"""
 
     def __init__(self):
-        self._driver = utils.import_object(conf.UCSM_DRIVER)
+        self._driver = importutils.import_object(conf.UCSM_DRIVER)
         LOG.debug("Loaded driver %s\n" % conf.UCSM_DRIVER)
         # TODO (Sumit) Make the counter per UCSM
         self._port_profile_counter = 0
index 5d27fb8662c7c8df4d2d33800ed00e7010d1713c..d30c4bf7bf46d20a68229b5d1e178b6767f7c283 100644 (file)
@@ -25,8 +25,8 @@ import mock
 from quantum.api.api_common import APIFaultWrapper
 from quantum.api.networks import Controller
 from quantum.common.test_lib import test_config
-from quantum.common import utils
 from quantum.db import api as db
+from quantum.openstack.common import importutils
 import quantum.tests.unit.testlib_api as testlib
 from quantum.wsgi import XMLDeserializer, JSONDeserializer
 
@@ -107,7 +107,7 @@ class AbstractAPITest(unittest.TestCase):
     def setUp(self, api_router_klass, xml_metadata_dict):
         options = {}
         options['plugin_provider'] = test_config['plugin_name']
-        api_router_cls = utils.import_class(api_router_klass)
+        api_router_cls = importutils.import_class(api_router_klass)
         self.api = api_router_cls(options)
         self.tenant_id = "test_tenant"
         self.network_name = "test_network"