PlainConfiguration¶
- class upsilonconf.PlainConfiguration(**kwargs: Any)[source]¶
Mutable configuration.
PlainConfiguration is a mutable ConfigurationBase implementation. This means that values can be added, changed and/or deleted.
Added in version 0.7.0.
Warning
In the current implementation, using method names as keys is possible,
>>> conf = PlainConfiguration() >>> print(conf.items) <bound method ConfigurationBase.items of PlainConfiguration()> >>> conf["items"] = 123 >>> print(conf.items) 123
but it can lead to some unexpected behaviour.
>>> print(conf) {items: 123} >>> conf == {"items": 123} Traceback (most recent call last): ... TypeError: 'int' object is not callable
See also
ConfigurationBase
the configuration interface.
FrozenConfiguration
an immutable configuration.
Examples
Starting with a simple configuration.
>>> conf = PlainConfiguration(foo=0, bar="bar", baz={'a': 1, 'b': 2}) >>> print(conf) {foo: 0, bar: bar, baz: {a: 1, b: 2}}
Variables can be added, changed or removed as desired.
>>> conf.surprise = None >>> print(conf) {foo: 0, bar: bar, baz: {a: 1, b: 2}, surprise: None} >>> conf["surprise"] = [] >>> print(conf) {foo: 0, bar: bar, baz: {a: 1, b: 2}, surprise: []} >>> del conf.baz.a >>> print(conf) {foo: 0, bar: bar, baz: {b: 2}, surprise: []}
Creating a single value in a subconfig is possible, but only using indexing syntax, not with attribute syntax.
>>> conf.sub.val = 0 Traceback (most recent call last): ... AttributeError: 'PlainConfiguration' object has no attribute 'sub' >>> conf["sub", "val"] = -1 >>> print(conf) {foo: 0, bar: bar, baz: {b: 2}, surprise: [], sub: {val: -1}} >>> conf['surprise'] = {"val": "tada"} >>> print(conf) {foo: 0, bar: bar, baz: {b: 2}, surprise: {val: tada}, sub: {val: -1}}