DEV Community

prostomarkeloff
prostomarkeloff

Posted on

Python configs for Humans. Part #2

Hello, dev.to!

Today, I want to tell you about my library for configs (betterconf). I have already article about it but I have implemented some features which weren't.

Okay, let's start!

At first, now you can get values not only from env vars. By default it's so but you can edit.

from betterconf import field, Config
from betterconf.config import AbstractProvider

class NameProvider(AbstractProvider):
    def get(self, name: str):
        return name

class Cfg(Config):
    my_var = field("my_var", provider=NameProvider())

cfg = Cfg()
print(cfg.my_var)
# my_var

And... you can do casting of your objects by simple and clear syntax:

from betterconf import field, Config
# out of the box we have `to_bool` and `to_int`
from betterconf.caster import to_bool, to_int, AbstractCaster


class DashToDotCaster(AbstractCaster):
    def cast(self, val: str):
        return val.replace("-", ".")

to_dot = DashToDotCaster()

class Cfg(Config):
    integer = field("integer", caster=to_int)
    boolean = field("boolean", caster=to_bool)
    dots = field("dashes", caster=to_dot)

cfg = Cfg()
print(cfg.integer, cfg.boolean, cfg.dots)
# -500, True, hello.world

This library is lightweight and dependency-free. I'm using it in my production environments and recommend you too!

You can see more at Github: https://github.com/prostomarkeloff/betterconf

Top comments (0)