import click @click.group() @click.version_option() def cli(): """Naval Fate. This is the docopt example adopted to Click but with some actual commands implemented and not just the empty parsing which really is not all that interesting. """ @cli.group() def ship(): """Manages ships.""" @ship.command('new') @click.argument('name') def ship_new(name): """Creates a new ship.""" click.echo('Created ship %s' % name) @ship.command('move') @click.argument('ship') @click.argument('x', type=float) @click.argument('y', type=float) @click.option('--speed', metavar='KN', default=10, help='Speed in knots.') def ship_move(ship, x, y, speed): """Moves SHIP to the new location X,Y.""" click.echo('Moving ship %s to %s,%s with speed %s' % (ship, x, y, speed)) @ship.command('shoot') @click.argument('ship') @click.argument('x', type=float) @click.argument('y', type=float) def ship_shoot(ship, x, y): """Makes SHIP fire to X,Y.""" click.echo('Ship %s fires to %s,%s' % (ship, x, y)) @cli.group('mine') def mine(): """Manages mines.""" @mine.command('set') @click.argument('x', type=float) @click.argument('y', type=float) @click.option('ty', '--moored', flag_value='moored', default=True, help='Moored (anchored) mine. Default.') @click.option('ty', '--drifting', flag_value='drifting', help='Drifting mine.') def mine_set(x, y, ty): """Sets a mine at a specific coordinate.""" click.echo('Set %s mine at %s,%s' % (ty, x, y)) @mine.command('remove') @click.argument('x', type=float) @click.argument('y', type=float) def mine_remove(x, y): """Removes a mine at a specific coordinate.""" click.echo('Removed mine at %s,%s' % (x, y))