Skip to main content

Configuration ORM for Python apps

Project description

Configuration ORM for Python applications

Test Status

A python library which provides ORM like semantics to application configuration. At present, it provides the expected functionality but requires some more work in terms of error handling.

The library works on the concept of configuration sources. Currently following sources are supported,

User defines a application settings schema by subclassing from ConfigSchema class. User can choose one or more configuration sources to create a Pydantic object based on application configuration schema.

Library will then try to read from all provided configuration sources and merge them to build the pydantic application configuration object.

Important Note

Name of keys in configuration sources and confguration schema MUST match. It would have been nice to decouple two, but for the intended functionality, it's a minor enhancement.

Configuration sources are provided as a list of objects and precedence and priority of sources is determined by ordering of the sources in the list, e.g. first source in the list has lowest precendence, last one has the highest.

Read-Write Capability

If the configuration supports, library provides ability to save functionality for the application configuration object. By default, write capability is disabled.

Configuration Source Read Read-Write
TOML Yes Yes
JSON Yes Yes
YAML Yes Yes
DotEnv Yes No
Environment Variable Yes Yes

Example

Using JSON

{
    "Service": {
        "Host": "localhost",
        "Port": 18080
    },
}

Using TOML

[Service]
Host = "localhost",
Port = 18080

Using YAML

Service:
    Host: "localhost"
    Port: 18080

Using DotEnv files / Environment variables

CFGORM_SERVICE__HOST=localhost
CFGORM_SERVICE__PORT=8080
class TestServiceConfig(BaseModel):
    Host: str = Field(..., description="Host running the service")
    Port: int = Field(..., description="Port bound to the service")


class TestConfig(ConfigSchema):
    Service: TestServiceConfig = Field(..., description="Service configuration")

json_source = JSONSource(file_path=Path(config_file_json))

cfg_orm = ConfigORM(schema=TestConfig, sources=[json_source])

cfg: TestConfig = cfg_orm.load_config()

print(cfg)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py_configorm-0.1.1.tar.gz (6.4 kB view hashes)

Uploaded Source

Built Distribution

py_configorm-0.1.1-py3-none-any.whl (10.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page