|
|
|
import argparse |
|
import glob |
|
import os |
|
from pathlib import Path |
|
from zipfile import ZipFile |
|
|
|
|
|
|
|
|
|
DENY_LIST = [ |
|
|
|
"dbm", |
|
|
|
"curses", |
|
|
|
"tkinter", |
|
"tkinter", |
|
|
|
"test", |
|
"tests", |
|
"idle_test", |
|
"__phello__.foo.py", |
|
|
|
"_bootstrap.py", |
|
"_bootstrap_external.py", |
|
] |
|
|
|
strip_file_dir = "" |
|
|
|
|
|
def remove_prefix(text, prefix): |
|
if text.startswith(prefix): |
|
return text[len(prefix) :] |
|
return text |
|
|
|
|
|
def write_to_zip(file_path, strip_file_path, zf, prepend_str=""): |
|
stripped_file_path = prepend_str + remove_prefix(file_path, strip_file_dir + "/") |
|
path = Path(stripped_file_path) |
|
if path.name in DENY_LIST: |
|
return |
|
zf.write(file_path, stripped_file_path) |
|
|
|
|
|
def main() -> None: |
|
global strip_file_dir |
|
parser = argparse.ArgumentParser(description="Zip py source") |
|
parser.add_argument("paths", nargs="*", help="Paths to zip.") |
|
parser.add_argument( |
|
"--install-dir", "--install_dir", help="Root directory for all output files" |
|
) |
|
parser.add_argument( |
|
"--strip-dir", |
|
"--strip_dir", |
|
help="The absolute directory we want to remove from zip", |
|
) |
|
parser.add_argument( |
|
"--prepend-str", |
|
"--prepend_str", |
|
help="A string to prepend onto all paths of a file in the zip", |
|
default="", |
|
) |
|
parser.add_argument("--zip-name", "--zip_name", help="Output zip name") |
|
|
|
args = parser.parse_args() |
|
|
|
zip_file_name = args.install_dir + "/" + args.zip_name |
|
strip_file_dir = args.strip_dir |
|
prepend_str = args.prepend_str |
|
zf = ZipFile(zip_file_name, mode="w") |
|
|
|
for p in sorted(args.paths): |
|
if os.path.isdir(p): |
|
files = glob.glob(p + "/**/*.py", recursive=True) |
|
for file_path in sorted(files): |
|
|
|
write_to_zip( |
|
file_path, strip_file_dir + "/", zf, prepend_str=prepend_str |
|
) |
|
else: |
|
write_to_zip(p, strip_file_dir + "/", zf, prepend_str=prepend_str) |
|
|
|
|
|
if __name__ == "__main__": |
|
main() |
|
|