mara应用程序编写和配置基础架构。

mara-config的Python项目详细描述


mara配置

马拉生态系统的应用程序组成和配置基础设施。软件包功能包括:

  • 编写mara应用程序的方法
  • 基于可替换功能的简单配置系统

构建应用程序

mara生态系统的目标是,如果您更新一个包,新的 功能会自动添加到应用程序或数据库中 迁移自动包括新声明的模型。使 应用程序仍然可以组合,您可以在 模块app.app。这个函数应该调用 mara_config.register_functionality(module)对于它想要的所有模块 包括在内。

你自己的应用程序应该同时贡献功能(见下一节)和 通过mara_config.register_functionality(your_module)注册自己。

可以通过设置env变量覆盖默认模块: MARA_APP=module.submodule

在包中贡献功能

包必须通过MARA_*iterables公开其功能 (列表或函数返回列表或生成器)。这个 iterable包含要添加的功能。建议 使用返回列表或生成器的函数,以便 在实际使用功能时延迟加载。这是 如果使用可选依赖项(例如烧瓶),则特别重要 显示配置系统,但配置系统本身的视图 可在没有烧瓶视图的情况下使用)。

如果包包含可以使用的子功能 相互独立,考虑将它们放入子包中 并让主模块返回所有子功能的并集。

使用贡献的功能

通过调用 mara_config.get_contributed_functionality('MARA_VARIABLE_NAME')产生 元组中的功能(module, content)module是 在mara_config.register_functionality(module)调用中使用的模块。

然后,消费者应该在正确的位置添加功能,例如。 marashell命令(在mara cli包中)添加了 单击命令作为子命令。

mara配置

基于可替换功能的配置系统。

一方通过修饰 使用@declare_config()的函数。要更改此配置, 用@set_config('name')修饰替换函数。

配置的默认名称是orig_package.func,但可以被覆盖 在装饰器中。

示例

# in package which declares APIfrommara_configimportdeclare_config@declare_config("name")defsomething(argument:str=None)->str:return"x"print(something())print(something("ABC"))# In downstream package which want's to overwrite the APIfrommara_configimportset_config@set_config('name')defreplacement_for_something(argument:str=None)->str:returnargumentor'y'print(something())print(something("ABC"))

从本地配置.py

默认情况下,在环境中定义的模块中 变量MARA_APP和所有更高的模块(第一个找到wins)是 进口的。使用此选项将所有本地修改放置到配置和 从repo中排除此文件(.gitignore)。

从环境配置

为了帮助停靠,替换函数也从 环境变量。最后加载环境配置并获胜 local_setup.py

这只适用于返回任意数字(浮点数)的配置项, 布尔或弦。

以“mara”开头的任何环境变量(不区分大小写)都是 变成返回值的函数。其他的环境 变量名有任何__替换为“.”。如果该值是有效的浮点值, 它是以浮子的形式返回的。如果它是一个有效的bool,它将作为布尔值返回。 否则它将作为字符串返回。

例如,以下变量

MARA_PACKAGENAME__CONFIG_ITEM=y

相当于下面的@set_config调用

frommara_configimportset_config@set_config('packagename.config_item')defreplacement():return'y'

在此包中提供了mara_ux功能

  • 显示当前配置的烧瓶视图(MARA_FLASK_BLUEPRINTS
  • 保护对配置视图的访问的acl ressource(MARA_ACL_RESOURCES
  • 导航条目(MARA_NAVIGATION_ENTRY_FNS
  • 一些默认配置项(MARA_CONFIG_MODULES

要使用,添加此功能,添加mara_config.register_functionality(mara_config) 到您的compose_mara_app()函数。

消耗的mara_ux功能

如果要求显示 当前配置。

MARA_CONFIG_MODULES必须是 包含所有声明面向用户配置的模块(@declare_config())。 当显示配置(例如通过mara print_config或包含的烧瓶视图)时, 所有模块都将被加载,并且所有包含的@declare_config()修饰函数都将被加载 因此添加到配置系统。

只有面向用户的配置应该在这样的模块中,内部api可以在其他地方 (但如果未设置,则不会显示)。

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

推荐PyPI第三方库


热门话题
java为什么运行按钮在Eclipse中不起作用?   java构造函数:实例变量是否为对象存储单独的值?   java使用jquery获取值   生产文件夹和源文件夹中的java单元测试   java递归问题这个解决方案正确吗?有更简单的解决方案吗?   java Android sqlite正在检索已选中中的行   javacom。谷歌。云数据存储。DatastoreException:请求缺少必需的身份验证凭据   java无法在Linux Ubuntu 12.04上运行maven2   在监视器的上下文中,被阻塞的线程在被notify()调用唤醒后在何处继续执行?   安卓如何从游标获取Bool(Java SQLite)   如何阻止rxjava runnable发出?   使用设备管理时应用程序中的java Android实例化异常