myapp.py 982 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from time import sleep
  2. from cement.core.exc import CaughtSignal
  3. from cement.core import hook
  4. from cement.core.foundation import CementApp
  5. from cement.core.controller import CementBaseController, expose
  6. def print_foo(app):
  7. print("Foo => %s" % app.config.get('myapp', 'foo'))
  8. class Base(CementBaseController):
  9. class Meta:
  10. label = 'base'
  11. @expose(hide=True)
  12. def default(self):
  13. print('Inside Base.default()')
  14. # simulate a long running process
  15. while True:
  16. sleep(30)
  17. class MyApp(CementApp):
  18. class Meta:
  19. label = 'myapp'
  20. base_controller = Base
  21. extensions = ['reload_config']
  22. with MyApp() as app:
  23. # run this anytime the configuration has changed
  24. hook.register('post_reload_config', print_foo)
  25. try:
  26. app.run()
  27. except CaughtSignal as e:
  28. # maybe do something... but catch it regardless so app.close() is
  29. # called when exiting `with` cleanly.
  30. print(e)