Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Simple dataclasses configuration management for Python with hocon/json/yaml/properties/env-vars/dict/cli support.

License

NotificationsYou must be signed in to change notification settings

zifeo/dataconf

Repository files navigation

Actions StatusPyPI version

Simple dataclasses configuration management for Python withhocon/json/yaml/properties/env-vars/dict/cli support.

Getting started

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

Usage

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')

API

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.

Parse env vars

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.

Parse CLI arguments

Same as env vars parse (dashes are converted to underscore, e.g.TEST_A--test-a).

CLI usage

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

Stars

Watchers

Forks

Languages


[8]ページ先頭

©2009-2025 Movatter.jp