Skip to content

Making YAML config files easier to parse and use by enabling dot notation

License

Notifications You must be signed in to change notification settings

edager/comfyconf

Repository files navigation

comfyconf

What is it for?

Using YAML configuration files for python require less boilerplate code, and accessing the values by dot notation.

Installation

pip install comfyconf

Usage

Basic

Create a config file in YAML and name it foo.yaml:

test:
  title: 'test' 
  ip: '127.0.0.1' 
  port: 5000

production:
  title: 'My amazing server' 
  ip: '1234.255.255.1' 
  port: 1234

Now, load it using make_config:

>>> from comfyconf import make_config   
>>> config = make_config("foo.yaml")
>>> config.test.ip
'127.0.0.1'
>>> config.production.port
1234  

Note that numerical keys are not allowed (even if they're strings in YAML), doing so will raise a ValueError.

Using ruamel.yaml as parser instead of pyyaml

If you prefer ruamel.yaml or need to parse YAML 1.2 document you can specify `"ruamel"`` as the reader:

>>> config = make_config("foo.yaml", reader="ruamel")

Validate configuration against a schema

If you need to be validate that the configuration is compatible with a schema, you can use validate_config:

First, create a schema:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "$defs": {  
    "connection": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "title": {"type": "string"},
        "ip": {"type": "string", "format":"ipv4"},
        "port": { "type": "integer", "minimum": 1, "maximum": 65535}
      },
      "required": ["title", "ip", "port"]          
    }
  },
  "type": "object",
  "properties": {
    "test": {"$ref": "#/$defs/connection"},
    "production": {"$ref": "#/$defs/connection"}
  }
}
>>> from comfyconf import make_config, validate_config   
>>> config = make_config("foo.yaml", reader="ruamel")
>>> validate_config(config, "schema.json", validator='json')

Currently, json-schema (validator='json') is the default but yamale schema can also be used (validator='yamale') if yamale is installed.

Contribute

If you find a bug or have a feature request, please raise on issue on Github.

Contributions are more than welcome, but please:

  1. Write unittest (pytest)
  2. Write Numpy styled docstrings

About

Making YAML config files easier to parse and use by enabling dot notation

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages