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:

1def inverse(exists_):
2    return not exists_

Here is the new option:

1create = BoolOption('create',
2                    'Create automaticly the file',
3                    multi=True,
4                    default_multi=Calculation(inverse, Params(ParamOption(exists_))))

download the config

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.