Skip to content
Snippets Groups Projects
setup.py 3.00 KiB
#!/usr/bin/env python

from pathlib import Path
import collections
import setuptools
import sys
import zipfile

from distutils.cmd import Command
from distutils.errors import DistutilsOptionError
from distutils import dir_util, log

sys.dont_write_bytecode = True


# noinspection PyAttributeOutsideInit
class ZipCommand(Command):
    """Ensures that 'setup.py dist' creates a zip file with a wheel and other useful stuff."""

    description = "create a zip with a wheel and other useful files"
    user_options = [
        ('dist-dir=', 'd',
         "directory to put the archive in "
         "[default: dist]"),
    ]

    def initialize_options(self):
        self.dist_dir = None

    def finalize_options(self):
        if self.dist_dir is None:
            self.dist_dir = "dist"

    def run(self):
        self.run_command('bdist_wheel')
        if not self.distribution.dist_files:
            msg = "No dist file created, even though we ran 'bdist_wheel' ourselves."
            raise DistutilsOptionError(msg)

        base_dir = Path(self.distribution.get_fullname())
        zip_base = Path(self.dist_dir) / base_dir
        zip_name = zip_base.with_name(zip_base.name + '.zip')

        log.info('Creating ZIP file %s', zip_name)

        with zipfile.ZipFile(str(zip_name), mode='w') as archive:
            def add_to_root(fname: Path):
                log.info('    adding %s', fname.name)
                archive.write(str(fname), fname.name)

            for command, pyversion, filename in self.distribution.dist_files:
                add_to_root(Path(filename))

            add_to_root(Path('flamenco-worker.cfg'))
            add_to_root(Path('LICENSE.txt'))
            add_to_root(Path('README.md'))

            paths = collections.deque([Path('system-integration')])
            while paths:
                this_path = paths.popleft()
                if this_path.is_dir():
                    paths.extend(this_path.iterdir())
                    continue

                log.info('    adding %s', this_path)
                archive.write(str(this_path), str(this_path))



if __name__ == '__main__':
    setuptools.setup(
        cmdclass={'zip': ZipCommand},
        name='flamenco-worker',
        version='2.0-beta10-worker6',
        description='Flamenco Worker implementation',
        author='Sybren A. Stüvel',
        author_email='sybren@blender.studio',
        packages=setuptools.find_packages(),
        data_files=[('flamenco_worker', ['README.md', 'LICENSE.txt'])],
        license='GPL',
        classifiers=[
            'Operating System :: OS Independent',
            'Programming Language :: Python',
            'Programming Language :: Python :: 3.5',
        ],
        package_data={'flamenco_worker': ['merge-exr.blend']},
        install_requires=[
            'attrs >=16.3.0',
            'requests>=2.12.4',
        ],
        entry_points={'console_scripts': [
            'flamenco-worker = flamenco_worker.cli:main',
        ]},
        zip_safe=False,  # due to the bundled merge-exr.blend file.
    )