tiramisu/docs/api_global_permissives.rst

93 lines
2.9 KiB
ReStructuredText

==================
Global permissive
==================
Permissives allow access, during a calculation, to a normally unavailable variable.
In the :doc:api_property example we add a new `create` option that has a calculation with the option `exists` as parameter.
This option has a calculated default_multi value. If the file exists (so `exists` option is True) we don't want create automaticly the file:
.. literalinclude:: src/api_global_permissive.py
:lines: 7-8
:linenos:
Here is the new option:
.. literalinclude:: src/api_global_permissive.py
:lines: 20-23
:linenos:
:download:`download the config <src/api_global_permissive.py>`
Get/add/pop/reset global permissive
=====================================
Let's try this config:
>>> config.property.read_write()
>>> config.option('new.filename').value.set(['/etc', '/unknown'])
>>> config.value.get()
{'new.filename': ['/etc', '/unknown'], 'new.exists': [True, False], 'new.create': [False, True]}
Now we want to see `advanced` option. But how calculate create value?
>>> config.property.add('advanced')
>>> try:
... config.value.get()
... except ConfigError as err:
... print(err)
unable to carry out a calculation for "Create automaticly the file", cannot access to option "This file exists" because has property "advanced"
We just have to add `advanced` permissive to allow calculation:
>>> config.permissive.add('advanced')
>>> config.value.get()
{'new.filename': ['/etc', '/unknown'], 'new.create': [False, True]}
At any time we can retrieve all global permissive:
>>> config.permissive.get()
frozenset({'hidden', 'advanced'})
We can remove on permissive:
>>> config.permissive.pop('hidden')
>>> config.permissive.get()
frozenset({'advanced'})
And finally we can reset all permissives:
>>> config.permissive.reset()
>>> config.permissive.get()
frozenset()
Default permissives
============================
Tiramisu estimate default permissive.
All properties added in `read write` mode and removed in `read only` mode are, by default, included in permissive list when we change mode:
>>> default = config.property.getdefault('read_write', 'append')
>>> config.property.setdefault(frozenset(default | {'advanced'}), 'read_write', 'append')
>>> default = config.property.getdefault('read_only', 'remove')
>>> config.property.setdefault(frozenset(default | {'advanced'}), 'read_only', 'remove')
>>> config.property.read_write()
>>> config.permissive.get()
frozenset({'advanced', 'hidden'})
Importation and exportation
================================
In config, all permissive (global's and option's permissives) can be exportated:
>>> config.permissive.exportation()
{None: frozenset({'hidden', 'advanced'})}
And reimported later:
>>> export = config.permissive.exportation()
>>> config.permissive.importation(export)
.. note:: The exportation format is not stable and can be change later, please do not use importation otherwise than jointly with exportation.