用于构建模块化应用程序的库

applip的Python项目详细描述


pipeline statuscoverage reportPyPI StatusPyPI VersionPyPI PythonPyPI LicensePyPI Format

应用程序

pip install applipy

Applipy让您:

  • 实现自包含或相互依赖的^{}s,您可以 可以通过配置文件告诉applipy为应用程序加载
  • 实现^{}s:实现应用程序的实例 生命周期方法
  • 模块可以注册多个将同时运行的AppHandle
  • 从配置文件加载应用程序
  • 您可以有多个配置文件(即每个环境一个:本地, 开发、生产、准备等)
  • 通过环境变量告诉applipy要加载哪个环境 APPLIPY_ENV
  • applipy将优雅地管理应用程序的生命周期
  • 定义protocol handlers 对于配置值中的给定URI方案。有了这些你就可以实现 secrets 应用程序可以通过配置访问。在

使用

可以使用JSON(或YAML,如果pyyaml是 已安装)。在

^{pr2}$

用上面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=devAPPLIPY_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中,模块是应用程序的构建块。他们允许 通过公开 ^{}的 ^{15>处理应用程序的寄存器 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类型。在

更多

要深入了解功能和细节,请随时查看 ^{} 子目录和代码本身!在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Springboot数据JPA findByDate()   java是否可以有多个顶级树节点?   javahibernatehql。子查询中的多个   使用Twilio验证java Keyclope电话号码   java重写对象的toString()表示返回意外的符号   java Android最多每15分钟调用一个方法,否则使用保存的数据   在java swing中突出显示jeditorpane中的一些单词   java将时间戳转换为UTC时区   由于main中存在ArrayIndexOutOfBoundsException,导致java编译错误   java如何通过requestscope获取对象内部对象的值?   java访问安卓代码内的网站并检索生成的图像   java这种日期格式的模式是什么?   java解析包含超链接的xml字符串