[Python] python-click: dependent options on another option

Discussão em 'Python' iniciado por Stack, Março 29, 2025.

  1. Stack

    Stack Membro Participativo

    This question is about the click package: I want to setup my command so that some optional options are dependent on a specific option value and are required based on its value.

    Required options:

    1. input (input file)
    2. doe (integer , represents algo name)

    Sub options: if doe is

    1. equal to 1 then option generator_string should become required=True
    2. equal to 2 then option number_of_sample_pointsshould become required=True
    3. equal to 3 then option number_of_center_pointsshould become required=True

    Valid Examples:

    1. --input ./input.txt --doe 1 --generator_string 1234
    2. --input ./input.txt --doe 2 --number_of_sample_points 3
    3. --input ./input.txt --doe 3 --number_of_center_points 2

    CODE:

    import click


    def check_output(ctx, param, value):
    if value == 1:
    if not ctx.params['generator_string']:
    setOptionAsRequired(ctx, 'generator_string')
    return value


    def setOptionAsRequired(ctx, name):
    for p in ctx.command.params:
    if isinstance(p, click.Option) and p.name == name:
    p.required = True


    @click.option('--input', required=True, type=click.Path(exists=True) )
    @click.option('--doe', required=True, type=int, callback=check_output )
    @click.option('--generator_string', required=False, type=str, is_eager=True)
    @click.option('--number_of_sample_points', required=False, type=int, is_eager=True)
    @click.option('--number_of_center_points', required=False, type=int, is_eager=True)
    @click.command(context_settings=dict(max_content_width=800))
    def main(input, doe, generator_string, number_of_sample_points, number_of_center_points):
    click.echo('is valid command')

    if __name__ == '__main__':
    main()

    Continue reading...

Compartilhe esta Página