python应用程序的配置管理器。
magic-settings的Python项目详细描述
魔术设置
安装
pip install magic-settings
使用yaml的设置
文件
pip install magic-settings[yaml]
初始化
项目设置类声明
frommagic_settingsimportBaseSettings,PropertyfromfunctoolsimportpartialclassMySettings(BaseSettings):VERSION=Property(types=str)PROJECT_DIR=Property(types=str)LOGGING_LEVEL=Property(default='INFO',choices=['NOTSET','DEBUG','INFO','WARNING','ERROR','CRITICAL'])RETRIES_NUMBER=Property(types=int,converts=[int])COEFFICIENT=Property(types=float,converts=[float])DEBUG=Property(types=bool,converts=[int,bool],default=False)DISTRIBUTED_SERVICE_HOST_NAMES=Property(types=list,converts=[partial(str.split,sep=',')])
类属性
是具有以下参数的描述符:
- 类型-值的类型或可能的类型的元组。如果
value
不是类型之一,则为
valueerror
- 验证器-可调用对象的列表,每个对象依次应用于
值
。如果value
未通过至少一个验证(如果任何验证函数返回false
),则引发valueerror
- 选项-任何对象的列表。如果
值
不在选项中
-将引发值错误
。使用此参数时,参数类型
和验证器
将被忽略。- 默认值-设置
属性的默认值
- 转换可调用对象的列表。它是一个连续应用于
值
并每次覆盖它的转换链。仅当value
是字符串时,它才适用于value
。如果至少有一个转换未能应用,则引发valueerror
- 验证器-可调用对象的列表,每个对象依次应用于
属性类
除了属性之外,以下类还可以用于标准类型:
boolproperty
:接受布尔值,将不区分大小写的true
或false
转换为适当的python布尔值。此属性还接受数字(0
为false,1
为true)。floatproperty
:接受浮点数值。intproperty
:接受整数值。stringproperty
:接受字符串值。stringlistproperty
:接受字符串列表。可以在此类的构造函数中指定分隔符(,
是默认值)。hostListProperty
:接受主机列表。每个主机都是一个元组,包含一个string
主机名和一个int
端口。对应该用逗号分隔,主机名和端口应该用冒号分隔。例如,192.168.20.1:80、www.yandex.ru:1234、localhost:8888
将转换为[('192.168.20.1',80)、('www.yandex.ru',1234)、('localhost',8888)]
使用以下属性可以简化以上示例:
frommagic_settingsimport(BaseSettings,Property,BoolProperty,FloatProperty,IntProperty,StringListProperty,StringProperty)classMySettings(BaseSettings):VERSION=StringProperty()PROJECT_DIR=StringProperty()LOGGING_LEVEL=Property(default='INFO',choices=['NOTSET','DEBUG','INFO','WARNING','ERROR','CRITICAL'])RETRIES_NUMBER=IntProperty()COEFFICIENT=FloatProperty()DEBUG=BoolProperty(default=False)DISTRIBUTED_SERVICE_HOST_NAMES=StringListProperty()
设置配置
设置配置发生在创建设置对象的阶段。
frommy_projectimportmy_module,my_awesome_modulefrommy_configimportMySettingssettings=MySettings(modules=[my_module,my_awesome_module],prefix='MY_PROJECT_ENV_SETTINGS',dotenv_path='/path/to/my/env',override_env=True,yaml_settings_path='/path/to/my/yaml/settings.yaml',use_env=True)
参数
模块:要导入变量的python模块列表。默认值
无
前缀:获取环境变量的前缀。默认值-
无
设置.py
classMySettings(BaseSettings):PSYDUCK=Property(types=str)
.env
MYPROJECT_PSYDUCK=Owowowow
一些其他地方。py
settings=MySettings(prefix='MYPROJECT')
或
settings=MySettings(prefix='MYPROJECT_')
dotenv_path:指向env文件的路径。默认值-
无
。用于将变量从env文件导出到环境。如果dotenv_path
是none
-在目录树上查找指定的文件-默认情况下称为.env
。覆盖环境:
true
-使用.env
-文件中的变量覆盖现有系统环境变量,false
-不覆盖。默认值-false
yaml\u设置路径:指向yaml配置文件的路径。默认值-
无
使用环境:
true
-使用环境变量。默认值-true
例外情况
值错误:如果模块类型不是列表
或非类型
,如果模块中的元素类型不是模块类型
。
设置加载
加载设置可以在项目中的任何位置启动。
啊!如果再次调用,它将遍历配置文件并更新属性。
设置优先级
如果设置交叉,将应用以下优先级: 我的模块>;我的超棒模块>;.env>;设置.yaml
啊!我的module.py
是啊。我的真棒模块.py
啊!13!.env
AAAAAAA H14设置.yaml
是啊。示例
啊! 啊! AAAAAAA 18 啊! AAAAAAA H20 AAAAAAAAA 21临时属性覆盖
我的module.py
啊! AAAAAAAAA 23方法属性的临时集合不是线程安全的。
设置列表
您可以使用方法to u dict()
,to u json()
获取当前设置:
验证
建议在重新定义期间使用以下basesettings
类方法update settings from source
方法:
预验证
-检查类型配置是否正确;检查选项中的值和默认值是否通过类型检查。
post u validate
-检查是否为每个属性指定了值。
动态设置
实现自定义动态设置源
在dictsource中存储设置的示例
AAAAAH25
项目动态设置类的定义
啊!
动态设置初始化
是啊。
动态设置更新
只更新一次设置
AAAAAAAAA 28
启动更新循环
AAAAAAA 29
停止更新循环
AAAAAAA 30
将设置写入源
啊!
例外情况
basedynamicsettings
的类中的设置源不可用,则应选择此异常。推荐PyPI第三方库