Skip to content

Commit

Permalink
Merge pull request #14497 from tchaikov/wip-pybind-better-error-msg
Browse files Browse the repository at this point in the history
pybind: better error msg

Reviewed-by: Josh Durgin <jdurgin@redhat.com>
  • Loading branch information
yuriw committed May 2, 2017
2 parents 35171b9 + ac58071 commit 0fd1689
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 67 deletions.
40 changes: 23 additions & 17 deletions src/pybind/cephfs/cephfs.pyx
Expand Up @@ -16,9 +16,7 @@ import os
import sys

# Are we running Python 2.x
_python2 = sys.hexversion < 0x03000000

if _python2:
if sys.version_info[0] < 3:
str_type = basestring
else:
str_type = str
Expand Down Expand Up @@ -153,51 +151,59 @@ class Error(Exception):
pass


class PermissionError(Error):
pass
class OSError(Error):
def __init__(self, errno, strerror):
self.errno = errno
self.strerror = strerror

def __str__(self):
return '[Errno {0}] {1}'.format(self.errno, self.strerror)


class ObjectNotFound(Error):
class PermissionError(OSError):
pass


class NoData(Error):
class ObjectNotFound(OSError):
pass


class ObjectExists(Error):
class NoData(OSError):
pass


class IOError(Error):
class ObjectExists(OSError):
pass


class NoSpace(Error):
class IOError(OSError):
pass


class InvalidValue(Error):
class NoSpace(OSError):
pass


class OperationNotSupported(Error):
class InvalidValue(OSError):
pass


class IncompleteWriteError(Error):
class OperationNotSupported(OSError):
pass


class LibCephFSStateError(Error):
pass

class WouldBlock(Error):

class WouldBlock(OSError):
pass

class OutOfRange(Error):

class OutOfRange(OSError):
pass


IF UNAME_SYSNAME == "FreeBSD":
cdef errno_to_exception = {
errno.EPERM : PermissionError,
Expand Down Expand Up @@ -238,9 +244,9 @@ cdef make_ex(ret, msg):
"""
ret = abs(ret)
if ret in errno_to_exception:
return errno_to_exception[ret](msg)
return errno_to_exception[ret](ret, msg)
else:
return Error(msg + (": error code %d" % ret))
return Error(ret, msg + (": error code %d" % ret))


class DirEntry(namedtuple('DirEntry',
Expand Down
64 changes: 36 additions & 28 deletions src/pybind/rados/rados.pyx
Expand Up @@ -28,9 +28,7 @@ from functools import partial, wraps
from itertools import chain

# Are we running Python 2.x
_python2 = sys.hexversion < 0x03000000

if _python2:
if sys.version_info[0] < 3:
str_type = basestring
else:
str_type = str
Expand Down Expand Up @@ -297,59 +295,68 @@ LIBRADOS_CREATE_IDEMPOTENT = _LIBRADOS_CREATE_IDEMPOTENT
ANONYMOUS_AUID = 0xffffffffffffffff
ADMIN_AUID = 0


class Error(Exception):
""" `Error` class, derived from `Exception` """
pass


class InvalidArgumentError(Error):
pass


class InterruptedOrTimeoutError(Error):
""" `InterruptedOrTimeoutError` class, derived from `Error` """
pass
class OSError(Error):
""" `OSError` class, derived from `Error` """
def __init__(self, errno, strerror):
self.errno = errno
self.strerror = strerror

def __str__(self):
return '[Errno {0}] {1}'.format(self.errno, self.strerror)


class PermissionError(Error):
""" `PermissionError` class, derived from `Error` """
class InterruptedOrTimeoutError(OSError):
""" `InterruptedOrTimeoutError` class, derived from `OSError` """
pass

class PermissionDeniedError(Error):
""" deal with EACCES related. """

class PermissionError(OSError):
""" `PermissionError` class, derived from `OSError` """
pass

class ObjectNotFound(Error):
""" `ObjectNotFound` class, derived from `Error` """

class PermissionDeniedError(OSError):
""" deal with EACCES related. """
pass


class NoData(Error):
""" `NoData` class, derived from `Error` """
class ObjectNotFound(OSError):
""" `ObjectNotFound` class, derived from `OSError` """
pass


class ObjectExists(Error):
""" `ObjectExists` class, derived from `Error` """
class NoData(OSError):
""" `NoData` class, derived from `OSError` """
pass


class ObjectBusy(Error):
""" `ObjectBusy` class, derived from `Error` """
class ObjectExists(OSError):
""" `ObjectExists` class, derived from `OSError` """
pass


class IOError(Error):
""" `IOError` class, derived from `Error` """
class ObjectBusy(OSError):
""" `ObjectBusy` class, derived from `IOError` """
pass


class NoSpace(Error):
""" `NoSpace` class, derived from `Error` """
class IOError(OSError):
""" `ObjectBusy` class, derived from `OSError` """
pass


class IncompleteWriteError(Error):
""" `IncompleteWriteError` class, derived from `Error` """
class NoSpace(OSError):
""" `NoSpace` class, derived from `OSError` """
pass


Expand All @@ -362,6 +369,7 @@ class IoctxStateError(Error):
""" `IoctxStateError` class, derived from `Error` """
pass


class ObjectStateError(Error):
""" `ObjectStateError` class, derived from `Error` """
pass
Expand All @@ -372,8 +380,8 @@ class LogicError(Error):
pass


class TimedOut(Error):
""" `TimedOut` class, derived from `Error` """
class TimedOut(OSError):
""" `TimedOut` class, derived from `OSError` """
pass


Expand Down Expand Up @@ -419,9 +427,9 @@ cdef make_ex(ret, msg):
"""
ret = abs(ret)
if ret in errno_to_exception:
return errno_to_exception[ret](msg)
return errno_to_exception[ret](ret, msg)
else:
return Error(msg + (": error code %d" % ret))
return Error(ret, msg + (": error code %d" % ret))


# helper to specify an optional argument, where in addition to `cls`, `None`
Expand Down
44 changes: 27 additions & 17 deletions src/pybind/rbd/rbd.pyx
Expand Up @@ -381,66 +381,76 @@ class Error(Exception):
pass


class PermissionError(Error):
class OSError(Error):
""" `OSError` class, derived from `Error` """
def __init__(self, errno, strerror):
self.errno = errno
self.strerror = strerror

def __str__(self):
return '[Errno {0}] {1}'.format(self.errno, self.strerror)


class PermissionError(OSError):
pass


class ImageNotFound(Error):
class ImageNotFound(OSError):
pass


class ImageExists(Error):
class ImageExists(OSError):
pass


class IOError(Error):
class IOError(OSError):
pass


class NoSpace(Error):
class NoSpace(OSError):
pass


class IncompleteWriteError(Error):
class IncompleteWriteError(OSError):
pass


class InvalidArgument(Error):
class InvalidArgument(OSError):
pass


class LogicError(Error):
pass


class ReadOnlyImage(Error):
class ReadOnlyImage(OSError):
pass


class ImageBusy(Error):
class ImageBusy(OSError):
pass


class ImageHasSnapshots(Error):
class ImageHasSnapshots(OSError):
pass


class FunctionNotSupported(Error):
class FunctionNotSupported(OSError):
pass


class ArgumentOutOfRange(Error):
class ArgumentOutOfRange(OSError):
pass


class ConnectionShutdown(Error):
class ConnectionShutdown(OSError):
pass


class Timeout(Error):
class Timeout(OSError):
pass

class DiskQuotaExceeded(Error):
class DiskQuotaExceeded(OSError):
pass


Expand Down Expand Up @@ -473,9 +483,9 @@ cdef make_ex(ret, msg):
"""
ret = abs(ret)
if ret in errno_to_exception:
return errno_to_exception[ret](msg)
return errno_to_exception[ret](ret, msg)
else:
return Error(msg + (": error code %d" % ret))
return Error(ret, msg + (": error code %d" % ret))


cdef rados_ioctx_t convert_ioctx(rados.Ioctx ioctx) except? NULL:
Expand Down
18 changes: 14 additions & 4 deletions src/pybind/rgw/rgw.pyx
Expand Up @@ -183,11 +183,21 @@ class Error(Exception):
pass


class PermissionError(Error):
class OSError(Error):
""" `OSError` class, derived from `Error` """
def __init__(self, errno, strerror):
self.errno = errno
self.strerror = strerror

def __str__(self):
return '[Errno {0}] {1}'.format(self.errno, self.strerror)


class PermissionError(OSError):
pass


class ObjectNotFound(Error):
class ObjectNotFound(OSError):
pass


Expand All @@ -199,7 +209,7 @@ class ObjectExists(Error):
pass


class IOError(Error):
class IOError(OSError):
pass


Expand Down Expand Up @@ -299,7 +309,7 @@ cdef make_ex(ret, msg):
"""
ret = abs(ret)
if ret in errno_to_exception:
return errno_to_exception[ret](msg)
return errno_to_exception[ret](ret, msg)
else:
return Error(msg + (": error code %d" % ret))

Expand Down
2 changes: 1 addition & 1 deletion src/test/pybind/test_rados.py
Expand Up @@ -11,7 +11,7 @@
import sys

# Are we running Python 2.x
_python2 = sys.hexversion < 0x03000000
_python2 = sys.version_info[0] < 3

def test_rados_init_error():
assert_raises(Error, Rados, conffile='', rados_id='admin',
Expand Down

0 comments on commit 0fd1689

Please sign in to comment.