From c8d2ffbc1573146981ddf87debfc0c8c67968591 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 9 Nov 2023 11:25:39 -0600 Subject: [PATCH] Fix "| None" types in backend options --- src/chap/core.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/chap/core.py b/src/chap/core.py index 5f4e6a3..df05cf4 100644 --- a/src/chap/core.py +++ b/src/chap/core.py @@ -11,6 +11,7 @@ import pathlib import pkgutil import subprocess from dataclasses import MISSING, dataclass, fields +from types import UnionType from typing import Any, AsyncGenerator, Callable, cast import click @@ -171,7 +172,10 @@ def format_backend_help(api: Backend, formatter: click.HelpFormatter) -> None: if doc: doc += " " doc += f"(Default: {default!r})" - typename = f.type.__name__ + f_type = f.type + if isinstance(f_type, UnionType): + f_type = f_type.__args__[0] + typename = f_type.__name__ rows.append((f"-B {name}:{typename.upper()}", doc)) formatter.write_dl(rows) @@ -191,8 +195,11 @@ def set_backend_option( # pylint: disable=unused-argument field = all_fields.get(name) if field is None: raise click.BadParameter(f"Invalid parameter {name}") + f_type = field.type + if isinstance(f_type, UnionType): + f_type = f_type.__args__[0] try: - tv = field.type(value) + tv = f_type(value) except ValueError as e: raise click.BadParameter( f"Invalid value for {name} with value {value}: {e}"