Use import_class(), import_object(), and import_module() from openstack-common's importutils module. The equivalent functions have been removed from nova.utils. A few modules had import order cleaned up in passing, as well. My initial motivation for this was to remove some more usage of nova bits from nova.rpc as another step towards being able to move nova.rpc import openstack-common. Since I was pulling importutils into nova, I went ahead and converted the whole thing. Change-Id: I7c7786cf0001bcd06db52b9a99ff4284a3f6c6fa
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# 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.
 | 
						|
 | 
						|
from nova import flags
 | 
						|
from nova import log as logging
 | 
						|
from nova.openstack.common import cfg
 | 
						|
from nova.openstack.common import exception as common_exception
 | 
						|
from nova.openstack.common import importutils
 | 
						|
 | 
						|
 | 
						|
list_notifier_drivers_opt = cfg.MultiStrOpt('list_notifier_drivers',
 | 
						|
        default=['nova.notifier.no_op_notifier'],
 | 
						|
        help='List of drivers to send notifications')
 | 
						|
 | 
						|
FLAGS = flags.FLAGS
 | 
						|
FLAGS.register_opt(list_notifier_drivers_opt)
 | 
						|
 | 
						|
LOG = logging.getLogger(__name__)
 | 
						|
 | 
						|
drivers = None
 | 
						|
 | 
						|
 | 
						|
class ImportFailureNotifier(object):
 | 
						|
    """Noisily re-raises some exception over-and-over when notify is called."""
 | 
						|
 | 
						|
    def __init__(self, exception):
 | 
						|
        self.exception = exception
 | 
						|
 | 
						|
    def notify(self, message):
 | 
						|
        raise self.exception
 | 
						|
 | 
						|
 | 
						|
def _get_drivers():
 | 
						|
    """Instantiates and returns drivers based on the flag values."""
 | 
						|
    global drivers
 | 
						|
    if not drivers:
 | 
						|
        drivers = []
 | 
						|
        for notification_driver in FLAGS.list_notifier_drivers:
 | 
						|
            try:
 | 
						|
                drivers.append(importutils.import_module(notification_driver))
 | 
						|
            except ImportError as e:
 | 
						|
                drivers.append(ImportFailureNotifier(e))
 | 
						|
    return drivers
 | 
						|
 | 
						|
 | 
						|
def notify(message):
 | 
						|
    """Passes notification to multiple notifiers in a list."""
 | 
						|
    for driver in _get_drivers():
 | 
						|
        try:
 | 
						|
            driver.notify(message)
 | 
						|
        except Exception as e:
 | 
						|
            LOG.exception(_("Problem '%(e)s' attempting to send to "
 | 
						|
                            "notification driver %(driver)s."), locals())
 | 
						|
 | 
						|
 | 
						|
def _reset_drivers():
 | 
						|
    """Used by unit tests to reset the drivers."""
 | 
						|
    global drivers
 | 
						|
    drivers = None
 |