diff options
Diffstat (limited to 'ipalib')
-rw-r--r-- | ipalib/cli.py | 28 | ||||
-rw-r--r-- | ipalib/errors2.py | 14 | ||||
-rw-r--r-- | ipalib/rpc.py | 5 |
3 files changed, 26 insertions, 21 deletions
diff --git a/ipalib/cli.py b/ipalib/cli.py index 62b8b930..6b3ab7e5 100644 --- a/ipalib/cli.py +++ b/ipalib/cli.py @@ -34,12 +34,11 @@ import struct import frontend import backend -import errors -import errors2 import plugable import util +from errors2 import PublicError, CommandError from constants import CLI_TAB -from parameters import Password +from parameters import Password, Bytes def to_cli(name): @@ -120,9 +119,10 @@ class textui(backend.Backend): """ Decode text from stdin. """ - assert type(str_buffer) is str - encoding = self.__get_encoding(sys.stdin) - return str_buffer.decode(encoding) + if type(str_buffer) is str: + encoding = self.__get_encoding(sys.stdin) + return str_buffer.decode(encoding) + return str_buffer def encode(self, unicode_text): """ @@ -535,7 +535,7 @@ class CLI(object): print '' self.api.log.info('operation aborted') sys.exit() - except errors2.PublicError, e: + except PublicError, e: self.api.log.error(e.strerror) sys.exit(e.errno) @@ -573,7 +573,7 @@ class CLI(object): return key = self.cmd_argv[0] if key not in self: - raise errors.UnknownCommandError(key) + raise CommandError(name=key) self.run_cmd(self[key]) # FIXME: Stuff that might need special handling still: @@ -782,7 +782,17 @@ class CLI(object): list(self.cmd_argv[1:]), KWCollector() ) options = kwc.__todict__() - return cmd.args_options_2_params(*args, **options) + kw = cmd.args_options_2_params(*args, **options) + return dict(self.params_iter(cmd, kw)) + + def params_iter(self, cmd, kw): + for (key, value) in kw.iteritems(): + param = cmd.params[key] + if isinstance(param, Bytes): + yield (key, value) + else: + yield (key, self.textui.decode(value)) + def build_parser(self, cmd): parser = optparse.OptionParser( diff --git a/ipalib/errors2.py b/ipalib/errors2.py index dccdbe6a..04258093 100644 --- a/ipalib/errors2.py +++ b/ipalib/errors2.py @@ -370,27 +370,19 @@ class NetworkError(PublicError): For example: - >>> raise NetworkError(uri='ldap://localhost:389') + >>> raise NetworkError(uri='ldap://localhost:389', error='Connection refused') Traceback (most recent call last): ... - NetworkError: cannot connect to 'ldap://localhost:389' + NetworkError: cannot connect to 'ldap://localhost:389': Connection refused """ errno = 907 - format = _('cannot connect to %(uri)r') + format = _('cannot connect to %(uri)r: %(error)s') class ServerNetworkError(PublicError): """ **908** Raised when client catches a `NetworkError` from server. - - For example: - - >>> e = NetworkError(uri='ldap://localhost:389') - >>> raise ServerNetworkError(error=e.message, server='https://localhost') - Traceback (most recent call last): - ... - ServerNetworkError: error on server 'https://localhost': cannot connect to 'ldap://localhost:389' """ errno = 908 diff --git a/ipalib/rpc.py b/ipalib/rpc.py index aa800209..55f3ea95 100644 --- a/ipalib/rpc.py +++ b/ipalib/rpc.py @@ -32,10 +32,11 @@ Also see the `ipaserver.rpcserver` module. from types import NoneType import threading +import socket from xmlrpclib import Binary, Fault, dumps, loads, ServerProxy, SafeTransport import kerberos from ipalib.backend import Backend -from ipalib.errors2 import public_errors, PublicError, UnknownError +from ipalib.errors2 import public_errors, PublicError, UnknownError, NetworkError from ipalib.request import context @@ -265,3 +266,5 @@ class xmlclient(Backend): error=e.faultString, server=self.env.xmlrpc_uri, ) + except socket.error, e: + raise NetworkError(uri=self.env.xmlrpc_uri, error=e.args[1]) |