From 4510eccddc5fbb7fef16a4702112545346d171f3 Mon Sep 17 00:00:00 2001 From: Jeff Peeler Date: Fri, 7 Dec 2012 16:56:49 -0500 Subject: [PATCH] Add back catch_error which is used for CLI errors Change-Id: Ib8b975d22950d5ba6aa9d5f150403a64356a8aa3 Signed-off-by: Jeff Peeler --- heat/utils.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 heat/utils.py diff --git a/heat/utils.py b/heat/utils.py new file mode 100644 index 00000000..9370e272 --- /dev/null +++ b/heat/utils.py @@ -0,0 +1,57 @@ +# 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 +from heat.common import exception +from heat.openstack.common import log as logging + +LOG = logging.getLogger(__name__) + +SUCCESS = 0 +FAILURE = 1 + + +def catch_error(action): + """Decorator to provide sensible default error handling for CLI actions.""" + def wrap(func): + @functools.wraps(func) + def wrapper(*arguments, **kwargs): + try: + 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, " + + "OS_TENANT_NAME, OS_AUTH_URL and OS_AUTH_STRATEGY).") + return FAILURE + except exception.ClientConfigurationError: + raise + 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: + raise + LOG.error("Failed to %s. Got error:" % action) + pieces = unicode(e).split('\n') + for piece in pieces: + LOG.error(piece) + return FAILURE + + return wrapper + return wrap -- 2.45.2