From be58ef4fd57d5ef491c1ba4db45c5667a7b42ac0 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Tue, 4 Jun 2024 23:48:19 -0400 Subject: [PATCH] fix: arguments can take a colon Signed-off-by: Henry Schreiner --- pyproject.toml | 1 + src/uproot_browser/__main__.py | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index bba49b7..9c2098a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -158,6 +158,7 @@ ignore = [ "E722", "RUF001", # Unicode chars "PLR", + "ISC001", # Conflicts with formatter ] typing-modules = ["uproot_browser._compat.typing"] unfixable = [ diff --git a/src/uproot_browser/__main__.py b/src/uproot_browser/__main__.py index d6c3b84..1433f7b 100644 --- a/src/uproot_browser/__main__.py +++ b/src/uproot_browser/__main__.py @@ -25,6 +25,15 @@ from click_default_group import DefaultGroup +def _existing_path_before_colon(_ctx: object, _value: object, path: str) -> str: + prefix, _, _ = path.partition(":") + if not Path(prefix).is_file(): + msg = "{prefix!r} must be an exiting path" + raise click.BadParameter(msg) + + return path + + @click.group(context_settings=CONTEXT_SETTINGS, cls=DefaultGroup, default="browse") @click.version_option(version=VERSION) def main() -> None: @@ -34,7 +43,7 @@ def main() -> None: @main.command() -@click.argument("filename", type=click.Path(exists=True)) +@click.argument("filename", callback=_existing_path_before_colon) def tree(filename: str) -> None: """ Display a tree. @@ -59,7 +68,7 @@ def new_func(*args: Any, **kwargs: Any) -> Any: @main.command() -@click.argument("filename", type=click.Path(exists=True)) +@click.argument("filename", callback=_existing_path_before_colon) @click.option( "--iterm", is_flag=True, help="Display an iTerm plot (requires [iterm] extra)." ) @@ -100,7 +109,7 @@ def plot(filename: str, iterm: bool) -> None: @main.command() -@click.argument("filename", type=click.Path(exists=True)) +@click.argument("filename", callback=_existing_path_before_colon) def browse(filename: str) -> None: """ Display a TUI.