from cement import App, Controller, ex
class Base(Controller):
class Meta:
label = 'base'
arguments = [
(['--base-foo'],
{'help': 'base foo option'}),
]
@ex(hide=True)
def default(self):
print('Inside Base.default')
if self.app.pargs.base_foo:
# do something with self.app.pargs.base_foo
print('Base Foo > %s' % self.app.pargs.base_foo)
@ex(
arguments=[
(['--command1-opt'],
{'help': 'option under command1',
'action': 'store_true'})
],
aliases=['cmd1'],
help='sub-command under myapp base controller',
)
def command1(self):
print('Inside Base.command1')
if self.app.pargs.command1_opt:
# do something with self.app.pargs.command1_opt
pass
class Embedded(Controller):
class Meta:
label = 'embedded_controller'
stacked_on = 'base'
stacked_type = 'embedded'
@expose(help="embedded under base controller")
def command2(self):
print('Inside Embedded.command2')
class Nested(Controller):
class Meta:
label = 'nested_controller'
stacked_on = 'base'
stacked_type = 'nested'
arguments = [
(['--nested-opt'],
{'help': 'option under nested-controller'}),
]
@expose(help="sub-command under nested-controller")
def command3(self):
print('Inside Nested.command3')
class MyApp(App):
class Meta:
label = 'myapp'
handlers = [
Base,
Embedded,
Nested,
]
with MyApp() as app:
app.run()