diff options
author | Romain Gonçalves <me@rgoncalves.se> | 2022-10-05 15:37:02 +0200 |
---|---|---|
committer | Romain Gonçalves <me@rgoncalves.se> | 2022-10-05 15:37:02 +0200 |
commit | 3347bf94b255bbfe566952c509b7ff9963013078 (patch) | |
tree | 0342e278c18d645a1c5eec6eb69dc903f792719d | |
parent | 955f9c5774ee1805872c8c15be8e83062f8996fa (diff) | |
download | pydanclick-3347bf94b255bbfe566952c509b7ff9963013078.tar.gz |
wip: fix required key for option arguments
-rw-r--r-- | pydanclick/core.py | 14 | ||||
-rw-r--r-- | pydanclick/schemas.py | 1 |
2 files changed, 9 insertions, 6 deletions
diff --git a/pydanclick/core.py b/pydanclick/core.py index 1da29a1..cfb5512 100644 --- a/pydanclick/core.py +++ b/pydanclick/core.py @@ -87,6 +87,7 @@ def get_processable_arguments( def get_option_arguments( schema: CliSchema, parameter: CliSchema.PropertySchema, + key: str, *args, **kwargs ) -> OptionArgumentsSchema: @@ -95,6 +96,7 @@ def get_option_arguments( """ arguments = OptionArgumentsSchema(help=parameter.description) + arguments.required = key in schema.required option_min = parameter.minLength or parameter.exclusiveMinimum option_max = parameter.maxLength or parameter.exlusiveMaximum @@ -117,7 +119,7 @@ def get_option_arguments( if parameter.ref: definition = schema.get_definition_from_ref(parameter.ref) arguments = get_option_arguments( - schema, definition, *args, **kwargs + schema, definition, key, *args, **kwargs ) return arguments @@ -140,19 +142,19 @@ def get_parameters_from_arguments( def generate_cli_option( schema: CliSchema, - title: str, parameter: CliSchema.PropertySchema, + key: str, *, key_prefix: None | str = "" ) -> Callable: """ Generate the option object of a click.Command. """ - option_title = title.lower().replace("_", "-") + option_title = key.lower().replace("_", "-") return click.option( f"--{key_prefix}{option_title}", - **dict(get_option_arguments(schema, parameter)) + **dict(get_option_arguments(schema, parameter, key)) ) @@ -167,9 +169,9 @@ def generate_cli_options(*, key_prefix: str = "", **kwargs) -> Callable: schema = CliSchema(**function_argument[1].annotation.schema()) properties = schema.properties.items() - for title, parameter in properties: + for key, parameter in properties: function = generate_cli_option( - schema, title, parameter, key_prefix=key_prefix + schema, parameter, key, key_prefix=key_prefix )(function) return function diff --git a/pydanclick/schemas.py b/pydanclick/schemas.py index 7fb79ce..f0308e8 100644 --- a/pydanclick/schemas.py +++ b/pydanclick/schemas.py @@ -9,6 +9,7 @@ class CliSchema(BaseModel): title: None | str type: None | str description: None | str + required: None | bool exclusiveMinimum: None | int exlusiveMaximum: None | int minLength: None | int |