Steven Hardy d9f63269f1 heat : fix glanceclient deprecation warning
glanceclient module name changed for F18, so do
a conditional import which should import the correct
version provided one is available (tested on F17/F18)

Fixes #251

Change-Id: I095560f29a408949a7d54795fc000c094b1d63b9
Signed-off-by: Steven Hardy <shardy@redhat.com>
2012-09-26 15:27:15 +01:00

97 lines
3.1 KiB

# vim: tabstop=4 shiftwidth=4 softtabstop=4
# 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 functools
import os
import os.path
import sys
import base64
from lxml import etree
import re
from glanceclient import client as glance_client
except ImportError:
from glance import client as glance_client
from heat.common import exception
from heat.openstack.common import log as logging
LOG = logging.getLogger(__name__)
def catch_error(action):
"""Decorator to provide sensible default error handling for CLI actions."""
def wrap(func):
def wrapper(*arguments, **kwargs):
ret = func(*arguments, **kwargs)
return SUCCESS if ret is None else ret
except exception.NotAuthorized:
LOG.error("Not authorized to make this request. Check " +
"your credentials (OS_USERNAME, OS_PASSWORD, " +
return FAILURE
except exception.ClientConfigurationError:
except exception.KeystoneError, e:
LOG.error("Keystone did not finish the authentication and "
"returned the following message:\n\n%s"
% e.message)
return FAILURE
except Exception, e:
options = arguments[0]
if options.debug:
LOG.error("Failed to %s. Got error:" % action)
pieces = unicode(e).split('\n')
for piece in pieces:
return FAILURE
return wrapper
return wrap
class LazyPluggable(object):
"""A pluggable backend loaded lazily based on some value."""
def __init__(self, pivot, **backends):
self.__backends = backends
self.__pivot = pivot
self.__backend = None
def __get_backend(self):
if not self.__backend:
backend_name = 'sqlalchemy'
backend = self.__backends[backend_name]
if isinstance(backend, tuple):
name = backend[0]
fromlist = backend[1]
name = backend
fromlist = backend
self.__backend = __import__(name, None, None, fromlist)
return self.__backend
def __getattr__(self, key):
backend = self.__get_backend()
return getattr(backend, key)