aboutsummaryrefslogtreecommitdiff
path: root/NvCloth/scripts/packman/win-bootstrap/install_package.py
diff options
context:
space:
mode:
Diffstat (limited to 'NvCloth/scripts/packman/win-bootstrap/install_package.py')
-rw-r--r--NvCloth/scripts/packman/win-bootstrap/install_package.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/NvCloth/scripts/packman/win-bootstrap/install_package.py b/NvCloth/scripts/packman/win-bootstrap/install_package.py
new file mode 100644
index 0000000..730962a
--- /dev/null
+++ b/NvCloth/scripts/packman/win-bootstrap/install_package.py
@@ -0,0 +1,39 @@
+import logging
+import zipfile
+import tempfile
+import sys
+import shutil
+
+__author__ = 'hfannar'
+logging.basicConfig(level=logging.WARNING, format="%(message)s")
+logger = logging.getLogger('install_package')
+
+
+class TemporaryDirectory:
+ def __init__(self):
+ self.path = None
+
+ def __enter__(self):
+ self.path = tempfile.mkdtemp()
+ return self.path
+
+ def __exit__(self, type, value, traceback ):
+ # Remove temporary data created
+ shutil.rmtree(self.path)
+
+
+def install_package(package_src_path, package_dst_path):
+ with zipfile.ZipFile(package_src_path, allowZip64=True) as zip_file, TemporaryDirectory() as temp_dir:
+ zip_file.extractall(temp_dir)
+ # Recursively copy (temp_dir will be automatically cleaned up on exit)
+ try:
+ # Recursive copy is needed because both package name and version folder could be missing in
+ # target directory:
+ shutil.copytree(temp_dir, package_dst_path)
+ except OSError, exc:
+ logger.warning("Directory %s already present, packaged installation aborted" % package_dst_path)
+ else:
+ logger.info("Package successfully installed to %s" % package_dst_path)
+
+
+install_package(sys.argv[1], sys.argv[2]) \ No newline at end of file