================== Config file format ================== The configuration file parser is provided by `kobo `_ The file follows a Python-like format. It consists of a sequence of variables that have a value assigned to them. :: variable = value The variable names must follow the same convention as Python code: start with a letter and consist of letters, digits and underscores only. The values can be either an integer, float, boolean (``True`` or ``False``), a string or ``None``. Strings must be enclosed in either single or double quotes. Complex types are supported as well. A list is enclosed in square brackets and items are separated with commas. There can be a comma after the last item as well. :: a_list = [1, 2, 3, ] A tuple works like a list, but is enclosed in parenthesis. :: a_tuple = (1, "one") A dictionary is wrapped in brackets, and consists of ``key: value`` pairs separated by commas. The keys can only be formed from basic types (int, float, string). :: a_dict = { 'foo': 'bar', 1: None } The value assigned to a variable can also be taken from another variable. :: one = 1 another = one Anything on a line after a ``#`` symbol is ignored and functions as a comment. Importing other files ===================== It is possible to include another configuration file. The files are looked up relative to the currently processed file. The general structure of import is: :: from FILENAME import WHAT The ``FILENAME`` should be just the base name of the file without extension (which must be ``.conf``). ``WHAT`` can either be a comma separated list of variables or ``*``. :: # Opens constants.conf and brings PI and E into current scope. from constants import PI, E # Opens common.conf and brings everything defined in that file into current # file as well. from common import * .. note:: Pungi will copy the configuration file given on command line into the ``logs/`` directory. Only this single file will be copied, not any included ones. (Copying included files requires a fix in kobo library.) The JSON-formatted dump of configuration is correct though. Formatting strings ================== String interpolation is available as well. It uses a ``%``-encoded format. See Python documentation for more details. :: joined = "%s %s" % (var_a, var_b) a_dict = { "fst": 1, "snd": 2, } another = "%(fst)s %(snd)s" % a_dict