2025-10-26 13:29:29 +01:00
|
|
|
Load Rougail configuration from Rougail command line informations
|
|
|
|
|
==================================================================
|
|
|
|
|
|
|
|
|
|
There is a lot you can do with the Rougail command line (rougail-cli), but sometimes you need to do a more advanced script.
|
|
|
|
|
|
|
|
|
|
Rather than duplicating the configuration, why not load the information from the configuration file, environment variables, or command line options?
|
|
|
|
|
|
|
|
|
|
We can loading a combination of source information but always in this order:
|
|
|
|
|
|
|
|
|
|
- configuration file
|
|
|
|
|
- environment variables
|
|
|
|
|
- commandline options
|
|
|
|
|
|
|
|
|
|
.. warning:: specific options reserve for command line (in namespace "cli") are not available in script
|
|
|
|
|
|
|
|
|
|
Then let's create an structual file:term:`structure file` :file:`dist/00-base.yml`:
|
|
|
|
|
|
|
|
|
|
.. code-block:: yaml
|
|
|
|
|
:caption: the :file:`dist/00-base.yml` file content
|
|
|
|
|
|
2025-10-29 17:18:55 +01:00
|
|
|
\%YAML 1.2
|
2025-10-26 13:29:29 +01:00
|
|
|
---
|
|
|
|
|
version: 1.1
|
|
|
|
|
|
|
|
|
|
my_variable: my_value_extra # a simple variable
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
Command line configuration file
|
|
|
|
|
-------------------------------
|
|
|
|
|
|
|
|
|
|
Create a command line configuration file :file:`.rougailcli.yml`:
|
|
|
|
|
|
|
|
|
|
.. code-block:: yaml
|
|
|
|
|
:caption: the :file:`.rougailcli.yml` file content
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
main_structural_directories: # directories where are place structural file
|
|
|
|
|
- dist
|
|
|
|
|
step.output: json # output is not console but json
|
|
|
|
|
|
|
|
|
|
Let's execute Rougail command line:
|
|
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
|
|
|
|
$ rougail
|
|
|
|
|
{
|
|
|
|
|
"my_variable": "my_value_extra"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Then, let's create the :term:`Tiramisu` objects via the following :file:`script.py` script:
|
|
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
:caption: the :file:`script.py` file content
|
|
|
|
|
|
|
|
|
|
from rougail import Rougail
|
|
|
|
|
rougail = Rougail()
|
|
|
|
|
try:
|
|
|
|
|
config = rougail.run()
|
|
|
|
|
print(config.value.get())
|
|
|
|
|
except Exception as err:
|
|
|
|
|
print(f"ERROR: {err}")
|
|
|
|
|
exit(1)
|
|
|
|
|
|
|
|
|
|
Let's execute `script.py`:
|
|
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
|
|
|
|
$ python3 script.py
|
2025-10-29 17:18:55 +01:00
|
|
|
|
|
|
|
|
ERROR: option "Directories where structural files are placed" is mandatory but has no value
|
2025-10-26 13:29:29 +01:00
|
|
|
|
|
|
|
|
As expected, the .rougailcli.yml file is not loaded because it is specific to the command line.
|
|
|
|
|
|
|
|
|
|
Let's modifying the script to do this:
|
|
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
:caption: the :file:`script.py` file content
|
|
|
|
|
|
|
|
|
|
from rougail import Rougail, RougailConfig
|
|
|
|
|
from rougail.cli.rougailconfig import load
|
|
|
|
|
load(RougailConfig, yaml_file=".rougailcli.yml")
|
|
|
|
|
rougail = Rougail()
|
|
|
|
|
try:
|
|
|
|
|
config = rougail.run()
|
|
|
|
|
print(config.value.get())
|
|
|
|
|
except Exception as err:
|
|
|
|
|
print(f"ERROR: {err}")
|
|
|
|
|
exit(1)
|
|
|
|
|
|
|
|
|
|
Let's execute `script.py`:
|
|
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
|
|
|
|
$ python3 script.py
|
|
|
|
|
{<TiramisuOption path="rougail">: {<TiramisuOption path="rougail.my_variable">: 'my_value_extra'}}
|
|
|
|
|
|
|
|
|
|
Environment variables
|
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
|
|
If we don't have .rougailcli.yml, it's possible to set option with environment variables, like this:
|
|
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
|
|
|
|
$ env ROUGAILCLI_MAIN_STRUCTURAL_DIRECTORIES=dist/ ROUGAILCLI_STEP.OUTPUT=json ROUGAILCLI_MAIN_NAMESPACE=test bin/rougail
|
|
|
|
|
{
|
|
|
|
|
"test": {
|
|
|
|
|
"my_variable": "my_value_extra"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Do the same with a script:
|
|
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
:caption: the :file:`script.py` file content
|
|
|
|
|
|
|
|
|
|
from rougail import Rougail, RougailConfig
|
|
|
|
|
from rougail.cli.rougailconfig import load
|
|
|
|
|
load(RougailConfig, env_prefix="ROUGAILCLI")
|
|
|
|
|
rougail = Rougail()
|
|
|
|
|
try:
|
|
|
|
|
config = rougail.run()
|
|
|
|
|
print(config.value.get())
|
|
|
|
|
except Exception as err:
|
|
|
|
|
print(f"ERROR: {err}")
|
|
|
|
|
exit(1)
|
|
|
|
|
|
|
|
|
|
Let's execute `script.py`:
|
|
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
|
|
|
|
$ env ROUGAILCLI_MAIN_STRUCTURAL_DIRECTORIES=dist/ ROUGAILCLI_STEP.OUTPUT=json ROUGAILCLI_MAIN_NAMESPACE=test python3 script.py
|
|
|
|
|
{<TiramisuOption path="test">: {<TiramisuOption path="test.my_variable">: 'my_value_extra'}}
|
|
|
|
|
|
|
|
|
|
Command line option
|
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
|
|
To reproduce this:
|
|
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
|
|
|
|
./bin/rougail --main_structural_directories dist/ --step.output json --main_namespace=new_test
|
|
|
|
|
{
|
|
|
|
|
"new_test": {
|
|
|
|
|
"my_variable": "my_value_extra"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Do this script:
|
|
|
|
|
|
|
|
|
|
.. code-block:: python
|
2025-10-29 17:18:55 +01:00
|
|
|
:caption: the :file:`script.py` file content
|
2025-10-26 13:29:29 +01:00
|
|
|
|
|
|
|
|
from rougail import Rougail, RougailConfig
|
|
|
|
|
from rougail.cli.rougailconfig import load
|
|
|
|
|
load(RougailConfig, commandline=True)
|
|
|
|
|
rougail = Rougail()
|
|
|
|
|
try:
|
|
|
|
|
config = rougail.run()
|
|
|
|
|
print(config.value.get())
|
|
|
|
|
except Exception as err:
|
|
|
|
|
print(f"ERROR: {err}")
|
|
|
|
|
exit(1)
|
|
|
|
|
|
|
|
|
|
.. code-block:: bash
|
2025-10-29 17:18:55 +01:00
|
|
|
|
2025-10-26 13:29:29 +01:00
|
|
|
$ python3 script.py --main_structural_directories dist/ --step.output json --main_namespace=new_test
|
|
|
|
|
{<TiramisuOption path="new_test">: {<TiramisuOption path="new_test.my_variable">: 'my_value_extra'}
|