Skip to main content

chumicro-config

Runtime config from one shared dotted-key shape (wifi.ssid, mqtt.broker.host).

Each library exposes a <Name>Config.from_config() factory that reads its own dotted-prefix section from a shared dict (wifi.*, mqtt.broker.*, etc.) and returns typed configuration. Apps load one runtime_config.msgpack at boot; libraries pull their slice out. No global registry, no hand-written if "key" in config: walls.


Part of the ChuMicro family — small, focused Python libraries for microcontrollers and laptops. Browse all libraries.

Install

# CircuitPython (after `circup bundle-add ChuMicro/ChuMicro-Bundle-Experimental`)
circup install chumicro_config

# MicroPython
mpremote mip install github:ChuMicro/ChuMicro-Bundle-Experimental/chumicro_config

# CPython
pip install chumicro-config-experimental

For bundle setup, pre-compiled .mpy bundles, the experimental channel, and details on PyPI naming, see the chumicro INSTALL guide.

Quick example

User-app pattern (the 2-line bring-up):

from chumicro_config import load_runtime_config
from chumicro_wifi import WifiConfig, WifiService

config = load_runtime_config()                          # reads /runtime_config.msgpack
wifi = WifiService(WifiConfig.from_config(config))      # reads + types the wifi.* keys

Library-side pattern (load_section builds a typed config from the flat-key payload — used today by chumicro-wifi):

from chumicro_config import load_section

class WifiConfig:
    def __init__(self, ssid, password, hostname=None, connect_timeout_ms=15_000): ...

    @classmethod
    def from_config(cls, config):
        return load_section(
            cls, config,
            prefix="wifi",
            required=("ssid", "password"),
            optional={"hostname": None, "connect_timeout_ms": 15_000},
        )

What's included

Symbol What it does
load_runtime_config(path=…) Read + decode /runtime_config.msgpack into a flat-key RuntimeConfig (dict-shaped)
config Lazily-loaded module attribute — the deployed RuntimeConfig, or None when the file is absent. First attribute access reads the file once and caches the result
RuntimeConfig Lookup wrapper over the flat-key payload — get(key[, default]), [key] / require(key), in check
load_section(cls, config, *, prefix, required=…, optional=…) Build cls(**kwargs) by reading flat-prefix keys. Used today by chumicro-wifi's WifiConfig.from_config; available to any library whose constructor signature maps 1:1 to its config subkeys
try_load_section(...) Soft variant — returns None instead of raising when config is None, the wrong type, or missing a required key
MissingConfigKey / InvalidConfigType / ConfigError Targeted exceptions — single-inheritance from ConfigError (MicroPython forbids multi-parent layouts)

Where this fits

Depends on chumicro-msgpack for decode. Most ChuMicro libraries with a <Name>Config.from_config() factory read their slice off the shared RuntimeConfig via config.get(...); chumicro-wifi additionally uses the load_section helper here. Other consumers: chumicro-mqtt, chumicro-ntp, chumicro-requests, chumicro-websockets, chumicro-http_server.

Platform support

Works on CPython, MicroPython, and CircuitPython.

Examples

examples/end_to_end.py shows the full read → load_section → typed-config flow on CPython; see any consumer library (starting with chumicro-wifi) for the integrated usage shape.

Contributing

Working on chumicro-config itself? Clone the mono-repo if you haven't already — the rest of the workflow assumes you're inside that workspace.

pip install -e .[test]
pytest tests/                  # host-side tests
pytest functional_tests/       # on-device tests (needs a board registered in devices.yml)

Register a board before running functional tests: chumicro-workspace add-device <id> --address <port>.

Docs

📖 Stable docs · Experimental docs

Find this library

License

MIT

Download files

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

Source Distribution

chumicro_config_experimental-0.7.3.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chumicro_config_experimental-0.7.3-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file chumicro_config_experimental-0.7.3.tar.gz.

File metadata

File hashes

Hashes for chumicro_config_experimental-0.7.3.tar.gz
Algorithm Hash digest
SHA256 400b75307bf511f33a42c976abc5ec56e07403d5307b6b8943545a9c9c835a56
MD5 2a7853578c2daa1b20653c4a9d8de892
BLAKE2b-256 93d330b7f12759d17a73ba9688a6b2ce9e475569ffece19d1daf9dca325533df

See more details on using hashes here.

Provenance

The following attestation bundles were made for chumicro_config_experimental-0.7.3.tar.gz:

Publisher: release.yml on ChuMicro/ChuMicro

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chumicro_config_experimental-0.7.3-py3-none-any.whl.

File metadata

File hashes

Hashes for chumicro_config_experimental-0.7.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2bf06cb05703588317fd29a245a3ff52db908930f0654eba26017ba4bb64790b
MD5 1b309f7d1aee282ccc22b84f948e5f6a
BLAKE2b-256 37d934d1f25db55fd9e878beb9507966e87d6439a5502225fdb1451d596dc58d

See more details on using hashes here.

Provenance

The following attestation bundles were made for chumicro_config_experimental-0.7.3-py3-none-any.whl:

Publisher: release.yml on ChuMicro/ChuMicro

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.7.7

2 files

0.7.6

2 files

0.7.5

2 files

0.7.4

2 files

This release

0.7.3 This release

2 files

0.7.2

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page