diff --git a/example/example.pyx b/example/example.pyx new file mode 100644 index 0000000000000000000000000000000000000000..4dcfb73e3bcb6adfd9e60c79597c93fd2bd57363 --- /dev/null +++ b/example/example.pyx @@ -0,0 +1,2 @@ +def test(x, y): + return x+y diff --git a/example/setup.py b/example/setup.py index ac57f4d215e8c54d95eb98953e8927fd0551c06c..1f05629d2bf9975450fe12189556252f29bd73a3 100644 --- a/example/setup.py +++ b/example/setup.py @@ -1,23 +1,27 @@ from setuptools import setup, find_packages from snakehouse import Multibuild, build +from setuptools import Extension +# note that you can include standard Extension classes in this list, those won't be touched +# and will be directed directly to Cython.Build.cythonize() cython_multibuilds = [ Multibuild('example_module', ['example_module/test.pyx', 'example_module/test2.pyx', 'example_module/test3/test3.pyx', - 'example_module/test_n.c']) + 'example_module/test_n.c']), + Extension('example', ['example.pyx']) ] # first argument is used directly by snakehouse, the rest and **kwargs are passed to -# Cython.Build.cythonize +# Cython.Build.cythonize() ext_modules = build(cython_multibuilds, - compiler_directives={ - 'language_level': '3', - }) + compiler_directives={ + 'language_level': '3', + }) setup(name='example_module', version='0.1', - packages=find_packages(include=['example_module']), + packages=['example_module', 'example'], install_requires=[ 'Cython', 'snakehouse' ], diff --git a/example/tests/test_test.py b/example/tests/test_test.py index b60c3cfe0144c6d56a4c1277ffc1131b7b11a3a2..fdd367512b5014cd1a78b236f9432cb2c0a749d8 100644 --- a/example/tests/test_test.py +++ b/example/tests/test_test.py @@ -1,10 +1,14 @@ from example_module.test import times_two from example_module.test2 import times_three, times_five from example_module.test3.test3 import times_four +from example import test import unittest class TestExample(unittest.TestCase): + def test_test(self): + self.assertEqual(test(2, 3), 5) + def test_five(self): self.assertEqual(times_five(2), 10) diff --git a/snakehouse/build.py b/snakehouse/build.py index 2f2900c9f3e9f42d3d528c99f63ff8ed3b9efcf7..cfc96143daa2bbb389c7315f424b338a46d83b4d 100644 --- a/snakehouse/build.py +++ b/snakehouse/build.py @@ -1,7 +1,15 @@ +import typing as tp from Cython.Build import cythonize +from setuptools import Extension +from .multibuild import Multibuild -def build(extensions, *args, **kwargs): - for multibuild in extensions: - multibuild.generate() - return cythonize([ext.for_cythonize() for ext in extensions], *args, **kwargs) +def build(extensions: tp.List[tp.Union[Multibuild, Extension]], *args, **kwargs): + returns = [] + for multi_build in extensions: + if isinstance(multi_build, Extension): + returns.append(multi_build) + else: + multi_build.generate() + returns.append(multi_build.for_cythonize()) + return cythonize(returns, *args, **kwargs)