Let's create a custom function
==============================

We create the complementary :term:`structure file` named :file:`dict/01-function.yml` so that the  `my_variable_jinja` variable is :term:`calculated`:

.. code-block:: yaml

    %YAML 1.2
    ---
    version: 1.1

    my_variable_jinja:
      default:
        type: jinja
        jinja: "{{ return_no() }}"
    ...

Then let's define the :func:`return_no` function in :file:`functions.py`:

.. code-block:: python
   :caption: the :file:`functions.py` content

   def return_no():
       return 'no'

Then, let's create the :term:`Tiramisu` objects via the following script:

.. code-block:: python
    :caption: the `script.py` file content

    from rougail import Rougail, RougailConfig

    RougailConfig['main_structural_directories'] = ['dict']
    RougailConfig['extra_namespaces']['example'] = ['extras/']
    RougailConfig['functions_file'] = 'functions.py'
    rougail = Rougail()
    config = rougail.get_config()
    print(config.value.dict())

Let's execute `script.py`:

.. code-block:: bash

    $ python3 script.py
    {'rougail.my_variable': 'my_value', 'rougail.my_variable_jinja': 'no', 'example.my_variable_extra': 'my_value_extra'}

The value of the `my_variable_extra` variable is calculated, and it's value comes from the :func:`return_no` function.
