What is it?
Everett is a configuration library for Python apps.
Goals of Everett:
flexible configuration from multiple configured environments
easy testing with configuration
easy automated documentation of configuration for users
From that, Everett has the following features:
is flexible for your configuration environment needs and supports process environment, env files, dicts, INI files, YAML files, and writing your own configuration environments
facilitates helpful error messages for users trying to configure your software
has a Sphinx extension for documenting configuration including autocomponentconfig and automoduleconfig directives for automatically generating configuration documentation
facilitates testing of configuration values
supports parsing values of a variety of types like bool, int, lists of things, classes, and others and lets you write your own parsers
supports key namespaces
supports component architectures
works with whatever you’re writing–command line tools, web sites, system daemons, etc
This is a major release that sports three things:
Adjustments in Python support.
Everett 3.0.0 drops support for Python 3.6 and picks up support for Python 3.10.
Reworked namespaces so they work better with Everett components.
Previously, you couldn't apply a namespace after binding the configuration to a component. Now you can.
This handles situations like this component:
class MyComponent: class Config: http_host = Option(default="localhost") http_port = Option(default="8000", parser=int) db_host = Option(default="localhost") db_port = Option(default="5432", parser=int) config = ConfigManager.basic_config() # Bind the configuration to a specific component so you can only use # options defined in that component component_config = config.with_options(MyComponent) # Apply a namespace which acts as a prefix for options defined in # the component http_config = component_config.with_namespace("http") db_config = component_config.with_namespace("db")
Overhauled Sphinx extension.
This is the new thing that I'm most excited about. This fixes a lot of my problems with documenting configuration.
Everett now lets you:
document options and components:
autodocument all the options defined in a Python class
autodocument all the options defined in a Python module
This works much better with configuration in Django settings modules. This works with component architectures. This works with centrally defining configuration with a configuration class.
Further, all options and components are added to the index, have unique links, and are easier to link to in your documentation.
I updated the Antenna (Mozilla crash ingestion collector) docs:
I updated the Eliot (Mozilla Symbolication Service) docs:
Why you should take a look at Everett
Everett makes it easy to:
deal with different configurations between local development and server environments
write tests for configuration values
debug configuration issues
First-class docs. First-class configuration error help. First-class testing. This is why I created Everett.
If this sounds useful to you, take it for a spin. It's almost a drop-in
replacement for python-decouple and
style of configuration so it's easy to test out.
Where to go for more
For more specifics on this release, see here: https://everett.readthedocs.io/en/latest/history.html#january-13th-2022
Documentation and quickstart here: https://everett.readthedocs.io/
Source code and issue tracker here: https://github.com/willkg/everett