Search code examples
pythoncommand-line-interfacepython-click

Python click module for creating a CLI


I am using python click module to create a CLI. The fact is that I want to have category commands with arguments, for example:

myawesomecli env info
myawesomecli env clean
myawesomecli env ...

myawesomecli database create-table <name>
myawesomecli database insert <entry>
myawesomecli database ...

So far, I can come up with this:

import click
@click.group()
@click.version_option(version='0.1 ')
def cli():
    pass

@cli.command()
@click.argument('option')
def env(option):
    if option == 'info':
        click.echo("run env info command")
    elif option == 'clean':
        click.echo("run env clean command")     
    ...

@cli.command()
@click.argument('option')
def database(option):
    if option == 'create-table':
        click.echo("run database create-table command")
    elif option == 'clean':
        click.echo("run database clean command")        
    ...

Is there a way to have a function for each subcommand instead of using the if-else's?


Solution

  • import click
    @click.group()
    @click.version_option(version='0.1 ')
    def cli():
        pass
    
    @cli.group()
    @click.argument('option')
    def env(option):
       """ Define the environment of the product """
       pass
    
    @env.command()
    def info():
        click.echo("run env info command")
    
    @env.command():
    def group():
        click.echo("run env group command")
    ...
    

    I'm also struggling to understand a few things but this is one idea that i hope helps.