Skip to content
Snippets Groups Projects
Commit 96ea5097 authored by Piotr Maślanka's avatar Piotr Maślanka
Browse files

proper handling of Extensions in the list

parent 7d7a33d5
No related branches found
No related tags found
No related merge requests found
def test(x, y):
return x+y
from setuptools import setup, find_packages from setuptools import setup, find_packages
from snakehouse import Multibuild, build 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 = [ cython_multibuilds = [
Multibuild('example_module', ['example_module/test.pyx', 'example_module/test2.pyx', Multibuild('example_module', ['example_module/test.pyx', 'example_module/test2.pyx',
'example_module/test3/test3.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 # 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, ext_modules = build(cython_multibuilds,
compiler_directives={ compiler_directives={
'language_level': '3', 'language_level': '3',
}) })
setup(name='example_module', setup(name='example_module',
version='0.1', version='0.1',
packages=find_packages(include=['example_module']), packages=['example_module', 'example'],
install_requires=[ install_requires=[
'Cython', 'snakehouse' 'Cython', 'snakehouse'
], ],
......
from example_module.test import times_two from example_module.test import times_two
from example_module.test2 import times_three, times_five from example_module.test2 import times_three, times_five
from example_module.test3.test3 import times_four from example_module.test3.test3 import times_four
from example import test
import unittest import unittest
class TestExample(unittest.TestCase): class TestExample(unittest.TestCase):
def test_test(self):
self.assertEqual(test(2, 3), 5)
def test_five(self): def test_five(self):
self.assertEqual(times_five(2), 10) self.assertEqual(times_five(2), 10)
......
import typing as tp
from Cython.Build import cythonize from Cython.Build import cythonize
from setuptools import Extension
from .multibuild import Multibuild
def build(extensions, *args, **kwargs): def build(extensions: tp.List[tp.Union[Multibuild, Extension]], *args, **kwargs):
for multibuild in extensions: returns = []
multibuild.generate() for multi_build in extensions:
return cythonize([ext.for_cythonize() for ext in extensions], *args, **kwargs) if isinstance(multi_build, Extension):
returns.append(multi_build)
else:
multi_build.generate()
returns.append(multi_build.for_cythonize())
return cythonize(returns, *args, **kwargs)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment