跳转到主要内容

支持注入器的Python应用程序微框架

项目描述

Build status

Cask 是支持注入器的,模仿Flask的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- 配置和使用注入器的实例,默认为您创建新实例

钩子

Cask 实例提供了以下装饰器,允许您注册钩子(请注意,您可以注入到已注册的函数中)

  • Cask.before_main - 应该不期望任何参数,如果返回非None值,则不会执行应用程序执行的主函数

  • Cask.after_main - 应该期望单个 result 参数并返回处理后的结果(修改后或未修改)

  • 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. 注入器使用提供的 modules 进行配置。

  2. before_main 钩子被调用

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

  4. after_main 钩子被调用

项目详情


下载文件

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

源代码分布

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

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面