tiramisu/doc/status.txt

140 lines
4.2 KiB
Plaintext
Raw Normal View History

.. default-role:: literal
2013-05-21 18:42:56 +02:00
Local statuses and global setting
=====================================
2012-10-05 16:00:07 +02:00
Available configuration statuses
----------------------------------
2012-11-20 17:14:58 +01:00
The configuration's status lives in an `setting.Setting` object.
2012-11-19 16:48:47 +01:00
This configuration status corresponds to specific attributes or bunch of
2012-11-20 17:14:58 +01:00
attributes that can be accessed together with some `setting.Setting`
2012-11-19 16:48:47 +01:00
method:
**read write status**
The configuration can be accessed by `__get__` and `__set__`
properties, except for the `hidden` configuration options but, yes, it is
possible to modify a disabled option.
To enable read-write status, call
`congi.Config.read_write()`
2012-10-05 16:00:07 +02:00
**read only status**
2012-10-05 16:00:07 +02:00
The whole configuration is `frozen`, that is modifiying a value is
forbidden. We can access to a configuration option only with the
`__getattr__` property.
2012-10-05 16:00:07 +02:00
The configuration has not an access to the hidden options
2012-10-05 16:00:07 +02:00
but can read the disabled options.
To enable read only status, call `config.Config.read_only()`
.. csv-table:: **Configuration's statuses summary**
:header: " ", "Hidden", "Disabled", "Mandatory"
"read only status", `False`, `True`, `True`
"read-write status", `True`, `False`, `False`
.. _`frozenconfig`:
Freezing a configuration
---------------------------
2012-11-20 17:14:58 +01:00
At the configuration level, `setting.Setting.freeze` freezes
the whole configuration options.
2012-11-20 17:14:58 +01:00
- `test_option_type.test_frozen_value()`
- `test_option_type.test_freeze()`
2012-10-05 16:00:07 +02:00
.. _`frozen`:
2012-10-05 16:00:07 +02:00
It is possible to *freeze* a single `Option` object with
2012-11-20 17:14:58 +01:00
`option.Option.freeze()`. If you try to modify a frozen option, it
raises a `TypeError: trying to change a frozen option object`.
2012-11-20 17:14:58 +01:00
- `test_option_type.test_freeze_one_option()`
2012-10-05 16:00:07 +02:00
Moreover, frozen option can return his default value if
2012-11-20 17:14:58 +01:00
`option.Option.force_default()` has been called on this option,
see `test_option_default.test_force_default_on_freeze()`
Restricted access to an `Option()`
-----------------------------------
2013-05-21 18:42:56 +02:00
.. currentmodule:: tiramisu.setting
2013-05-21 18:42:56 +02:00
.. autoclass:: Property
2013-05-21 18:42:56 +02:00
The `properties` attribute is in charge of the access rules' option's value.
2013-05-21 18:42:56 +02:00
Configuration options access statuses are defined at configuration level
that corresponds to the `option.Option()`'s `properties` attribute,
for example: hidden, disabled.
2013-05-21 18:42:56 +02:00
Use the pythonic way to know if a property is there::
2013-05-21 18:42:56 +02:00
'hidden' in c.cfgimpl_get_settings()
'frozen' in c.cfgimpl_get_settings()[opt]
2013-05-21 18:42:56 +02:00
To access to the global settings::
2013-05-21 18:42:56 +02:00
cfg.cfgimpl_get_settings()
cfg.cfgimpl_get_settings()[option1]
2013-05-21 18:42:56 +02:00
to add, or suppress a global property::
2013-05-21 18:42:56 +02:00
cfg.cfgimpl_get_settings()[option1].append('hidden')
cfg.cfgimpl_get_settings()[option1].remove('hidden')
2013-05-21 18:42:56 +02:00
to activate, deactivate properties::
2013-05-21 18:42:56 +02:00
cfg.cfgimpl_get_settings().append('hidden')
cfg.cfgimpl_get_settings().remove('hidden')
Value owners
-------------
2013-05-21 18:42:56 +02:00
.. method:: tiramisu.config.Config.getowner()
This method can retrieve an Option's owner.
2012-10-05 16:00:07 +02:00
Every configuration option has a **owner**. When the option is
instanciated, the owner is `default` because a default value has been
set (including `None`, take a look at the tests).
2013-05-21 18:42:56 +02:00
- At the instance of the `Config` object, the value owner is `owners.default` because
the default values are set at the instance of the configuration option object,
2013-05-21 18:42:56 +02:00
- at the modification of an option, the owner is `owners.default`, (which is `user`)
Special behaviors for an option
---------------------------------
2012-10-05 16:00:07 +02:00
**mandatory**
A mandatory option shall return a value. If a value, or a default value
has not been set, a error is raised.
**has a callback**
2012-10-05 16:00:07 +02:00
This means that it is a calculated value and therefore automatically
protected it cannot be modified by attribute access.
2012-10-05 16:00:07 +02:00
2013-05-21 18:42:56 +02:00
**force_store_value**
if the configuration option has a default value, the default is
returned, otherwise the value is calculated.
2012-11-20 17:14:58 +01:00
Its inner state is represented by `option.Option.force_default()`
2012-10-05 16:00:07 +02:00
Configuration options have default values that are stored in the
`Option()` object itself. Default values, the `default`, can be set in
various ways.
2012-10-05 16:00:07 +02:00
If a default value is modified by overriding it, not only the value of
the option resets to the default that is proposed, but the owner is
2013-05-21 18:42:56 +02:00
modified too, it is reseted to `owners.default`.