]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Add back catch_error which is used for CLI errors
authorJeff Peeler <jpeeler@redhat.com>
Fri, 7 Dec 2012 21:56:49 +0000 (16:56 -0500)
committerJeff Peeler <jpeeler@redhat.com>
Sat, 8 Dec 2012 04:25:50 +0000 (23:25 -0500)
Change-Id: Ib8b975d22950d5ba6aa9d5f150403a64356a8aa3
Signed-off-by: Jeff Peeler <jpeeler@redhat.com>
heat/utils.py [new file with mode: 0644]

diff --git a/heat/utils.py b/heat/utils.py
new file mode 100644 (file)
index 0000000..9370e27
--- /dev/null
@@ -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