From 72dc17ce327dc6422a2d62348b2c42971d364b6b Mon Sep 17 00:00:00 2001 From: Ricardo Dias Date: Fri, 23 Mar 2018 14:51:44 +0000 Subject: [PATCH] pybind/rbd: fix python 3 str to bytes problems Fixes: http://tracker.ceph.com/issues/23609 Signed-off-by: Ricardo Dias --- src/pybind/rbd/rbd.pyx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/pybind/rbd/rbd.pyx b/src/pybind/rbd/rbd.pyx index d0fe89dc3e160..ce120fae2307c 100644 --- a/src/pybind/rbd/rbd.pyx +++ b/src/pybind/rbd/rbd.pyx @@ -678,7 +678,9 @@ def cstr(val, name, encoding="utf-8", opt=False): return None if isinstance(val, bytes): return val - elif isinstance(val, unicode): + elif isinstance(val, str): + return val.encode(encoding) + elif sys.version_info < (3, 0) and isinstance(val, unicode): return val.encode(encoding) else: raise InvalidArgument('%s must be a string' % name) @@ -863,6 +865,7 @@ class RBD(object): :raises: :class:`FunctionNotSupported` """ name = cstr(name, 'name') + data_pool = cstr(data_pool, 'data_pool', opt=True) cdef: rados_ioctx_t _ioctx = convert_ioctx(ioctx) char *_name = name @@ -946,6 +949,7 @@ class RBD(object): p_snapname = cstr(p_snapname, 'p_snapname') p_name = cstr(p_name, 'p_name') c_name = cstr(c_name, 'c_name') + data_pool = cstr(data_pool, 'data_pool', opt=True) cdef: rados_ioctx_t _p_ioctx = convert_ioctx(p_ioctx) rados_ioctx_t _c_ioctx = convert_ioctx(c_ioctx) @@ -2215,6 +2219,7 @@ cdef class Image(object): :raises: :class:`ArgumentOutOfRange` """ dest_name = cstr(dest_name, 'dest_name') + data_pool = cstr(data_pool, 'data_pool', opt=True) cdef: rados_ioctx_t _dest_ioctx = convert_ioctx(dest_ioctx) char *_dest_name = dest_name @@ -2270,6 +2275,7 @@ cdef class Image(object): :raises: :class:`ArgumentOutOfRange` """ dest_name = cstr(dest_name, 'dest_name') + data_pool = cstr(data_pool, 'data_pool', opt=True) cdef: rados_ioctx_t _dest_ioctx = convert_ioctx(dest_ioctx) char *_dest_name = dest_name