Customizing Rougail's configuration
=======================================

The `Rougail`\ 's configuration is located in the `RougailConfig` object:

.. code-block:: python 

    from rougail import RougailConfig

It's just a python dictionary with different keys.

To modify it, just do like with any python dictionary:

.. code-block:: python 

    RougailConfig[key] = value

Configuring the dictionnaries loading
-----------------------------------------

Setting the dictionnaries folders
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

There are two types of dictionary directories:

- the main dictionaries with the `dictionaries_dir` key. The default setting is `['/srv/rougail/dictionaries']`. This setting shall list the directories folders containing dictionaries files.

- the extra dictionaries with the `extra_dictionaries` key. The value is a dictionary with all namespaces. The key being the namespace and the value being a directory listing.

For example, to add the extra example you must do:

.. code-block:: python 

    RougailConfig['extra_dictionaries']['example'] = ['/dir1', '/dir2']

Dictionaries are loaded in the same order as the main dictionaries.

The functions file
~~~~~~~~~~~~~~~~~~~~~~~

The file which contains the custom functions is managed in the `functions_file` key and has the default value `/srv/rougail/functions.py`. This key can contain a list if there are several files.

.. important:: Functions must return a value, even if the variable being calculated is a :term:`multiple <multi>` variable. If the function can return a multiple value (a list), you must put the name of the function in the `multi_functions` key.

The `auto_freeze` variable
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The `auto_freeze` property is only applied until a specific variable becomes `True`. By default the variable name is `instantiated_module`, but it is possible to change the name of this variable via the `auto_freeze_variable` key.

Modes
~~~~~~~~

A mode is a solution that allows a variable or a family to be categorized. It can be used, for example, to define a level of expertise or a particular context. Have a look at the :term:`mode definition <mode>` for further details.
   
Modes are customizable in Rougail.

Often, we categorize by level of expertise to access a variable: `basic`, `standard` and `advanced`.

Default mode for a family 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The default mode for a family is `basic`. It is possible to change the default mode of a family via the `default_family_mode` key.

Default mode for a variable
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The default mode for a variable is `standard`. It is possible to change the default mode of a variable via the `default_variable_mode` key.

Internal functions names 
~~~~~~~~~~~~~~~~~~~~~~~~~~~

It is possible to add internal functions via the `internal_functions` key.
