Skip to content

Type-safe configuration management with support for nested dataclasses.

License

Notifications You must be signed in to change notification settings

zeyun-zhong/NestConfig

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NestConfig

NestConfig is a flexible configuration management system designed to simplify the handling of configurations in Python applications. It leverages Python's type hints and dataclasses to offer type-safe configuration updates, including support for nested configurations and direct application of command-line options.

This class is similar to fvcore.common.config.CfgNode, but it offers the added benefit of AutoCompletion.

Features

  • Type-safe configuration management using dataclasses.
  • Support for nested configurations.
  • Easy integration of command-line options into the configuration.
  • Simple and intuitive usage.

Installation

To install NestConfig, simply use pip:

pip install nestconfig

It can also be built from source with pip install . from this repository.

How to use

Minimal Example

from dataclasses import dataclass
from nestconfig import NestConfig

@dataclass
class ModelConfig:
    ENC_NUM_HEADS: int = 8

@dataclass
class Config(NestConfig):
    MODEL: ModelConfig = ModelConfig()
    SOME_OTHER_CONFIG: int = 10

# Instantiate your configuration
config = Config()

# Update the configuration with new values.
# You can also use a yaml file: updates = yaml.safe_load(yaml_file)
updates = {'MODEL': {'ENC_NUM_HEADS': 12}, 'SOME_OTHER_CONFIG': 15}
config.merge_updates(updates)
print(config.MODEL.ENC_NUM_HEADS)  # Outputs: 12
print(config.SOME_OTHER_CONFIG)  # Outputs: 15

# Apply command-line options directly.
# You can use argparse here and set opts to args.opts
opts = ['MODEL.ENC_NUM_HEADS', '16', 'SOME_OTHER_CONFIG', '20']
config.merge_opts(opts)
print(config.MODEL.ENC_NUM_HEADS)  # Outputs: 16
print(config.SOME_OTHER_CONFIG)  # Outputs: 20

More examples

More examples can be found in test folder.

Blog post

A blog post can be found here.

If you find this code useful, please consider giving it a star (☆) :).

About

Type-safe configuration management with support for nested dataclasses.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages