Mercurial > piecrust2
view docs/api/02_components/01_commands.md @ 852:4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
* Everything is a `ContentSource`, including assets directories.
* Most content sources are subclasses of the base file-system source.
* A source is processed by a "pipeline", and there are 2 built-in pipelines,
one for assets and one for pages. The asset pipeline is vaguely functional,
but the page pipeline is completely broken right now.
* Rewrite the baking process as just running appropriate pipelines on each
content item. This should allow for better parallelization.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Wed, 17 May 2017 00:11:48 -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`.