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)
调用中使用的模块。
然后,消费者应该在正确的位置添加功能,例如。
mara
shell命令(在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可以在其他地方 (但如果未设置,则不会显示)。