114 lines
3.8 KiB
Python
Executable File
114 lines
3.8 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from pathlib import Path
|
|
import collections
|
|
import hashlib
|
|
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"))
|
|
add_to_root(Path("CHANGELOG.md"))
|
|
add_to_root(Path("flamenco_worker/resources/merge-exr.blend"))
|
|
add_to_root(Path("flamenco_worker/resources/exr_sequence_to_jpeg.py"))
|
|
|
|
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))
|
|
|
|
# Compute SHA256 checksum of the produced zip file.
|
|
hasher = hashlib.sha256()
|
|
blocksize = 65536
|
|
with zip_name.open(mode="rb") as infile:
|
|
buf = infile.read(blocksize)
|
|
while len(buf) > 0:
|
|
hasher.update(buf)
|
|
buf = infile.read(blocksize)
|
|
checksum_path = zip_name.with_suffix(".sha256")
|
|
log.info("Writing SHA256 checksum to %s", checksum_path)
|
|
with checksum_path.open(mode="w") as shafile:
|
|
print("%s %s" % (hasher.hexdigest(), zip_name.name), file=shafile)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
setuptools.setup(
|
|
cmdclass={"zip": ZipCommand},
|
|
name="flamenco-worker",
|
|
version="2.6",
|
|
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", "CHANGELOG.md"])],
|
|
license="GPL",
|
|
classifiers=[
|
|
"Operating System :: OS Independent",
|
|
"Programming Language :: Python",
|
|
"Programming Language :: Python :: 3.7",
|
|
],
|
|
package_data={"flamenco_worker": ["merge-exr.blend"]},
|
|
install_requires=[
|
|
"attrs >=16.3.0",
|
|
"requests>=2.12.4",
|
|
"pyjwt>=1.7.1",
|
|
],
|
|
entry_points={
|
|
"console_scripts": [
|
|
"flamenco-worker = flamenco_worker.cli:main",
|
|
]
|
|
},
|
|
zip_safe=False, # due to the bundled merge-exr.blend file.
|
|
)
|