Skip to main content

SafeConfig Library


PyPI - Downloads

Overview

SafeConfig provides a structured and flexible way to define, validate, and manage configurations for your Python applications. It supports hierarchical configuration structures with fields that can be variables, arrays, or nested structures. It also includes a command-line interface (CLI) parser to easily override configurations via CLI arguments.

Features

  • Define hierarchical configurations with nested structures.
  • Support for variable, array, and struct field types.
  • Validation of field values.
  • Load and save configurations from/to JSON and YAML files.
  • Override configurations using command-line arguments.

Installation

To install the library, simply run:

pip install safeconfig

Usage

Defining a Configuration Schema

To define a schema, create a class that inherits from Struct and define the fields using Variable, Array, and other Struct subclasses.

from safeconfig import Variable, Array, Struct

class TrainerConfig(Struct):
    learning_rate = Variable(float, description="Learning rate for training", default=0.001)
    epochs = Variable(int, description="Number of training epochs", optional=True)
    data = Array(str, description="Dataset paths.")

Create a Configuration File

Here is an example configuration file in YAML format:

learning_rate: 0.01
epochs: 10
data:
  - "/data/dataset1"
  - "/data/dataset2"

Loading and Saving Configuration Files

You can load the configuration from a JSON or YAML file using the read method.

config = TrainerConfig()
config.read("path/to/config.yaml")

Note that the Struct will be used as a schema to validate all the attributes.

Similarly, you can save the configuration to a JSON or YAML file using the write method.

config.write("path/to/config.yaml")

Accessing and Modifying the Configuration

You can access and modify the configuration fields directly or using the set and get methods.

# Accessing fields
print(config.learning_rate)
print(config.data)

# Modifying fields
config.learning_rate = 0.01
config.data[0] = '/path/to/data'

# Using set and get methods
config.set({'learning_rate': 0.01, 'data': ['/path/to/data']})
print(config.get())

Using the CLI Parser

The CLI parser allows you to override configuration values using command-line arguments. It also supports loading configurations from a file specified via CLI.

from safeconfig import CLIParser

if __name__ == "__main__":
    parser = CLIParser(TrainerConfig())
    config = parser.parse_args()
    print(config)

Now you can load configuration files by passing a config file path or override fields with corresponding command line arguments:

python your_script.py --config path/to/config.yaml \
--learning_rate 0.01 \
--data /data/dataset1 /data/dataset2
--print_config

Help command will is automatically generated based on the schema:

python your_script.py --help

Contributing

Contributions are welcome. Please fork the repository and submit a pull request with your changes.

License

This project is licensed under the MIT License. See the LICENSE file for more details.

Release files for safeconfig 1.0.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for safeconfig 1.0.7
File Size Uploaded
safeconfig-1.0.7.tar.gz 11.1 kB Details

Release files / safeconfig-1.0.7.tar.gz

Download URL safeconfig-1.0.7.tar.gz
Size 11.1 kB
Tags Source
SHA-256 checksum
How to use checksums
e3cdc846522e8966aa9e4b5dfd618f5ae662a2d9213633f9b34c4e0adb8fa3da
BLAKE2b-256 checksum
How to use checksums
744f289a89031e3c91378cee247c98d673b926d90e4cda9cb8cc4042f79c5ad5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.3

Release history Release notifications | RSS feed

This release

1.0.7 This release

1 release file

1.0.6

1 release file

1.0.5

1 release file

1.0.4

1 release file

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page