| """ | |
| Wheel command-line utility. | |
| """ | |
| from __future__ import annotations | |
| import argparse | |
| import os | |
| import sys | |
| from argparse import ArgumentTypeError | |
| class WheelError(Exception): | |
| pass | |
| def unpack_f(args): | |
| from .unpack import unpack | |
| unpack(args.wheelfile, args.dest) | |
| def pack_f(args): | |
| from .pack import pack | |
| pack(args.directory, args.dest_dir, args.build_number) | |
| def convert_f(args): | |
| from .convert import convert | |
| convert(args.files, args.dest_dir, args.verbose) | |
| def tags_f(args): | |
| from .tags import tags | |
| names = ( | |
| tags( | |
| wheel, | |
| args.python_tag, | |
| args.abi_tag, | |
| args.platform_tag, | |
| args.build, | |
| args.remove, | |
| ) | |
| for wheel in args.wheel | |
| ) | |
| for name in names: | |
| print(name) | |
| def version_f(args): | |
| from .. import __version__ | |
| print("wheel %s" % __version__) | |
| def parse_build_tag(build_tag: str) -> str: | |
| if build_tag and not build_tag[0].isdigit(): | |
| raise ArgumentTypeError("build tag must begin with a digit") | |
| elif "-" in build_tag: | |
| raise ArgumentTypeError("invalid character ('-') in build tag") | |
| return build_tag | |
| TAGS_HELP = """\ | |
| Make a new wheel with given tags. Any tags unspecified will remain the same. | |
| Starting the tags with a "+" will append to the existing tags. Starting with a | |
| "-" will remove a tag (use --option=-TAG syntax). Multiple tags can be | |
| separated by ".". The original file will remain unless --remove is given. The | |
| output filename(s) will be displayed on stdout for further processing. | |
| """ | |
| def parser(): | |
| p = argparse.ArgumentParser() | |
| s = p.add_subparsers(help="commands") | |
| unpack_parser = s.add_parser("unpack", help="Unpack wheel") | |
| unpack_parser.add_argument( | |
| "--dest", "-d", help="Destination directory", default="." | |
| ) | |
| unpack_parser.add_argument("wheelfile", help="Wheel file") | |
| unpack_parser.set_defaults(func=unpack_f) | |
| repack_parser = s.add_parser("pack", help="Repack wheel") | |
| repack_parser.add_argument("directory", help="Root directory of the unpacked wheel") | |
| repack_parser.add_argument( | |
| "--dest-dir", | |
| "-d", | |
| default=os.path.curdir, | |
| help="Directory to store the wheel (default %(default)s)", | |
| ) | |
| repack_parser.add_argument( | |
| "--build-number", help="Build tag to use in the wheel name" | |
| ) | |
| repack_parser.set_defaults(func=pack_f) | |
| convert_parser = s.add_parser("convert", help="Convert egg or wininst to wheel") | |
| convert_parser.add_argument("files", nargs="*", help="Files to convert") | |
| convert_parser.add_argument( | |
| "--dest-dir", | |
| "-d", | |
| default=os.path.curdir, | |
| help="Directory to store wheels (default %(default)s)", | |
| ) | |
| convert_parser.add_argument("--verbose", "-v", action="store_true") | |
| convert_parser.set_defaults(func=convert_f) | |
| tags_parser = s.add_parser( | |
| "tags", help="Add or replace the tags on a wheel", description=TAGS_HELP | |
| ) | |
| tags_parser.add_argument("wheel", nargs="*", help="Existing wheel(s) to retag") | |
| tags_parser.add_argument( | |
| "--remove", | |
| action="store_true", | |
| help="Remove the original files, keeping only the renamed ones", | |
| ) | |
| tags_parser.add_argument( | |
| "--python-tag", metavar="TAG", help="Specify an interpreter tag(s)" | |
| ) | |
| tags_parser.add_argument("--abi-tag", metavar="TAG", help="Specify an ABI tag(s)") | |
| tags_parser.add_argument( | |
| "--platform-tag", metavar="TAG", help="Specify a platform tag(s)" | |
| ) | |
| tags_parser.add_argument( | |
| "--build", type=parse_build_tag, metavar="BUILD", help="Specify a build tag" | |
| ) | |
| tags_parser.set_defaults(func=tags_f) | |
| version_parser = s.add_parser("version", help="Print version and exit") | |
| version_parser.set_defaults(func=version_f) | |
| help_parser = s.add_parser("help", help="Show this help") | |
| help_parser.set_defaults(func=lambda args: p.print_help()) | |
| return p | |
| def main(): | |
| p = parser() | |
| args = p.parse_args() | |
| if not hasattr(args, "func"): | |
| p.print_help() | |
| else: | |
| try: | |
| args.func(args) | |
| return 0 | |
| except WheelError as e: | |
| print(e, file=sys.stderr) | |
| return 1 | |