mirror of
https://github.com/feder-cr/invisible_playwright.git
synced 2026-06-25 09:28:05 +02:00
fix: __version__ comes from package metadata; add --version flag (#24)
Two bugs reported in #24: 1. `python -m invisible_playwright version` printed the literal "0.1.0" regardless of the installed version. Root cause: __version__ in __init__.py was hardcoded and never bumped when the package version moved past 0.1.0. Fix: read from importlib.metadata so __version__ stays in lockstep with pyproject.toml's `version` field by construction. 2. `python -m invisible_playwright --version` errored with "the following arguments are required: cmd". Root cause: the parser had `required=True` on its subparsers and no top-level --version flag. Fix: add a top-level `--version`/`-V` flag using argparse's standard version action, drop `required=True`, and reroute the "no subcommand" case through parser.error() so the existing test_no_subcommand_errors contract is preserved. 7 new unit tests pin both behaviours so they can't regress silently. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
f208f5262c
commit
66c6b09821
3 changed files with 128 additions and 3 deletions
|
|
@ -44,7 +44,13 @@ def _cmd_clear_cache(_args: argparse.Namespace) -> int:
|
|||
|
||||
def build_parser() -> argparse.ArgumentParser:
|
||||
p = argparse.ArgumentParser(prog="invisible-playwright", description="invisible_playwright CLI")
|
||||
sub = p.add_subparsers(dest="cmd", required=True)
|
||||
# Top-level `--version` / `-V` flag so `python -m invisible_playwright --version`
|
||||
# works (Python convention), in addition to the existing `version` subcommand.
|
||||
p.add_argument(
|
||||
"-V", "--version", action="version",
|
||||
version=f"invisible_playwright {__version__} (BINARY_VERSION={BINARY_VERSION}, Firefox {FIREFOX_UPSTREAM_VERSION})",
|
||||
)
|
||||
sub = p.add_subparsers(dest="cmd")
|
||||
|
||||
sub.add_parser("fetch", help="download the patched Firefox binary")
|
||||
sub.add_parser("path", help="print the absolute path to the cached binary")
|
||||
|
|
@ -54,7 +60,15 @@ def build_parser() -> argparse.ArgumentParser:
|
|||
|
||||
|
||||
def main(argv: list[str] | None = None) -> int:
|
||||
args = build_parser().parse_args(argv)
|
||||
parser = build_parser()
|
||||
args = parser.parse_args(argv)
|
||||
if args.cmd is None:
|
||||
# argparse-conventional: print usage + error message to stderr, exit 2.
|
||||
# We can't keep `required=True` on the subparsers because that breaks
|
||||
# the top-level `--version` flag (argparse demands a subcommand even
|
||||
# when --version is the only token). parser.error() preserves the
|
||||
# original "no subcommand" exit semantics tests expect.
|
||||
parser.error("a subcommand is required (try --help, --version, or one of: fetch, path, version, clear-cache)")
|
||||
dispatch = {
|
||||
"fetch": _cmd_fetch,
|
||||
"path": _cmd_path,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue