Metadata-Version: 2.1
Name: rougail
Version: 1.1.1
Summary: A consistency handling system that was initially designed in the configuration management
Author-email: Emmanuel Garette <gnunux@gnunux.info>
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Classifier: License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Natural Language :: English
Classifier: Natural Language :: French
Requires-Dist: ruamel.yaml ~= 0.18.6
Requires-Dist: pydantic ~= 2.9.2
Requires-Dist: jinja2 ~= 3.1.4
Requires-Dist: tiramisu >=5.0,<6
Requires-Dist: pylint ~= 3.0.3 ; extra == "dev"
Requires-Dist: pytest ~= 8.2.2 ; extra == "dev"
Requires-Dist: lxml ~= 5.2.2 ; extra == "dev"
Project-URL: Home, https://forge.cloud.silique.fr/stove/rougail
Provides-Extra: dev

![Logo Rougail](logo.png "logo rougail")

# Rougail

## Description

Rougail is a free full-featured configuration manager library written in python3.

The configuration is describe in YAML dictionary files.

Those dictionaries are converted into [Tiramisu](https://framagit.org/tiramisu/tiramisu) objects.

Rougail can be incorporated with other technologies and stacks regardless of whether they’re written in Python or not.

## Simple example

Create a directory:

```bash
# mkdir dict
```

## Dictionary

A dictionary is a variables description file.

Create the file `dict/dictionary.yml`:

```yml
---
version: 1.1
# describe a variable my_first_variable
# and a family with a variable my_second_variable
my_first_variable: my_value
my_family:
  my_second_variable: 1
```

## Generate variable

### With commandline:

```bash
# rougail -m dict
Variables:
┣━━ 📓 my_first_variable: my_value
┗━━ 📂 my_family
    ┗━━ 📓 my_second_variable: 1

```

### With default value:

Here is a python3 example file:

```python
from rougail import Rougail, RougailConfig
from pprint import pprint

RougailConfig['dictionaries_dir'] = ['dict']
rougail = Rougail()
config = rougail.run()
pprint(config.value.get(), sort_dicts=False)
```

The result is:

```json
{<TiramisuOption path="rougail">: {<TiramisuOption path="rougail.my_first_variable">: 'my_value',
                                   <TiramisuOption path="rougail.my_family">: {<TiramisuOption path="rougail.my_family.my_second_variable">: 1}}}
```

### With modified value


Use [Tiramisu](https://framagit.org/tiramisu/tiramisu) API to change values:

```python
from rougail import Rougail, RougailConfig
from pprint import pprint

RougailConfig['dictionaries_dir'] = ['dict']
rougail = Rougail()
config = rougail.get_config()
config.option('rougail.my_first_variable').value.set('modified_value')
config.option('rougail.my_family.my_second_variable').value.set(2)
pprint(config.value.get(), sort_dicts=False)
```

The destination file is generated with new values:

```json
{<TiramisuOption path="rougail">: {<TiramisuOption path="rougail.my_first_variable">: 'modified_value',
                                   <TiramisuOption path="rougail.my_family">: {<TiramisuOption path="rougail.my_family.my_second_variable">: 2}}}
```

# Link

* [Documentation](https://rougail.readthedocs.io/en/latest/)
* [Licence ](LICENSE)

# Related projects

* [Tiramisu](https://forge.cloud.silique.fr/gnunux/tiramisu)
* [Risotto](https://cloud.silique.fr/gitea/risotto/risotto)

