Mercurial > piecrust2
view docs/api/02_components/01_commands.md @ 1188:a7c43131d871
bake: Fix file write flushing problem with Python 3.8+
Writing the cache files fails in Python 3.8 because it looks like flushing
behaviour has changed. We need to explicitly flush. And even then, in very
rare occurrences, it looks like it can still run into racing conditions,
so we do a very hacky and ugly "retry" loop when fetching cached data :(
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 15 Jun 2021 22:36:23 -0700 |
parents | dce482f7c62d |
children |
line wrap: on
line source
--- title: Chef Commands --- To provide new `chef` commands, you need to override the `getCommands` method of your plugin, and return command instances: ```python class MyPlugin(PieCrustPlugin): name = 'myplugin' def getCommands(self): return [ MyNewCommand()] ``` To create a command class, inherit from the `ChefCommand` base class: ```python from piecrust.commands.base import ChefCommand class MyNewCommand(ChefCommand): def __init__(self): super(MyNewCommand, self).__init__() self.name = 'foobar' self.description = "Does some foobar thing." def setupParser(self, parser, app): parser.add_argument('thing') def run(self, ctx): print("Doing %s" % ctx.args.thing) ``` * The `name` will be used for command line invocation, _i.e._ your new command will be invoked with `chef foobar`. * The `description` will be used for help pages like `chef --help`. * The `setupParser` method passes an `argparse.ArgumentParser` and a `PieCrust` application. You're supposed to setup the syntax for your commend there. * The `run` method is called when your command is executed. The `ctx` object contains a couple useful things, among others: * `args` is the namespace obtained from running `parse_args`. It has all the values of the arguments for your command. * `app` is the instance of the current `PieCrust` application. * For the other things, check-out `piecrust.commands.base.CommandContext`.