Skip to main content

支持注入器的 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 的应用程序时发生的情况:

  1. 使用提供的模块配置喷油器

  2. before_main钩子被调用

  3. 如果before_main钩子没有返回与 None 不同的值,则执行钩子

  4. after_main钩子被调用

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

cask-0.1.1.tar.gz (3.6 kB 查看哈希)

已上传 source