来自多个源的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

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

推荐PyPI第三方库


热门话题
java如何获取所有链接并使用SeleniumWebDriver逐个单击这些链接   java中数组列表的arraylist移位元素   java如何存储具有不同类型参数的元素   java不能使用List<Future<?>>当从不同位置调用时,在方法参数中   java我应该如何修复代码以避免测试代码出错?   安卓 PreferenceFragment java。lang.RuntimeException   java在运行emulator时发现错误   java取消多个AsyncTask回调的有效方法是什么?如果中途满足条件,这些回调将在将来返回?   有没有办法在运行时将方法动态分配给Java类?   java如何将propertyfile与GlassFish一起使用   如何在PHP中使用bcrypt对密码进行哈希处理?   Java和UDP web服务器   java JPA允许EntityListeners执行JPA操作吗?   java执行do while语句时不会产生错误   java无法在edittext中显示数据库中的数据   java Tomcat中活动会话的数量   java在何处使用@SuppressWarnings(“requestfactory”)   netty连接中的java HornetQ异常