from libc.stdlib cimport malloc, realloc, free
from types cimport *
-IF BUILD_DOC:
- include "mock_cephfs.pxi"
- cdef class Rados:
- cdef:
- rados_t cluster
-ELSE:
- from c_cephfs cimport *
- from rados cimport Rados
+{{if BUILD_DOC}}
+include "mock_cephfs.pxi"
+cdef class Rados:
+ cdef:
+ rados_t cluster
+{{else}}
+from c_cephfs cimport *
+from rados cimport Rados
+{{endif}}
from collections import namedtuple, deque
from datetime import datetime
try:
from Cython.Build import cythonize
from Cython.Distutils import build_ext
+ from Cython import Tempita
cmdclass = {'build_ext': build_ext}
except ImportError:
source = "cephfs.c"
else:
- source = "cephfs.pyx"
+ # Process Tempita template
+ source_pyx = os.path.join(
+ os.path.dirname(os.path.abspath(__file__)),
+ "cephfs.pyx"
+ )
+
+ # Read the template from source
+ with open(source_pyx) as f:
+ template_content = f.read()
+
+ # Process the template with cython_constants
+ processed = Tempita.sub(template_content, **cython_constants)
+
+ # Write processed output to current working directory
+ # (which is the build directory when invoked by CMake)
+ output_pyx = "cephfs_processed.pyx"
+
+ with open(output_pyx, 'w') as f:
+ f.write(processed)
+
+ source = output_pyx
# Disable cythonification if we're not really building anything
if (len(sys.argv) >= 2 and
#
# Copyright 2016 Mehdi Abaakouk <sileht@redhat.com>
-IF BUILD_DOC:
- cdef:
- ctypedef void* rados_t
- ctypedef void* rados_config_t
- ctypedef void* rados_ioctx_t
-ELSE:
- cdef extern from "rados/librados.h" nogil:
- ctypedef void* rados_t
- ctypedef void* rados_config_t
- ctypedef void* rados_ioctx_t
+cdef extern from *:
+ """
+ #ifdef BUILD_DOC
+ typedef void* rados_t;
+ typedef void* rados_config_t;
+ typedef void* rados_ioctx_t;
+ #else
+ #include "rados/librados.h"
+ #endif
+ """
+ ctypedef void* rados_t
+ ctypedef void* rados_config_t
+ ctypedef void* rados_ioctx_t
cdef class Rados(object):
from libc cimport errno
from libc.stdint cimport *
from libc.stdlib cimport malloc, realloc, free
-IF BUILD_DOC:
- include "mock_rados.pxi"
-ELSE:
- from c_rados cimport *
+
+{{if BUILD_DOC}}
+include "mock_rados.pxi"
+{{else}}
+from c_rados cimport *
+{{endif}}
import threading
import time
"RADOS connection was shutdown (%s)" % message, errno)
-IF UNAME_SYSNAME == "FreeBSD":
- cdef errno_to_exception = {
- errno.EPERM : PermissionError,
- errno.ENOENT : ObjectNotFound,
- errno.EIO : IOError,
- errno.ENOSPC : NoSpace,
- errno.EEXIST : ObjectExists,
- errno.EBUSY : ObjectBusy,
- errno.ENOATTR : NoData,
- errno.EINTR : InterruptedOrTimeoutError,
- errno.ETIMEDOUT : TimedOut,
- errno.EACCES : PermissionDeniedError,
- errno.EINPROGRESS : InProgress,
- errno.EISCONN : IsConnected,
- errno.EINVAL : InvalidArgumentError,
- errno.ENOTCONN : NotConnected,
- errno.ESHUTDOWN : ConnectionShutdown,
- }
-ELSE:
- cdef errno_to_exception = {
- errno.EPERM : PermissionError,
- errno.ENOENT : ObjectNotFound,
- errno.EIO : IOError,
- errno.ENOSPC : NoSpace,
- errno.EEXIST : ObjectExists,
- errno.EBUSY : ObjectBusy,
- errno.ENODATA : NoData,
- errno.EINTR : InterruptedOrTimeoutError,
- errno.ETIMEDOUT : TimedOut,
- errno.EACCES : PermissionDeniedError,
- errno.EINPROGRESS : InProgress,
- errno.EISCONN : IsConnected,
- errno.EINVAL : InvalidArgumentError,
- errno.ENOTCONN : NotConnected,
- errno.ESHUTDOWN : ConnectionShutdown,
- }
+# Build errno mapping based on platform
+# FreeBSD uses ENOATTR while Linux uses ENODATA
+{{if UNAME_SYSNAME == "FreeBSD"}}
+cdef errno_to_exception = {
+ errno.EPERM : PermissionError,
+ errno.ENOENT : ObjectNotFound,
+ errno.EIO : IOError,
+ errno.ENOSPC : NoSpace,
+ errno.EEXIST : ObjectExists,
+ errno.EBUSY : ObjectBusy,
+ errno.ENOATTR : NoData,
+ errno.EINTR : InterruptedOrTimeoutError,
+ errno.ETIMEDOUT : TimedOut,
+ errno.EACCES : PermissionDeniedError,
+ errno.EINPROGRESS : InProgress,
+ errno.EISCONN : IsConnected,
+ errno.EINVAL : InvalidArgumentError,
+ errno.ENOTCONN : NotConnected,
+ errno.ESHUTDOWN : ConnectionShutdown,
+}
+{{else}}
+cdef errno_to_exception = {
+ errno.EPERM : PermissionError,
+ errno.ENOENT : ObjectNotFound,
+ errno.EIO : IOError,
+ errno.ENOSPC : NoSpace,
+ errno.EEXIST : ObjectExists,
+ errno.EBUSY : ObjectBusy,
+ errno.ENODATA : NoData,
+ errno.EINTR : InterruptedOrTimeoutError,
+ errno.ETIMEDOUT : TimedOut,
+ errno.EACCES : PermissionDeniedError,
+ errno.EINPROGRESS : InProgress,
+ errno.EISCONN : IsConnected,
+ errno.EINVAL : InvalidArgumentError,
+ errno.ENOTCONN : NotConnected,
+ errno.ESHUTDOWN : ConnectionShutdown,
+}
+{{endif}}
cdef make_ex(ret: int, msg: str):
from itertools import filterfalse, takewhile
import os
+import platform
import shutil
import sys
import tempfile
if 'BUILD_DOC' in os.environ or 'READTHEDOCS' in os.environ:
- ext_args = {}
- cython_constants = dict(BUILD_DOC=True)
+ ext_args = dict(extra_compile_args=['-DBUILD_DOC'])
+ cython_constants = dict(BUILD_DOC=True, UNAME_SYSNAME=platform.system())
elif check_sanity():
ext_args = get_python_flags(['rados'])
- cython_constants = dict(BUILD_DOC=False)
+ cython_constants = dict(BUILD_DOC=False, UNAME_SYSNAME=platform.system())
else:
sys.exit(1)
try:
from Cython.Build import cythonize
from Cython.Distutils import build_ext
+ from Cython import Tempita
cmdclass = {'build_ext': build_ext}
except ImportError:
source = "rados.c"
else:
- source = "rados.pyx"
+ # Process Tempita template
+ source_pyx = os.path.join(
+ os.path.dirname(os.path.abspath(__file__)),
+ "rados.pyx"
+ )
+
+ # Read the template from source
+ with open(source_pyx) as f:
+ template_content = f.read()
+
+ # Process the template with cython_constants
+ processed = Tempita.sub(template_content, **cython_constants)
+
+ # Write processed output to current working directory
+ # (which is the build directory when invoked by CMake)
+ output_pyx = "rados_processed.pyx"
+
+ with open(output_pyx, 'w') as f:
+ f.write(processed)
+
+ source = output_pyx
# Disable cythonification if we're not really building anything
if (len(sys.argv) >= 2 and
from itertools import chain
import time
-IF BUILD_DOC:
- include "mock_rbd.pxi"
-ELSE:
- from c_rbd cimport *
- cimport rados
+{{if BUILD_DOC}}
+include "mock_rbd.pxi"
+{{else}}
+from c_rbd cimport *
+cimport rados
+{{endif}}
cdef extern from "Python.h":
return OSError(msg, errno=ret)
-IF BUILD_DOC:
- cdef rados_t convert_rados(rados) nogil:
- return <rados_t>0
+{{if BUILD_DOC}}
+cdef rados_t convert_rados(rados) nogil:
+ return <rados_t>0
- cdef rados_ioctx_t convert_ioctx(ioctx) nogil:
- return <rados_ioctx_t>0
-ELSE:
- cdef rados_t convert_rados(rados.Rados rados) except? NULL:
- return <rados_t>rados.cluster
+cdef rados_ioctx_t convert_ioctx(ioctx) nogil:
+ return <rados_ioctx_t>0
+{{else}}
+cdef rados_t convert_rados(rados.Rados rados) except? NULL:
+ return <rados_t>rados.cluster
- cdef rados_ioctx_t convert_ioctx(rados.Ioctx ioctx) except? NULL:
- return <rados_ioctx_t>ioctx.io
+cdef rados_ioctx_t convert_ioctx(rados.Ioctx ioctx) except? NULL:
+ return <rados_ioctx_t>ioctx.io
+{{endif}}
cdef int progress_callback(uint64_t offset, uint64_t total, void* ptr) with gil:
return (<object>ptr)(offset, total)
from Cython.Build import cythonize
from Cython.Distutils import build_ext
from Cython import __version__ as cython_version
+ from Cython import Tempita
cmdclass = {'build_ext': build_ext}
source = "rbd.c"
else:
- source = "rbd.pyx"
+ # Process Tempita template
+ source_pyx = os.path.join(
+ os.path.dirname(os.path.abspath(__file__)),
+ "rbd.pyx"
+ )
+
+ # Read the template from source
+ with open(source_pyx) as f:
+ template_content = f.read()
+
+ # Process the template with cython_constants
+ processed = Tempita.sub(template_content, **cython_constants)
+
+ # Write processed output to current working directory
+ # (which is the build directory when invoked by CMake)
+ source = "rbd_processed.pyx"
+
+ with open(source, 'w') as f:
+ f.write(processed)
# Disable cythonification if we're not really building anything
if (len(sys.argv) >= 2 and
from cstat cimport stat
cimport libcpp
-IF BUILD_DOC:
- include "mock_rgw.pxi"
-ELSE:
- from c_rgw cimport *
- cimport rados
+{{if BUILD_DOC}}
+include "mock_rgw.pxi"
+{{else}}
+from c_rgw cimport *
+cimport rados
+{{endif}}
from collections import namedtuple
from datetime import datetime
class OutOfRange(Error):
pass
-IF UNAME_SYSNAME == "FreeBSD":
- cdef errno_to_exception = {
- errno.EPERM : PermissionError,
- errno.ENOENT : ObjectNotFound,
- errno.EIO : IOError,
- errno.ENOSPC : NoSpace,
- errno.EEXIST : ObjectExists,
- errno.ENOATTR : NoData,
- errno.EINVAL : InvalidValue,
- errno.EOPNOTSUPP : OperationNotSupported,
- errno.ERANGE : OutOfRange,
- errno.EWOULDBLOCK: WouldBlock,
- }
-ELSE:
- cdef errno_to_exception = {
- errno.EPERM : PermissionError,
- errno.ENOENT : ObjectNotFound,
- errno.EIO : IOError,
- errno.ENOSPC : NoSpace,
- errno.EEXIST : ObjectExists,
- errno.ENODATA : NoData,
- errno.EINVAL : InvalidValue,
- errno.EOPNOTSUPP : OperationNotSupported,
- errno.ERANGE : OutOfRange,
- errno.EWOULDBLOCK: WouldBlock,
- }
+
+# Build errno mapping based on platform
+# FreeBSD uses ENOATTR while Linux uses ENODATA
+{{if UNAME_SYSNAME == "FreeBSD"}}
+cdef errno_to_exception = {
+ errno.EPERM : PermissionError,
+ errno.ENOENT : ObjectNotFound,
+ errno.EIO : IOError,
+ errno.ENOSPC : NoSpace,
+ errno.EEXIST : ObjectExists,
+ errno.ENOATTR : NoData,
+ errno.EINVAL : InvalidValue,
+ errno.EOPNOTSUPP : OperationNotSupported,
+ errno.ERANGE : OutOfRange,
+ errno.EWOULDBLOCK: WouldBlock,
+}
+{{else}}
+cdef errno_to_exception = {
+ errno.EPERM : PermissionError,
+ errno.ENOENT : ObjectNotFound,
+ errno.EIO : IOError,
+ errno.ENOSPC : NoSpace,
+ errno.EEXIST : ObjectExists,
+ errno.ENODATA : NoData,
+ errno.EINVAL : InvalidValue,
+ errno.EOPNOTSUPP : OperationNotSupported,
+ errno.ERANGE : OutOfRange,
+ errno.EWOULDBLOCK: WouldBlock,
+}
+{{endif}}
cdef class FileHandle(object):
shutil.rmtree(tmp_dir)
+import platform
+
if 'BUILD_DOC' in os.environ or 'READTHEDOCS' in os.environ:
ext_args = {}
- cython_constants = dict(BUILD_DOC=True)
+ cython_constants = dict(BUILD_DOC=True, UNAME_SYSNAME=platform.system())
cythonize_args = dict(compile_time_env=cython_constants)
elif check_sanity():
ext_args = get_python_flags(['rados', 'rgw'])
- cython_constants = dict(BUILD_DOC=False)
+ cython_constants = dict(BUILD_DOC=False, UNAME_SYSNAME=platform.system())
include_path = [os.path.join(os.path.dirname(__file__), "..", "rados")]
cythonize_args = dict(compile_time_env=cython_constants,
include_path=include_path)
try:
from Cython.Build import cythonize
from Cython.Distutils import build_ext
+ from Cython import Tempita
cmdclass = {'build_ext': build_ext}
except ImportError:
source = "rgw.c"
else:
- source = "rgw.pyx"
+ # Process Tempita template
+ source_pyx = os.path.join(
+ os.path.dirname(os.path.abspath(__file__)),
+ "rgw.pyx"
+ )
+
+ # Read the template from source
+ with open(source_pyx) as f:
+ template_content = f.read()
+
+ # Process the template with cython_constants
+ processed = Tempita.sub(template_content, **cython_constants)
+
+ # Write processed output to current working directory
+ # (which is the build directory when invoked by CMake)
+ output_pyx = "rgw_processed.pyx"
+
+ with open(output_pyx, 'w') as f:
+ f.write(processed)
+
+ source = output_pyx
# Disable cythonification if we're not really building anything
if (len(sys.argv) >= 2 and