.. default-role:: literal

.. include:: inc/preambule.txt

Accès aux variables 
====================

Protocole d'accès aux valeurs
-------------------------------

**Créole**

- Si la variable n'a pas été déclarée, une erreur est levée
- Si la variable a été déclarée, mais qu'aucune valeur n'a été définie, (ni valeur affectée, ni valeur par défaut) la valeur retournée est `[]` ou `""` ou `[""]` ou `["",""]`,
- Si la variable a été déclarée et qu'une valeur par défaut a été définie, la valeur retournée et la valeur par défaut,
- Si la variable a été déclarée et qu'une valeur a été définie, la valeur retournée est la valeur de la variable.

**tiramisu**

- Si la variable n'a pas été déclarée, une erreur est levée
- Si la variable a été déclarée, mais qu'aucune valeur n'a été définie, (ni valeur affectée, ni valeur par défaut) la valeur retournée est `None`,
- Si la variable a été déclarée et qu'une valeur par défaut a été définie, la valeur retournée et la valeur par défaut,
- Si la variable a été déclarée et qu'une valeur a été définie, la valeur retournée est la valeur de la variable.

la différence tient au fait de la valeur nulle (`None`) qui a été mal définie 
dès le début dans `Créole`.

Accès Créole par "dictionnaire"
--------------------------------

La définition est dans le `XML`

::

    <family name="general">

    <variable name="adresse_ip_eth0">

Le dictionnaire est chargé dans un `EoleDict()`

::

    from creole.cfgparser import EoleDict
    eoldict = EoleDict(...)

Un export dans un dictionnaire est necessaire pour manipuler les données

::

    from creole.parsedico import parse_dico

    flatdict = parse_dico(eoldict)

    assert dico['ip'] == '10.10.1.11'


le resultat de l'accès aux données vient de `typeole.EoleVar('ip').get_value()`


Accès `tiramisu` par espace de nommage
----------------------------------------


- espaces de nommages ;
- c'est la configuration qui est responsable de l'accès aux valeurs ;
- une configuration par accès direct (pas d'export) ;
- un point d'entrée unique aisément manipulable grâce aux espaces de nommage.

::

    from tiramisu.config import Config
    from tiramisu.option import OptionDescription
    subdescr = OptionDescription("creole", [IPOption('ip')])
    descr = OptionDescription("creole", [subdescr])
    config = Config(descr)
    assert config.creole.general.ip == '10.10.1.11'

Les valeurs sont dépendantes **de la configuration** et donc la responsabilité 
des valeurs dépend de la configuration et pas de la variable elle-même.



