lazyconf
lazyconf is an insultingly simple tool for configuring python applications. Use lazyconf to keep all of your app's configuration out of version control. See the django-base example for an example of how to use lazyconf.
Dependencies
- Python 2.7
Installation
pip install lazyconf
Usage
The basic idea is that you run lazyconf config
in your base directory:
lazyconf config
Follow the onscreen instructions to do the initial configuration. This does the following:
- Creates a
.lazy/
directory inside the current directory. - Generates a schema file (
.lazy/lazy.schema.json
), and a data file (.lazy/lazy.json
). - Creates a
.gitignore
file inside.lazy/
so that your configured settings (which may contain sensitive information) are never committed to git.
You are then safe to commit the .lazy folder to git, which will not contain any sensitive information. The next thing to do is update your schema file with all of the settings that you want to include in your configuration.
Using the data
To use the configuration generated by lazyconf, you can either use the command line tool lazyconf
, i.e.
lazyconf get -k db.user
> fareed
Or, you can include it in a Python file, and use the 'load' function to load any existing configuration:
>>> import lazyconf
>>> l = lazyconf.Lazyconf().load()
>>> l.get('db.engine')
'django.db.backends.postgresql_psycopg2'
If the python file loading lazyconf is not in the same folder as .lazy/
, you can point it at .lazy/
manually:
>>> import lazyconf
>>> l = lazyconf.Lazyconf().load('/home/fareed/.lazy/')
>>> l.get('db.engine')
'django.db.backends.postgresql_psycopg2'
To set an option from the command line, use lazyconf set
. This will set the option for the key and save the new data file. It uses the same validation rules as using lazyconf config
.
lazyconf set -k env.debug -v y
lazyconf get -k env.debug
> True
Schema Files
The schema file located in .lazy/lazy.schema.json
is the way lazyconf knows which questions to ask you, and what kind of answers to expect. The schema file follows the following format:
```
{
"example_section" : {
"example_option" : "",
"string_with_default" : "default",
"example_int" : 5,
"example_bool" : false,
"example_select" : ""
},
"example_optional_section" : {
"_enabled":false,
"optional_option" : "foobar"
},
"_internal": {
"labels": {
"example_section" : "Example Section Label",
"example_section.example_int" : "Example suboption label"
}
"selects": {
"example_section.exmple_select" : {
"option1" : "value1",
"option2" : "value2",
"option3" : "value3"
}
}
}
}
```
Sections
All options to configure are held within sections. A section is a JSON object where the key is the name of the section. In the above example, there are two sections: example_section
and example_optional_section
.
Optional Sections
To make a section optional, include a key/value pair inside the section with the key "_enabled"
, and a default boolean value. This will let the user skip over that section if it is not necessary to be configured.
"_internal"
"_internal"
is a JSON object that contains the following two JSON objects:
"labels"
: This object consists of key/value pairs which define labels to show the user running the configuration. For example, if you had a section calleddb
, and a string in that section calleduser
, you would use"db.user" : "Database User"
to assign the label 'Database User' to that string.-
"selects"
: This object consists of several objects which define 'selects', i.e. a way for the user to only be able to choose from a list of predetermined values. For example, if you had a section calleddb
, and a string in that section calledengine
, you could use the following object to allow the user to select from a list of values relating to the database engine you might happen to be using:"db.engine": { "postgres": "django.db.backends.postgresql_psycopg2", "mysql": "django.db.backends.mysql" }
Keywords
"_internal"
and "_enabled"
are keywords and should not be used as option names.
Contributing
Lazyconf is very much in its infancy at the moment, so I'd appreciate any bugs/issues, questions, comments, feedback or pull requests. Simply clone the repository and install the requirements:
pip install -r requirements.txt
To run the (albeit currently rather weak) test suite, run
coverage run --source=lazyconf,lib lazyconf/test.py