Doa-doa's picture
Upload folder using huggingface_hub
72268ee
import argparse
import os
import sys
from pprint import pprint
from . import __version__, api
def parse_args(parse_this=None):
parser = argparse.ArgumentParser()
parser.add_argument(
"-V",
"--version",
action="version",
help="Show the conda-package-handling version number and exit.",
version=f"conda-package-handling {__version__}",
)
sp = parser.add_subparsers(title="subcommands", dest="subcommand", required=True)
extract_parser = sp.add_parser("extract", help="extract package contents", aliases=["x"])
extract_parser.add_argument("archive_path", help="path to archive to extract")
extract_parser.add_argument(
"--dest",
help="destination folder to extract to. If not set, defaults to"
" package filename minus extension in the same folder as the input archive."
" May be relative path used in tandem with the --prefix flag.",
)
extract_parser.add_argument(
"--prefix",
help="base directory to extract to. Use this to set the base"
" directory, while allowing the folder name to be automatically determined "
"by the input filename. An abspath --prefix with an unset --dest will "
"achieve this.",
)
extract_parser.add_argument(
"--info",
help="If the archive supports separate metadata, this"
" flag extracts only the metadata in the info folder from the "
"package. If the archive does not support separate metadata, this "
"flag has no effect and all files are extracted.",
action="store_true",
)
create_parser = sp.add_parser("create", help="bundle files into a package", aliases=["c"])
create_parser.add_argument(
"prefix",
help="folder of files to bundle. Not strictly required to"
" have conda package metadata, but if conda package metadata isn't "
"present, you'll see a warning and your file will not work as a "
"conda package",
)
create_parser.add_argument(
"out_fn",
help="Filename of archive to be created. Extension determines package type.",
)
create_parser.add_argument(
"--file-list",
help="Path to file containing one relative path per"
" line that should be included in the archive. If not provided, "
"lists all files in the prefix.",
)
create_parser.add_argument("--out-folder", help="Folder to dump final archive to")
convert_parser = sp.add_parser(
"transmute", help="convert from one package type to another", aliases=["t"]
)
convert_parser.add_argument(
"in_file", help="existing file to convert from. Glob patterns accepted."
)
convert_parser.add_argument(
"out_ext",
help="extension of file to convert to. Examples: .tar.bz2, .conda",
)
convert_parser.add_argument("--out-folder", help="Folder to dump final archive to")
convert_parser.add_argument(
"--force", action="store_true", help="Force overwrite existing package"
)
convert_parser.add_argument(
"--processes",
type=int,
help="Max number of processes to use. If not set, defaults to 1.",
)
convert_parser.add_argument(
"--zstd-compression-level",
help=(
"When building v2 packages, set the compression level used by "
"conda-package-handling. Defaults to 19."
),
type=int,
choices=range(1, 23),
default=19,
)
convert_parser.add_argument(
"--zstd-compression-threads",
help=(
"When building v2 packages, set the compression threads used by "
"conda-package-handling. Defaults to 1. -1=automatic."
),
type=int,
default=1,
)
return parser.parse_args(parse_this)
def main(args=None):
args = parse_args(args)
if hasattr(args, "out_folder") and args.out_folder:
args.out_folder = (
os.path.abspath(os.path.normpath(os.path.expanduser(args.out_folder))) + os.sep
)
if args.subcommand in ("extract", "x"):
if args.info:
api.extract(args.archive_path, args.dest, components="info", prefix=args.prefix)
else:
api.extract(args.archive_path, args.dest, prefix=args.prefix)
elif args.subcommand in ("create", "c"):
api.create(args.prefix, args.file_list, args.out_fn, args.out_folder)
elif args.subcommand in ("transmute", "t"):
failed_files = api.transmute(
args.in_file,
args.out_ext,
args.out_folder,
args.processes or 1,
force=args.force,
zstd_compress_level=args.zstd_compression_level,
zstd_compress_threads=args.zstd_compression_threads,
)
if failed_files:
print("failed files:")
pprint(failed_files)
sys.exit(1)
if __name__ == "__main__": # pragma: no cover
main(args=None)