- Notifications
You must be signed in to change notification settings - Fork14
Simple dataclasses configuration management for Python with hocon/json/yaml/properties/env-vars/dict/cli support.
License
zifeo/dataconf
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Simple dataclasses configuration management for Python withhocon/json/yaml/properties/env-vars/dict/cli support.
Requires at least Python 3.9.
# pypipip install dataconfpoetry add dataconf# remote masterpip install --upgrade git+https://github.com/zifeo/dataconf.gitpoetry add git+https://github.com/zifeo/dataconf.git# local repo/devpoetry installpre-commit install
importosfromdataclassesimportdataclass,fieldfromtypingimportList,Dict,Text,Union,Tuplefromdateutil.relativedeltaimportrelativedeltafromdatetimeimportdatetime,timedeltaimportdataconfconf="""str_name = teststr_name = ${?HOME}dash-to-underscore = truefloat_num = 2.2iso_datetime = "2000-01-01T20:00:00"iso_duration = "P123DT4H5M6S"variable_length_tuple_data = [ 1 2 3]tuple_data = [ a P1D]# this is a commentlist_data = [ a b]nested { a = test b : 1}nested_list = [ { a = test1 b : 2.5 }]duration = 2sunion = 1people { name = Thailand}zone { area_code = 42}"""classAbstractBaseClass:pass@dataclassclassPerson(AbstractBaseClass):name:Text@dataclassclassZone(AbstractBaseClass):area_code:int@dataclassclassNested:a:Textb:float@dataclassclassConfig:str_name:Textdash_to_underscore:boolfloat_num:floatiso_datetime:datetimeiso_duration:timedeltavariable_length_tuple_data:Tuple[int, ...]tuple_data:Tuple[Text,timedelta]list_data:List[Text]nested:Nestednested_list:List[Nested]duration:relativedeltaunion:Union[Text,int]people:AbstractBaseClasszone:AbstractBaseClassdefault:Text='hello'default_factory:Dict[Text,Text]=field(default_factory=dict)print(dataconf.string(conf,Config))# Config(# str_name='/users/root/',# dash_to_underscore=True,# float_num=2.2,# iso_datetime=datetime.datetime(2000, 1, 1, 20, 0),# iso_duration=datetime.timedelta(days=123, seconds=14706),# variable_length_tuple_data=(1,2,3),# tuple_data=('a', datetime.timedelta(days=1)),# list_data=['a', 'b'],# nested=Nested(a='test', b=1),# nested_list=[Nested(a='test1', b=2.5)],# duration=relativedelta(seconds=+2),# union=1,# people=Person(name='Thailand'),# zone=Zone(area_code=42),# default='hello',# default_factory={}# )@dataclassclassExample:hello:strworld:strfoo:List[str]os.environ['DC_WORLD']='monde'print(dataconf .multi .url('https://raw.githubusercontent.com/zifeo/dataconf/main/confs/simple.hocon') .env('DC') .on(Example))# Example(hello='bonjour',world='monde')
importdataconfconf=dataconf.string('{ name: Test }',Config)conf=dataconf.string('name:\n\tvalue: Test',Config,loader=dataconf.YAML)# dataconf.HOCON by defaultconf=dataconf.env('PREFIX_',Config)conf=dataconf.dict({'name':'Test'},Config)conf=dataconf.url('https://raw.githubusercontent.com/zifeo/dataconf/master/confs/test.hocon',Config)# hocon, json, yaml, propertiesconf=dataconf.file('confs/test.hocon',Config)# hocon, json, yaml, propertiesconf=dataconf.cli(sys.argv,Config)# Aggregationconf=dataconf.multi.string(...).env(...).url(...).file(...).dict(...).cli(...).on(Config)# Same api as Python json/yaml packages (e.g. `load`, `loads`, `dump`, `dumps`)conf=dataconf.load('confs/test.hocon',Config)# hocon, json, yaml, propertiesconf=dataconf.load('confs/test.yaml',Config,loader=dataconf.YAML)# dataconf.HOCON by defaultdataconf.dump('confs/test.hocon',conf,out='hocon')dataconf.dump('confs/test.json',conf,out='json')dataconf.dump('confs/test.yaml',conf,out='yaml')dataconf.dump('confs/test.properties',conf,out='properties')
For full HOCON capabilities seehere.
PREFIX_VAR=aPREFIX_VAR_NAME=bPREFIX_TEST__NAME=cPREFIX_LS_0=dPREFIX_LS_1=ePREFIX_LSLS_0_0=fPREFIX_LSOB_0__NAME=gPREFIX_NESTED_="{ name: Test }"PREFIX_SUB_="{ value:${PREFIX_VAR} }"
is equivalent to
{ var = a var_name = b test { name = c } ls = [ d e ] lsls = [ [ f ] ] lsob = [ { name = g } ] nested { # parse nested config by suffixing env var with `_` name: Test } sub { # will have value "a" at parsing, useful for aliases value = ${PREFIX_VAR} }}
Note that when using.env
source, the strict mode is disabled and value mightbe casted.
Same as env vars parse (dashes are converted to underscore, e.g.TEST_A
→--test-a
).
Can be used for validation or converting between supported file formats (-o
).
dataconf -c confs/test.hocon -m tests.configs -d TestConf -o hocon# dataconf.exceptions.TypeConfigException: expected type <class 'datetime.timedelta'> at .duration, got <class 'int'>
About
Simple dataclasses configuration management for Python with hocon/json/yaml/properties/env-vars/dict/cli support.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.
Contributors10
Uh oh!
There was an error while loading.Please reload this page.