Clean error message display :)
Change-Id: Ie74e590c7d9c9de0b5a22ca5185c3cd5438a50cb
This commit is contained in:
parent
1e47b5a369
commit
2b97f4560c
monikerclient
@ -17,6 +17,7 @@ import abc
|
|||||||
from cliff.command import Command as CliffCommand
|
from cliff.command import Command as CliffCommand
|
||||||
from cliff.lister import Lister
|
from cliff.lister import Lister
|
||||||
from cliff.show import ShowOne
|
from cliff.show import ShowOne
|
||||||
|
from monikerclient import exceptions
|
||||||
from monikerclient import utils
|
from monikerclient import utils
|
||||||
from monikerclient.v1 import Client
|
from monikerclient.v1 import Client
|
||||||
|
|
||||||
@ -44,7 +45,30 @@ class Command(CliffCommand):
|
|||||||
|
|
||||||
self.client = Client(**client_args)
|
self.client = Client(**client_args)
|
||||||
|
|
||||||
return super(Command, self).run(parsed_args)
|
try:
|
||||||
|
return super(Command, self).run(parsed_args)
|
||||||
|
except exceptions.RemoteError, e:
|
||||||
|
columns = ['Code', 'Type']
|
||||||
|
values = [e.code, e.type]
|
||||||
|
|
||||||
|
if e.message:
|
||||||
|
columns.append('Message')
|
||||||
|
values.append(e.message)
|
||||||
|
|
||||||
|
if e.errors:
|
||||||
|
columns.append('Errors')
|
||||||
|
values.append(e.errors)
|
||||||
|
|
||||||
|
self.error_output(parsed_args, columns, values)
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
|
def error_output(self, parsed_args, column_names, data):
|
||||||
|
self.formatter.emit_one(column_names,
|
||||||
|
data,
|
||||||
|
self.app.stdout,
|
||||||
|
parsed_args)
|
||||||
|
self.app.log.error('The requested action did not complete sucessfully')
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def execute(self, parsed_args):
|
def execute(self, parsed_args):
|
||||||
@ -66,7 +90,6 @@ class Command(CliffCommand):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
# TODO: Common Exception Handling Here
|
|
||||||
results = self.execute(parsed_args)
|
results = self.execute(parsed_args)
|
||||||
return self.post_execute(results)
|
return self.post_execute(results)
|
||||||
|
|
||||||
|
@ -24,7 +24,13 @@ class ResourceNotFound(Base):
|
|||||||
|
|
||||||
|
|
||||||
class RemoteError(Base):
|
class RemoteError(Base):
|
||||||
pass
|
def __init__(self, message=None, code=None, type=None, errors=None):
|
||||||
|
super(RemoteError, self).__init__(message)
|
||||||
|
|
||||||
|
self.message = message
|
||||||
|
self.code = code
|
||||||
|
self.type = type
|
||||||
|
self.errors = errors
|
||||||
|
|
||||||
|
|
||||||
class Unknown(RemoteError):
|
class Unknown(RemoteError):
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
from cliff.app import App
|
from cliff.app import App
|
||||||
from cliff.commandmanager import CommandManager
|
from cliff.commandmanager import CommandManager
|
||||||
@ -20,6 +21,8 @@ from monikerclient.version import version_info as version
|
|||||||
|
|
||||||
|
|
||||||
class MonikerShell(App):
|
class MonikerShell(App):
|
||||||
|
CONSOLE_MESSAGE_FORMAT = '%(levelname)s: %(message)s'
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(MonikerShell, self).__init__(
|
super(MonikerShell, self).__init__(
|
||||||
description='Moniker Client',
|
description='Moniker Client',
|
||||||
@ -27,6 +30,19 @@ class MonikerShell(App):
|
|||||||
command_manager=CommandManager('moniker.cli'),
|
command_manager=CommandManager('moniker.cli'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
def configure_logging(self):
|
||||||
|
super(MonikerShell, self).configure_logging()
|
||||||
|
|
||||||
|
# Set requests logging
|
||||||
|
requests_logger = logging.getLogger('requests')
|
||||||
|
|
||||||
|
if self.options.verbose_level <= 1:
|
||||||
|
requests_logger.setLevel(logging.WARN)
|
||||||
|
else:
|
||||||
|
requests_logger.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
def build_option_parser(self, description, version):
|
def build_option_parser(self, description, version):
|
||||||
parser = super(MonikerShell, self).build_option_parser(
|
parser = super(MonikerShell, self).build_option_parser(
|
||||||
description, version)
|
description, version)
|
||||||
|
@ -52,7 +52,6 @@ class Client(object):
|
|||||||
raise ValueError('Either an endpoint or auth_url must be supplied')
|
raise ValueError('Either an endpoint or auth_url must be supplied')
|
||||||
|
|
||||||
headers = {'Content-Type': 'application/json'}
|
headers = {'Content-Type': 'application/json'}
|
||||||
|
|
||||||
self.requests = requests.Session()
|
self.requests = requests.Session()
|
||||||
self.requests.auth = auth
|
self.requests.auth = auth
|
||||||
self.requests.headers.update(headers)
|
self.requests.headers.update(headers)
|
||||||
@ -76,15 +75,15 @@ class Client(object):
|
|||||||
response = func(*args, **kw)
|
response = func(*args, **kw)
|
||||||
|
|
||||||
if response.status_code == 400:
|
if response.status_code == 400:
|
||||||
raise exceptions.BadRequest(response.json['errors'])
|
raise exceptions.BadRequest(**response.json)
|
||||||
elif response.status_code in (401, 403):
|
elif response.status_code in (401, 403):
|
||||||
raise exceptions.Forbidden()
|
raise exceptions.Forbidden(**response.json)
|
||||||
elif response.status_code == 404:
|
elif response.status_code == 404:
|
||||||
raise exceptions.NotFound()
|
raise exceptions.NotFound(**response.json)
|
||||||
elif response.status_code == 409:
|
elif response.status_code == 409:
|
||||||
raise exceptions.Conflict()
|
raise exceptions.Conflict(**response.json)
|
||||||
elif response.status_code == 500:
|
elif response.status_code == 500:
|
||||||
raise exceptions.Unknown()
|
raise exceptions.Unknown(**response.json)
|
||||||
else:
|
else:
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user