Skip to content

Latest commit

 

History

History
166 lines (124 loc) · 4.63 KB

README.rst

File metadata and controls

166 lines (124 loc) · 4.63 KB

Build Status Coverage Status

lazyconf

lazyconf is an insultingly simple tool for configuring python applications.

Dependencies

  • Python 2.7

Usage

The basic idea is that you run lazyconf configure in your project directory:

lazyconf configure

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.

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 called db, and a string in that section called user, 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 called db, and a string in that section called engine, 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.

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'

Bitdeli badge