来自多个源的python混合设置。
hsettings的Python项目详细描述
说明
这个包可以从多个源加载设置,并将它们混合到一个类似dict的对象中。
安装
对于Python 3.5+
pip install hsettings
用法
负载设置
从dict加载设置。
fromhsettings.loadersimportDictLoaderdata1={'k1':'v1','k2':'v2','k3':1,'k4':'1'}settings=DictLoader.load(data1)//typecastssettings=DictLoader.load(data1,casts={'k3':str,'k4':int})assertsettings.get('k3')=='1'assertsettings.get('k4')==1//keysincludessettings=DictLoader.load(data1,includes=['k1','k2'])assertsettings.as_dict()=={'k1':'v1','k2':'v2'}//keysexcludessettings=DictLoader.load(data1,excludes=['k3','k4'])assertsettings.as_dict()=={'k1':'v1','k2':'v2'}//keysincludesandexcludessettings=DictLoader.load(data1,includes=['k1','k2'],excludes=['k2','k3'])assertsettings.as_dict()=={'k1':'v1'}//mapkeystoinnerkeyssettings=DictLoader.load(data1,key_mappings={'k2':'k2.k2-1','k3':'k2.k2-2'})assertsettings.as_dict()=={'k1':'v1','k2':{'k2-1':'v2','k2-2':1},'k4':'1'}//mapkeystoinnerkeysandonlycontainsthesekeys//thisisusefultoloadusedefinedenvssettings=DictLoader.load(data1,key_mappings={'k2':'k2.k2-1','k3':'k2.k2-2'},only_key_mappings_includes=True)assertsettings.as_dict()=={'k2':{'k2-1':'v2','k2-2':1}}
从json文件加载设置。
fromhsettings.loadersimportJsonLoadersettings=JsonLoader.load(json_file)
从yaml文件加载设置。
fromhsettings.loadersimportYamlLoadersettings=YamlLoader.load(yaml_file)
从环境和/或env文件加载设置。 支持强制转换,env_to_key_mapping,includes,excludes和only_key_mappings_includes作为dictloader。 使用env_to_key_mapping和only_key_mappings_include参数仅获取特定的env设置。
//loadfromenvironmentfromhsettings.loadersimportEnvLoadersettings=EnvLoader.load()//loadfromenvironmentandenvfilefromhsettings.loadersimportEnvLoadersettings=EnvLoader.load(env_file)
使用设置
data1={'k1':'v1','k2':{'k2-1':'v2-1','k2-2':'v2-2'},'k3':['v3-1','v3-2'],'k4':1,'k5':[0,1,2],'k6':{'k6-1':'','k6-2':None,'k6-3':1.2},'k7':{'k7-1':{'k7-1-1':7}}}settings=Settings(data1)//getsettingsbygetmethodor[]print(settings.get('k1'))//outputv1print(settings['k1'])//outputv1//usedot(.)togetinnervalueprint(settings.get('k2.k2-1'))//outputv2-1print(settings['k2.k2-1'])//outputv2-1//setdefaultvalueifnotset//noteNoneisnotequaltonotsetprint(settings.get('not_set','yes'))//outputyes//getwholesettingsasdictprint(settings.as_dict())//cloneanewsettingssettings2=settings.clone()print(settings2==settings)//outputTrueprint(settings2issettings)//outputFalse//setsettingsbysetmethodor[]settings.set('k3','v3')print(settings['k3])//outputv3settings['k3']='vv3'print(settings['k3'])//outputvv3//mergesettings,keysconflictwillbeoverrideddata2={'k1':'kk1','k2':{'k2-1':'kk2-1'},'k5':[3,4],'k6':{'k6-2':'kk6-2','k6-4':2.4}}settings3=settings.clone()settings3.merge(data2)print(settings3['k2.k2-1'])print(settings3['k2.k2-1'])//outputkk2-1//outputv2-1
更多的例子在测试中。
测试
运行单元测试
pytest