]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind: restore original API for backwards compatibility 15932/head
authorJason Dillaman <dillaman@redhat.com>
Mon, 26 Jun 2017 23:13:58 +0000 (19:13 -0400)
committerJason Dillaman <dillaman@redhat.com>
Mon, 26 Jun 2017 23:17:36 +0000 (19:17 -0400)
Fixes: http://tracker.ceph.com/issues/20421
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/pybind/rados/rados.pyx
src/pybind/rbd/rbd.pyx

index 9e8430e246eb55e23c8a850f22de5ecd0309501e..132da45ad9085846e6bc90caac4486db3fd81092 100644 (file)
@@ -312,13 +312,18 @@ class InvalidArgumentError(Error):
 
 class OSError(Error):
     """ `OSError` class, derived from `Error` """
-    def __init__(self, errno, strerror):
+    def __init__(self, message, errno=None):
+        super(OSError, self).__init__(message)
         self.errno = errno
-        self.strerror = strerror
 
     def __str__(self):
-        return '[Errno {0}] {1}'.format(self.errno, self.strerror)
+        msg = super(OSError, self).__str__()
+        if self.errno is None:
+            return msg
+        return '[errno {0}] {1}'.format(self.errno, msg)
 
+    def __reduce__(self):
+        return (self.__class__, (self.message, self.errno))
 
 class InterruptedOrTimeoutError(OSError):
     """ `InterruptedOrTimeoutError` class, derived from `OSError` """
@@ -432,9 +437,9 @@ cdef make_ex(ret, msg):
     """
     ret = abs(ret)
     if ret in errno_to_exception:
-        return errno_to_exception[ret](ret, msg)
+        return errno_to_exception[ret](msg, errno=ret)
     else:
-        return Error(ret, msg + (": error code %d" % ret))
+        return OSError(msg, errno=ret)
 
 
 # helper to specify an optional argument, where in addition to `cls`, `None`
index 8de6b3cab844fdbe24d14ec2fae30dd48243f099..f0f52f3cf1b19db1ba094d26257af013da6b1f8b 100644 (file)
@@ -388,15 +388,18 @@ class Error(Exception):
 
 class OSError(Error):
     """ `OSError` class, derived from `Error` """
-    def __init__(self, errno, strerror):
+    def __init__(self, message, errno=None):
+        super(OSError, self).__init__(message)
         self.errno = errno
-        self.strerror = strerror
 
     def __str__(self):
-        return '[Errno {0}] {1}'.format(self.errno, self.strerror)
+        msg = super(OSError, self).__str__()
+        if self.errno is None:
+            return msg
+        return '[errno {0}] {1}'.format(self.errno, msg)
 
     def __reduce__(self):
-        return (self.__class__, (self.errno, self.strerror))
+        return (self.__class__, (self.message, self.errno))
 
 class PermissionError(OSError):
     pass
@@ -490,9 +493,9 @@ cdef make_ex(ret, msg):
     """
     ret = abs(ret)
     if ret in errno_to_exception:
-        return errno_to_exception[ret](ret, msg)
+        return errno_to_exception[ret](msg, errno=ret)
     else:
-        return Error(ret, msg + (": error code %d" % ret))
+        return OSError(msg, errno=ret)
 
 
 cdef rados_ioctx_t convert_ioctx(rados.Ioctx ioctx) except? NULL: