Skip to main content

InPlat config adapters

Project description

tests codecov pypi versions

Config adapters with pydantic behavior

  • json
  • yaml
  • toml
  • hcl2
  • environ
  • .env
  • TODO: multiline PEM keys load with cryptography

Examples

.env

APP_VERSION=v0.0.1a1
APP_HTTP_HOST=myname.lan
HTTP_2=true
APP_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8M4vd2AmKTW0/nqc
YQBi/bRZjkVezdGHi+zH5kYvm/2hRANCAATxEs1e8hqwpYCTk3amfq/UnGyvViPZ
Midz4nFzQvcq7A9Ju/wvEfLDjA131kh2Sk+x3dgLxhTf7yKJXZC0jg3d
-----END PRIVATE KEY-----"

config.yaml

http:
  port: 10001
  transport:
    timeout: 60.0
    buffer_size: 65535
  interfaces:
    - 127.0.0.1
    - 192.168.0.1
version: 1

yaml with env, dotenv and args overrides

from datetime import datetime
from ipaddress import IPv4Address
from os import environ
from pathlib import Path
from typing import Dict, Union

from pydantic import BaseModel, Field

from ipl_config import BaseSettings


class TcpTransport(BaseModel):
    timeout: float  # from config file
    buffer_size: int = Field(0.01, env='BUFF_SIZE')  # from env


class Http(BaseModel):
    host: str  # from dotenv
    bind: str  # from env
    port: int  # from config file
    interfaces: list[IPv4Address]  # from config file
    transport: TcpTransport
    http2: bool = Field(env='HTTP_2')  # from dotenv


class IplConfig(BaseSettings):
    version: str  # from kwargs
    created: datetime  # from env
    http: Http  # env also works for complex objects
    private_key: str  # from dotenv
    group_by_id: Union[Dict[int, str], None]


if __name__ == "__main__":
    environ['app_http_bind'] = '1.1.1.1'
    environ['buff_size'] = '-1'
    environ['app_created'] = '2000-01-01T00:00:00Z'
    environ['app_group_by_id_0'] = 'root'


    root = Path('.')

    cfg = IplConfig(
        version='v0.0.1a1',
        env_file=root / '.env',
        config_file=root / 'config.yaml',
    )
    cfg.write_json(indent=4)
    print()

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

ipl-config-0.1.10.tar.gz (9.4 kB view hashes)

Uploaded Source

Built Distribution

ipl_config-0.1.10-py3-none-any.whl (9.4 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