summaryrefslogtreecommitdiffstats
path: root/ipalib
diff options
context:
space:
mode:
Diffstat (limited to 'ipalib')
-rw-r--r--ipalib/cli.py28
-rw-r--r--ipalib/errors2.py14
-rw-r--r--ipalib/rpc.py5
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])