diff --git a/setup.py b/setup.py index 4cf4294e2791a2298fa94aa517b587ae49f3d9e1..b185e4df4aa4cfd4b49e42fff160dc4ffd4d4e26 100755 --- a/setup.py +++ b/setup.py @@ -1,9 +1,75 @@ #!/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',