用于构建模块化应用程序的库
applip的Python项目详细描述
应用程序
pip install applipy
Applipy让您:
- 实现自包含或相互依赖的^{
}s ,您可以 可以通过配置文件告诉applipy为应用程序加载 - 实现^{
}s :实现应用程序的实例 生命周期方法 - 模块可以注册多个将同时运行的
AppHandle
- 从配置文件加载应用程序
- 您可以有多个配置文件(即每个环境一个:本地, 开发、生产、准备等)
- 通过环境变量告诉applipy要加载哪个环境
APPLIPY_ENV
- applipy将优雅地管理应用程序的生命周期
- 定义protocol handlers 对于配置值中的给定URI方案。有了这些你就可以实现 secrets 应用程序可以通过配置访问。在
使用
可以使用JSON(或YAML,如果pyyaml
是
已安装)。在
用上面snipet中的内容保存一个文件dev.yaml
,然后运行
以下命令:
$ pip install pyyaml applipy applipy_http applipy_prometheus
$ python -m applipy
上面的配置文件定义了一个名为demo
的应用程序,它将安装
applipy web模块和Prometheus模块。在
你可以去http://localhost:8080试试。到 查看您必须至少调用两次的 http://0.0.0.0:8080/metrics终结点。在
Applipy将搜索名为
${APPLIPY_CONFIG_PATH}/${APPLIPY_ENV}.json
(和
${APPLIPY_CONFIG_PATH}/${APPLIPY_ENV}.yaml
,如果pyyaml
已安装)。这个
默认值是:APPLIPY_ENV=dev
和APPLIPY_CONFIG_PATH=.
应用句柄
AppHandle是通过applipy管理 应用程序。AppHandle实现如下所示:
# demo_app.pyfromapplipyimportAppHandleclassMyDemoApp(AppHandle):asyncdefon_init(self):print('initialize resources')asyncdefon_start(self):print('run long lived application here')whileTrue:awaitsleep(3600)asyncdefon_shutdown(self):print('close and release resources')
正如您在上面看到的,AppHandles公开了三种方法 applipy运行你的应用程序。在
Applipy能够同时运行多个并发AppHandles, 利用python中的async。在
简化了很多,applipy会像这样运行AppHandles:
try:awaitall_app_handles.on_init()awaitall_app_handles.on_start()finally:awaitallapp_handles.on_shutdown()
通常,AppHandle实现通过以下方式添加到applipy应用程序
包括它们所属的模块,并在
模块configure()
函数。在
模块
在applipy中,模块是应用程序的构建块。他们允许
通过公开
^{register()
函数并定义模块间的依赖关系。在
模块实现的示例如下所示:
# mymodule.pyfromapplipyimportConfig,Module,LoggingModulefromloggingimportLoggerfromdemo_appimportMyDemoAppclassMyModule(Module):def__init__(self,config:Config):self._config=configdefconfigure(self,bind,register):bind(str,'ModuleDemo')register(MyDemoApp)@classmethoddefdepends_on(cls):return(LoggingModule,)
向应用程序添加模块的方法是通过配置文件
使用定义模块实现的完全限定名列表
键app.modules
:
app:modules:-applipy_http.HttpModule-applipy_prometheus.PrometheusModule-mymodule.MyModule
模块只能在其构造函数中接收一个参数,它是
Config
实例,如上面的代码所示。如果您的模块不需要
访问配置时,您不能实现__init__
或拥有它
没有参数(除了self
)。在
启动时,configure()
方法由applipy Application
运行
它的目的是允许绑定类型和注册应用程序
把手。查看中的扩展Module
文档
^{
最后,depends_on()
类方法返回模块类型的元组
模块取决于。在上面的示例中,因为应用程序句柄
由模块注册需要logging.Logger
,模块声明一个依赖项
因为我们知道它绑定了logging.Logger
类型。在
更多
要深入了解功能和细节,请随时查看
^{
- 项目
标签: