支持注入器的 Python 应用程序微框架
项目描述
Cask是基于 Flask 建模的支持 Injector 的 Python 应用程序微框架。
其目的是减少开发应用程序时需要编写的样板数量。这是一个简单的例子:
>>> from cask import Cask
>>> from injector import inject
>>>
>>> def configure(binder):
... binder.bind(str, to='ABC')
...
>>> @Cask.run_main(modules=[configure])
... @inject(s=str)
... def main(s):
... print(s)
...
ABC
Cask.run_main(它既可以用作类方法,也可以用作实例方法,见下文)会为您执行if __name__ == '__main__'检查。所以这
>>> app = Cask()
>>> @app.run_main
... def main():
... print(111)
...
111
是较短的版本
>>> app = Cask()
>>> @app.main
... def main():
... print(222)
...
>>> if __name__ == '__main__':
... app.run()
...
222
建造
Cask构造函数和Cask.run_main类方法接受以下可选关键字参数:
modules - Injector 模块的可迭代,默认为空序列
injector - 要配置和使用的 Injector 实例,默认情况下会为您创建新实例
挂钩
Cask实例提供了以下装饰器,允许您注册钩子(请注意,您可以注入已注册的函数):
Cask.before_main - 应该没有参数,如果返回非 None 值,应用程序执行主函数将不会被执行
Cask.after_main - 应该期望单个结果参数并返回处理后的结果(修改与否)
Cask.exception_handler(ExceptionCLass) - 将处理应用程序执行期间引发的异常,应该期望单个参数称为e并包含异常值:
>>> app = Cask() >>> @app.exception_handler(Exception) ... def handle(e): ... print('got exception %s' % (e,)) ... >>> @app.run_main ... def main(): ... raise Exception(123) ... got exception 123
Cask.main - 主函数应该没有参数并且可能返回一些东西
当然,您可以为除main之外的钩子注册多个可调用对象。
执行
这是运行基于 Cask 的应用程序时发生的情况:
使用提供的模块配置喷油器
before_main钩子被调用
如果before_main钩子没有返回与 None 不同的值,则执行主钩子
after_main钩子被调用
版权
版权所有 (C) 2013 Jakub Stasiak
此源代码在 MIT 许可下获得许可,有关详细信息,请参阅 LICENSE 文件。