From 211cd31d7ac2c7768cc871ac7c9228f7713b8dfc Mon Sep 17 00:00:00 2001
From: Terry Howe <terrylhowe@gmail.com>
Date: Thu, 6 Mar 2014 13:56:10 -0700
Subject: [PATCH] Make bash comple command best effort to authorize

If authorization fails for the complete command, generate the bash complete anyway.
* Added best_effort flag to command
* Attempts to authorize for bash complete, but if it fails, it tries anyway

Change-Id: I796258f8044f42abc6a51164d920a26f73397962
Partial-Bug: #1283550
---
 openstackclient/shell.py | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/openstackclient/shell.py b/openstackclient/shell.py
index 49307992c7..cc4570a178 100644
--- a/openstackclient/shell.py
+++ b/openstackclient/shell.py
@@ -24,6 +24,7 @@ import traceback
 
 from cliff import app
 from cliff import command
+from cliff import complete
 from cliff import help
 
 import openstackclient
@@ -64,8 +65,10 @@ class OpenStackShell(app.App):
     def __init__(self):
         # Patch command.Command to add a default auth_required = True
         command.Command.auth_required = True
+        command.Command.best_effort = False
         # But not help
         help.HelpCommand.auth_required = False
+        complete.CompleteCommand.best_effort = True
 
         super(OpenStackShell, self).__init__(
             description=__doc__.strip(),
@@ -465,7 +468,15 @@ class OpenStackShell(app.App):
         """Set up auth and API versions"""
         self.log.debug('prepare_to_run_command %s', cmd.__class__.__name__)
 
-        if cmd.auth_required:
+        if not cmd.auth_required:
+            return
+        if cmd.best_effort:
+            try:
+                self.authenticate_user()
+                self.restapi.set_auth(self.client_manager.identity.auth_token)
+            except Exception:
+                pass
+        else:
             self.authenticate_user()
             self.restapi.set_auth(self.client_manager.identity.auth_token)
         return