Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'io_blend_utils/install_whl.py')
-rwxr-xr-xio_blend_utils/install_whl.py129
1 files changed, 129 insertions, 0 deletions
diff --git a/io_blend_utils/install_whl.py b/io_blend_utils/install_whl.py
new file mode 100755
index 00000000..e1af5a48
--- /dev/null
+++ b/io_blend_utils/install_whl.py
@@ -0,0 +1,129 @@
+#!/usr/bin/env python3.5
+
+"""This Python script installs a new version of BAM here."""
+
+import pathlib
+
+my_dir = pathlib.Path(__file__).absolute().parent
+
+
+def main():
+ import argparse
+
+ parser = argparse.ArgumentParser(description="This script installs a new version of BAM here.")
+ parser.add_argument('wheelfile', type=pathlib.Path,
+ help='Location of the wheel file to install.')
+
+ args = parser.parse_args()
+ install(args.wheelfile.expanduser())
+
+
+def install(wheelfile: pathlib.Path):
+ import json
+ import os
+ import re
+
+ assert_is_zipfile(wheelfile)
+ wipe_preexisting()
+
+ print('Installing %s' % wheelfile)
+ target = my_dir / 'blender_bam-unpacked.whl'
+ print('Creating target directory %s' % target)
+ target.mkdir(parents=True)
+
+ extract(wheelfile, target)
+ copy_files(target)
+
+ version = find_version(target)
+ print('This is BAM version %s' % (version, ))
+ update_init_file(version)
+
+ print('Done installing %s' % wheelfile.name)
+
+
+def assert_is_zipfile(wheelfile: pathlib.Path):
+ import zipfile
+
+ # In Python 3.6 conversion to str is not necessary any more:
+ if not zipfile.is_zipfile(str(wheelfile)):
+ log.error('%s is not a valid ZIP file!' % wheelfile)
+ raise SystemExit()
+
+
+def wipe_preexisting():
+ import shutil
+
+ for existing in sorted(my_dir.glob('blender_bam-*.whl')):
+ if existing.is_dir():
+ print('Wiping pre-existing directory %s' % existing)
+ # In Python 3.6 conversion to str is not necessary any more:
+ shutil.rmtree(str(existing))
+ else:
+ print('Wiping pre-existing file %s' % existing)
+ existing.unlink()
+
+
+def extract(wheelfile: pathlib.Path, target: pathlib.Path):
+ import os
+ import zipfile
+
+ # In Python 3.6 conversion to str is not necessary any more:
+ os.chdir(str(target))
+
+ print('Extracting wheel')
+ # In Python 3.6 conversion to str is not necessary any more:
+ with zipfile.ZipFile(str(wheelfile)) as whlzip:
+ whlzip.extractall()
+
+ os.chdir(str(my_dir))
+
+
+def copy_files(target: pathlib.Path):
+ import shutil
+
+ print('Copying some files from wheel to other locations')
+ # In Python 3.6 conversion to str is not necessary any more:
+ shutil.copy(str(target / 'bam' / 'blend' / 'blendfile_path_walker.py'), './blend')
+ shutil.copy(str(target / 'bam' / 'blend' / 'blendfile.py'), './blend')
+ shutil.copy(str(target / 'bam' / 'utils' / 'system.py'), './utils')
+
+
+def find_version(target: pathlib.Path):
+ import json
+ import shutil
+
+ print('Obtaining version number from wheel.')
+
+ distinfo = next(target.glob('*.dist-info'))
+ with (distinfo / 'metadata.json').open() as infofile:
+ metadata = json.load(infofile)
+
+ print('Wiping dist-info directory.')
+ shutil.rmtree(str(distinfo))
+
+ # "1.2.3" -> (1, 2, 3)
+ str_ver = metadata['version']
+ return tuple(int(x) for x in str_ver.split('.'))
+
+
+def update_init_file(version: tuple):
+ import os
+ import re
+
+ print('Updating __init__.py to have the correct version.')
+ version_line_re = re.compile(r'^\s+[\'"]version[\'"]: (\([0-9,]+\)),')
+
+ with open('__init__.py', 'r') as infile, \
+ open('__init__.py~whl~installer~', 'w') as outfile:
+
+ for line in infile:
+ if version_line_re.match(line):
+ outfile.write(" 'version': %s,%s" % (version, os.linesep))
+ else:
+ outfile.write(line)
+
+ os.unlink('__init__.py')
+ os.rename('__init__.py~whl~installer~', '__init__.py')
+
+if __name__ == '__main__':
+ main()