Emmanuel Garette
69de44bbb4
better sqlalchemy integration
2016-09-30 22:45:33 +02:00
Emmanuel Garette
6d71749014
force_store_value is rebuild if needed
2016-09-22 08:27:18 +02:00
Emmanuel Garette
ef5bcbf98b
user could delete informations set in config
2016-04-28 11:31:04 +02:00
Emmanuel Garette
6ef85c4974
force_permissive in cfgimpl_get_home_by_path
2016-04-07 16:14:01 +02:00
Emmanuel Garette
7460f38a88
update sqlalchemy storage for values et settings
2016-03-29 09:31:00 +02:00
Emmanuel Garette
7305cfa134
python 3.4 support
2016-03-19 21:27:37 +01:00
Emmanuel Garette
da89c1aa58
force_store_value is now used directly when configuration is loaded
2016-03-07 16:13:41 +01:00
Emmanuel Garette
8a21d49948
setattr instead of _setattr
2016-01-25 15:57:34 +01:00
Emmanuel Garette
2842abdd46
remove try/except
2016-01-06 22:37:11 +01:00
Emmanuel Garette
b521c459ee
remove all try/except
2016-01-03 21:18:52 +01:00
Emmanuel Garette
cc6b4ad7c4
remove a try/except
2015-12-31 18:35:31 +01:00
Emmanuel Garette
ce162280ad
simplify _setvalue
2015-12-31 18:20:36 +01:00
Emmanuel Garette
d0e2b5d8c4
remove some try/except
2015-12-30 22:32:07 +01:00
Emmanuel Garette
df233d3165
add some optimisations
2015-12-22 22:06:14 +01:00
Emmanuel Garette
59f59b0b1b
add some optimisation
2015-12-14 23:37:15 +01:00
Emmanuel Garette
a521a6d322
requires could be apply to a slave and properties could be different
2015-11-29 23:03:08 +01:00
Emmanuel Garette
ab555966f7
use python-coverage to delete dead part of code
2015-11-24 10:58:19 +01:00
Emmanuel Garette
54ca54e505
separate value in slave
2015-11-19 22:25:00 +01:00
Emmanuel Garette
a0de1109f7
optimise mandatory_warnings
2015-10-29 09:03:13 +01:00
Emmanuel Garette
5ea92d3460
need new settings when create fake_config
2015-09-17 19:14:56 +02:00
Emmanuel Garette
44cd618704
remove pep8 validation errors
2015-07-24 17:54:10 +02:00
Emmanuel Garette
6cc74506fb
Some optimisations
2015-05-03 09:56:03 +02:00
Emmanuel Garette
10768a6067
refactor validation
2015-04-18 22:53:45 +02:00
Emmanuel Garette
2ccf92f879
improve GroupConfig/MetaConfig
...
add set_value in GroupConfig
2014-12-01 21:49:50 +01:00
Emmanuel Garette
c6c331eb54
in find_firsts get option only one time
2014-11-11 11:31:23 +01:00
Emmanuel Garette
7c5b6e2db2
improve performance
2014-11-10 23:15:08 +01:00
Emmanuel Garette
f03cbeadb7
better performance in find_firsts
...
_is_build_cache not set in dictionary storage
2014-11-10 21:00:30 +01:00
Emmanuel Garette
4217508f3f
works on sqlalchemy storage
2014-11-10 09:13:44 +01:00
Emmanuel Garette
c75867720f
add force_permissive in mandatory_warnings
2014-10-26 16:39:24 +01:00
Emmanuel Garette
4310d59991
add force_permissive to config __iter__
2014-10-26 10:26:23 +01:00
Emmanuel Garette
b64189f763
add DynOptionDescription
2014-06-19 23:22:39 +02:00
Emmanuel Garette
6d8137160c
'getattr' in optiondescription can return a bound method
2014-04-15 21:48:31 +02:00
Emmanuel Garette
5d8b5719a0
Merge branch 'master' into orm
...
Conflicts:
test/test_config_api.py
tiramisu/autolib.py
tiramisu/config.py
tiramisu/option.py
tiramisu/value.py
2014-04-13 10:30:42 +02:00
Emmanuel Garette
299e51e806
start works on storage
2014-04-12 22:47:52 +02:00
Emmanuel Garette
aa0734591d
change None to undefined when it's needed
2014-04-12 21:57:17 +02:00
Emmanuel Garette
3ab0688c46
Arity change, remove force_properties:
...
* tiramisu/config.py (in cfgimpl_get_home_by_path and getattr)
* tiramisu/value.py (in getitem):
2014-04-12 21:37:20 +02:00
Emmanuel Garette
cd4d3527c7
split tiramisu/option.py and add MasterSlaves object
2014-04-12 17:55:13 +02:00
Emmanuel Garette
967a48412d
Merge branch '_getattr'
2014-04-01 09:51:43 +02:00
Emmanuel Garette
0b2e5f90e2
same arity for _getattr and getattr
2014-04-01 09:51:25 +02:00
Emmanuel Garette
1ae6f0c6e8
Merge branch 'mandatory'
2014-04-01 09:29:34 +02:00
Emmanuel Garette
150b490200
config.mandatory_warnings return always None
2014-04-01 09:29:07 +02:00
Emmanuel Garette
a3c5e6034f
Merge branch 'force_permissive'
...
Conflicts:
test/test_freeze.py
2014-03-31 22:38:56 +02:00
Emmanuel Garette
cd52729952
add force_permissive in config's method (iter_all, iter_group, find, find_first and make_dict)
...
rename _getattr to getattr
2014-03-31 22:34:57 +02:00
Emmanuel Garette
ff5376a382
properties are check now in getowner
...
get_modified_values works good with force_store_value
2014-03-29 20:31:56 +01:00
Emmanuel Garette
a04a61f1a4
Merge branch 'master' into lgpl
2014-03-15 10:11:17 +01:00
Emmanuel Garette
f7d31bfa92
Merge branch 'master' into force-cache
...
Conflicts:
translations/fr/tiramisu.po
translations/tiramisu.pot
2014-03-15 10:09:19 +01:00
Emmanuel Garette
544cd93c73
can make_dict with disabled suboption
2014-03-12 14:57:36 +01:00
Emmanuel Garette
6e8b570a37
mandatory_warnings is now in values and add force_cache to values
2014-03-09 20:06:44 +01:00
Emmanuel Garette
98bd35ad36
Merge branch 'master' into orm
...
Conflicts:
tiramisu/config.py
tiramisu/option.py
2014-02-04 21:54:30 +01:00
Emmanuel Garette
a067d2cdd9
add some tests
2014-02-04 21:14:30 +01:00
Emmanuel Garette
5646fc35a2
Merge branch 'master' into orm
...
Conflicts:
test/test_parsing_group.py
2014-02-03 22:11:58 +01:00
Emmanuel Garette
8d10ad4002
add tests
2014-02-02 22:47:46 +01:00
Emmanuel Garette
5897231421
Merge branch 'master' into orm
...
Conflicts:
test/test_dereference.py
test/test_state.py
tiramisu/config.py
tiramisu/value.py
2014-02-02 18:52:13 +01:00
Emmanuel Garette
26158fc3c4
update test for metaconfig serialization
2014-02-02 18:33:21 +01:00
Emmanuel Garette
f8faec408f
Merge branch 'master' into metaconfig
2014-02-02 18:21:22 +01:00
Emmanuel Garette
8709386570
__getattr__ OD
2014-02-01 18:35:18 +01:00
Emmanuel Garette
313b03b246
cache in sql works
2014-02-01 16:26:23 +01:00
Emmanuel Garette
880b6366eb
Merge branch 'master' into orm
...
Conflicts:
tiramisu/setting.py
2014-01-25 16:39:32 +01:00
Emmanuel Garette
138018dfe9
if we delete all reference to a Config and we have reference to old SubConfig, Values, Multi or Settings, make a ConfigError instead of AttributError on NoneType object
2014-01-25 11:20:11 +01:00
Emmanuel Garette
3b3e5216fe
cache
2014-01-25 10:15:25 +01:00
Emmanuel Garette
cde04d654a
Merge branch 'master' into orm
...
Conflicts:
tiramisu/setting.py
2014-01-09 20:32:17 +01:00
Emmanuel Garette
172a33f842
mandatory_warnings never raises ConfigError
2013-12-16 14:20:35 +01:00
Emmanuel Garette
64ca069a0b
Merge branch 'master' into orm
...
Conflicts:
test/test_config.py
tiramisu/autolib.py
tiramisu/option.py
tiramisu/value.py
2013-12-12 17:50:42 +01:00
Emmanuel Garette
374c56a9c8
first version with sqlalchemy option's storage
2013-11-23 23:34:17 +01:00
gwen
384b30210c
find and find_first's new argument
2013-11-04 17:15:47 +01:00
Emmanuel Garette
b606d23801
add imp_meta
2013-10-15 18:23:36 +02:00
Emmanuel Garette
feeb9842f5
serialize metaconfig/groupconfig
2013-09-30 16:22:08 +02:00
Emmanuel Garette
6b7db20716
Merge branch 'master' into metaconfig
2013-09-28 22:49:50 +02:00
Emmanuel Garette
b7f85b8559
Merge branch 'master' into lgpl
2013-09-28 18:43:46 +02:00
gwen
162ae02df8
refactor (warnings_only)
2013-09-27 09:52:18 +02:00
Emmanuel Garette
3073940ca4
can't assign to an OptionDescription
2013-09-26 22:35:12 +02:00
Emmanuel Garette
a08af2383d
comment config
2013-09-23 22:55:54 +02:00
Emmanuel Garette
8a7078d3b0
gpl to lgpl
2013-09-22 22:33:09 +02:00
Emmanuel Garette
d2f101b7bb
didnot getattr a second time in find if not needed
2013-09-22 21:54:07 +02:00
Emmanuel Garette
051f1c8774
tiramisu/config.py:
...
- find byvalue support Multi
tiramisu/value.py:
- Multi's pop comment
2013-09-22 21:23:12 +02:00
Emmanuel Garette
c84d13a1c6
we can serialize Config now
2013-09-22 20:57:52 +02:00
Emmanuel Garette
7165f73292
add metaconfig
2013-09-17 09:02:10 +02:00
Emmanuel Garette
f8b0a53c3f
cache is always a dictionary in memory
2013-09-07 10:31:39 +02:00
Emmanuel Garette
22bfbb9fa4
storage no more in setting.py, code is now in storage/__init__.py
2013-09-06 23:15:36 +02:00
Emmanuel Garette
aeeaf6ec14
impl_get_information and impl_set_information are, now, persistent in storage
2013-09-03 10:38:38 +02:00
gwen
fbf05ba5e4
python 3 compatibility
...
remove __eq__ and __ne__ in Option
2013-08-28 21:13:42 +02:00
Emmanuel Garette
acd27fb56c
huge use of weakrefs to remove memoryleaks due to circular references
2013-08-27 11:39:32 +02:00
Emmanuel Garette
36def6533f
store session in dictionary storage
2013-08-27 09:46:52 +02:00
gwen
551b9fb1e3
getting stated documentation
2013-08-26 17:14:14 +02:00
Emmanuel Garette
6b9d5aed59
add enumerate and delete method for manage storage
2013-08-25 21:57:11 +02:00
Emmanuel Garette
dcb12dac02
can change storage with set_storage, storage's name is store in storage object and storage is create with get_storage
2013-08-25 20:49:24 +02:00
Emmanuel Garette
e4c129efc5
getowner need now an option
2013-08-24 22:32:54 +02:00
Emmanuel Garette
4c27cb586d
in __setattr__, name should never be object's variable name
...
remove context in type_ find's option
find_first_context return AttributError if no results
2013-08-24 21:26:10 +02:00
Emmanuel Garette
6708fe4522
is not config in other, __neq__ should return True
2013-08-24 18:04:19 +02:00
Emmanuel Garette
a7d784ba3e
is not config in other, __neq__ should return True
2013-08-24 18:04:11 +02:00
Emmanuel Garette
196d270cc9
_calc_requirement is a set, not a tuple
2013-08-24 16:34:08 +02:00
gwen
0db7ef72a6
automatic API documentation
2013-08-23 11:16:26 +02:00
Emmanuel Garette
b6bb685ca5
key is now always path and change opt by path dictionary storage
2013-08-21 22:21:50 +02:00
Emmanuel Garette
707a215a2c
pep8
2013-08-21 18:34:32 +02:00
Emmanuel Garette
0d5a447eb3
add persistent option for db
2013-08-20 22:45:11 +02:00
Emmanuel Garette
ace7f6f828
merge from master
2013-08-20 16:33:32 +02:00
gwen
564fecc261
pep 8 lines too long
2013-08-20 12:08:02 +02:00
Emmanuel Garette
e826f3d1c6
we can personalise storage easily
2013-08-20 09:47:12 +02:00
Emmanuel Garette
df7d6759cd
add sqlite plugin
2013-08-19 11:01:21 +02:00
Emmanuel Garette
f6f709f83d
split cache/value/setting in plugin
2013-08-14 23:06:31 +02:00
Emmanuel Garette
e9ffd96a28
update translation
2013-07-18 21:25:07 +02:00
Emmanuel Garette
e6c3104681
translation
2013-07-17 23:05:43 +02:00
Emmanuel Garette
bc054d75af
translation
2013-07-17 23:02:50 +02:00
Emmanuel Garette
15ac8c2872
update french translation
2013-07-17 22:30:35 +02:00
Emmanuel Garette
c06659012b
Config: __str__ raise if no str/unicode value
2013-07-03 21:56:31 +02:00
Emmanuel Garette
4b5d9b4229
__str__ method could return unicode object, force to decode in str
2013-07-01 16:49:10 +02:00
Emmanuel Garette
75f7e7ce5d
callback with option in params which is in an hidden optiondescription
2013-06-26 16:26:42 +02:00
gwen
c6c422f472
docstrings and api
2013-05-23 17:51:50 +02:00
gwen
879a415e75
add docstrings
2013-05-23 14:55:52 +02:00
gwen
0e6032dd88
new api documentation
2013-05-21 18:42:56 +02:00
Emmanuel Garette
e131fdc5a5
add cfgimpl_get_children for MetaConfig and informations
2013-05-21 11:09:09 +02:00
gwen
89dca8d707
suppress get_consistencies() method
2013-05-14 17:40:42 +02:00
Emmanuel Garette
6de65859b4
* config herite from BaseInformation class
...
* _cfgimpl_ => _impl_
* optimpl_ => impl_
* properties/permissives are now set/frozenset
* validation raise ValueError if not valid, didn't return anything otherwise
* consistencies are now validate in setting and when deleting value
* ip/network with netmask consistency now works
* DomainnameOption now works
* if no validation, don't set cache for value
* symlinkoption: remove path (not used)
2013-05-08 18:14:42 +02:00
Emmanuel Garette
2d57ed160e
work on MetaConfig
2013-05-02 11:34:57 +02:00
Emmanuel Garette
f28288fbba
In make_dict check PropertyConfigError for OptionDescription
...
Begin work's on MetaConfig
2013-04-24 11:47:01 +02:00
Emmanuel Garette
e883e5b89e
remove _setoption in SymLinkOption
...
objimpl_ => optimpl_
ConflictConfigError => ConflictError
add read_write/read_only/getowner in Config
2013-04-22 09:19:05 +02:00
Emmanuel Garette
682d9fe207
add option name's validation and rename Option method with objimpl_
2013-04-20 21:58:52 +02:00
Emmanuel Garette
54fe8d0f4b
cache for properties is now in get_properties and not for validate_properties
2013-04-20 11:25:14 +02:00
Emmanuel Garette
a11768ef43
remove expired cache with config.cfgimpl_reset_cache(True)
2013-04-19 22:42:33 +02:00
Emmanuel Garette
324c3d2cf6
* to "reset" a value, now you just have to delete it
...
config.unwrap_from_path("string").reset(config) => del(config.string)
* add cache for value/setting to 5 secds
to "reset" cache just do: config.cfgimpl_clean_cache()
* can desactivate cache by removing "expire" property
2013-04-18 20:26:40 +02:00
Emmanuel Garette
d5e1cb6576
pass force_properties to value's _setitem and remove config's setoption
2013-04-17 23:19:53 +02:00
Emmanuel Garette
80438b1495
Rename AmbigousOptionError as ConflictOptionError
2013-04-17 21:50:31 +02:00
Emmanuel Garette
3170237c8e
properties validation not in setting and now launch when modify multi
2013-04-17 21:33:34 +02:00
Emmanuel Garette
656b751995
mandatory is a true property (no more MandatoryError) + tests
2013-04-16 22:44:16 +02:00
Emmanuel Garette
6097f3af84
only catch PropertiesOptionError
2013-04-16 12:04:20 +02:00
Emmanuel Garette
16801ad1b2
SubConfig: first argument must be a OD
2013-04-16 11:51:48 +02:00
Emmanuel Garette
9357b342c1
review exception
2013-04-14 12:01:32 +02:00
Emmanuel Garette
9644dd3661
add gettext support
2013-04-13 23:09:05 +02:00
Emmanuel Garette
9c2dcc164c
attribute in Option now starts with '_'
...
add ValidateError
add consistancies in Option
remove byattr in find
2013-04-13 22:50:55 +02:00
Emmanuel Garette
26568dc45a
Values validate now value
2013-04-11 11:30:58 +02:00
Emmanuel Garette
0c5ab9df18
don't launch apply_requires more than needed
2013-04-08 16:12:23 +02:00
Emmanuel Garette
67e67a5020
NoValueReturn is not needed now + apply_requires is now in settings
2013-04-08 16:05:56 +02:00
Emmanuel Garette
d8b68fa1ec
suppress _cfgimpl_parent and _cfgimpl_get_path() from SubConfig
2013-04-05 16:59:48 +02:00
Emmanuel Garette
88ea962d82
tiramisu/config.py: _cfgimpl_subconfigs is not used
2013-04-05 12:31:50 +02:00
Emmanuel Garette
d100d66548
tiramisu/config.py can specify return type for find ('option', 'value', 'path') and remove get
...
user need replace config.get(value) by config.find(byname="value", type_='value')
2013-04-05 12:20:33 +02:00
Emmanuel Garette
c918191d21
permissives are for a specified option not config
2013-04-04 15:14:16 +02:00
Emmanuel Garette
9006dca09f
set permissive to cfgimpl_get_home_by_path
2013-04-04 12:16:18 +02:00
Emmanuel Garette
e9902d8ce2
rewrite make_dict
2013-04-04 11:24:00 +02:00
Emmanuel Garette
e6f00948f3
optimisations and all is properties
2013-04-03 12:20:26 +02:00
gwen
8181d1b596
build cache builds correctly now
2013-03-27 17:01:20 +01:00
Emmanuel Garette
201f9d6db4
remise en fonction des self._cfgimpl_slots
2013-03-27 16:41:22 +01:00
Emmanuel Garette
d00153787d
Le cache des paths est dans l'OptionDescription
...
Utilisation des slots pour la Config
Il faut 566Mo de mémoire pour charger 50 variantes de 100 serveurs chacuns (5000 serveurs en tout).
ref #5111
2013-03-27 16:17:45 +01:00
Emmanuel Garette
899f864f8d
works on performante
2013-03-26 10:29:49 +01:00
Emmanuel Garette
4f3db9cbc6
support break in iterator
2013-03-25 14:21:30 +01:00
Emmanuel Garette
087f7e3a75
cfgimpl_permissive is not the permissive param
2013-03-14 17:51:51 +01:00
Emmanuel Garette
9e81ae4737
get_home_by_path is a public method
2013-03-14 16:07:26 +01:00
Emmanuel Garette
15beeda0f0
add permissive in config
2013-03-14 11:31:44 +01:00
gwen
11ad037af9
iter on all objects
2013-03-07 11:02:18 +01:00
Emmanuel Garette
9b3eb33d27
generate correct len for slave if no value
2013-03-06 17:17:33 +01:00
gwen
4660f58608
valid name accepts only str type
2013-03-06 09:22:56 +01:00
gwen
df3753c36b
finally a getvalue without a getattr
2013-02-27 11:09:13 +01:00
gwen
8be48e5eba
pep8
2013-02-25 16:24:30 +01:00
gwen
ea7d297c9b
private method _get_multitype()
2013-02-25 15:12:09 +01:00
gwen
7b4f3b5d36
option's name shall not have an api's method name
2013-02-25 11:33:20 +01:00
gwen
8f4efe6b00
add masters/slaves in the Values()
2013-02-22 11:09:17 +01:00
gwen
e6d5d349c8
refactoring values
2013-02-21 17:07:00 +01:00
gwen
b69ecbd2eb
update of the doc
2013-02-19 11:24:17 +01:00
gwen
a8e6bac87f
refactoring, the values are in an OptionValues object
2013-02-08 11:50:22 +01:00
gwen
9259a6e3f7
values are in value objects now
2013-02-07 16:20:21 +01:00
gwen
a404c4c992
masters shall have the same names as groups
2013-02-06 16:21:30 +01:00
gwen
6a3b7102b5
adds a freeze_everything possibility
2013-02-06 14:59:24 +01:00
Daniel Dehennin
170698a5e3
Find breaks on "disabled" property
...
The exception was raised during unwrap_from_path() call.
* tiramisu/config.py (_filter_by_attrs): do not catch exception arround
getattr().
(_find): continue to next option if unwrap_from_path() raise
PropertiesOptionError.
Fixes : #4728 @5m
2013-01-31 14:38:48 +01:00
Daniel Dehennin
f494bb1502
Better raise message
...
* tiramisu/config.py (Config._valid_len): use master and slave name and
value.
2013-01-30 18:04:55 +01:00
gwen
e2a02c5b7a
find raises an exception if no option found Fixes #4721
2013-01-28 09:55:51 +01:00
gwen
189053ad03
master subgroups that have subgroups
2013-01-11 09:46:41 +01:00
gwen
f9d6f62a70
multi defaults value addition cinematics
2013-01-10 12:03:59 +01:00
gwen
cda5d8c0bd
generic owners shall live in settings
2012-12-11 11:18:53 +01:00
gwen
ca2f4487dd
add owner
2012-12-10 14:38:25 +01:00
gwen
cd50cf7551
owners are *real* objects now
2012-12-10 14:10:05 +01:00
gwen
e118f07539
groupe_types are real types now
2012-12-06 18:14:57 +01:00
gwen
7574ac43aa
Multi()'s and append
2012-12-05 10:54:32 +01:00
gwen
7784a82cde
tests on group types
2012-12-05 09:41:53 +01:00
gwen
0db34bbeba
master len without getattr
2012-12-04 16:22:39 +01:00
gwen
6538231817
pop and append in multi values
2012-12-04 15:18:13 +01:00
gwen
4393da13ab
validation of the len of the multi in a group
2012-12-04 12:06:26 +01:00
gwen
d633574cc5
comparison failed
2012-12-03 15:48:04 +01:00
gwen
43af9cf7f7
getkey() and __eq__ for a SymLink
2012-11-30 15:08:34 +01:00
gwen
e0490c2bed
add permissive in the requirements
2012-11-30 10:47:35 +01:00
gwen
de47772958
string representation for a symlink option
2012-11-29 10:15:30 +01:00
gwen
d9c8e06236
config's string representation
2012-11-28 10:14:16 +01:00
gwen
426e64ca39
is_default in _getattr
2012-11-22 10:19:13 +01:00
gwen
79cf82e328
doc: migrated to sphinx
2012-11-20 17:14:58 +01:00
gwen
86f9096937
settings are in a separate object
2012-11-19 10:45:03 +01:00
gwen
5969eaa2d6
add custom validator
2012-11-19 09:51:40 +01:00
gwen
eb7e393864
the value owner is a string now
2012-11-15 10:55:14 +01:00
gwen
09dba4b959
suppression of the override
2012-11-12 12:06:58 +01:00
gwen
407c74008c
docstrings for special params
2012-11-08 09:03:28 +01:00
gwen
307a3a00a8
permissive getattr in mandatory_warnings()
2012-11-07 17:14:50 +01:00
gwen
bfb5045753
test mandatory
2012-11-06 15:19:36 +01:00
gwen
ec2a65bd37
multi options
2012-10-17 11:14:17 +02:00
gwen
a36ae7df85
permissive in the getattr
2012-10-16 15:09:52 +02:00
gwen
b3da043190
trimming options's callbacks
2012-10-15 15:06:41 +02:00
gwen
0bd7624eea
find method in config filters by attrs
2012-10-12 11:35:07 +02:00
gwen
aa67ae31aa
find method in config
2012-10-11 16:16:43 +02:00
gwen
d3dc40033b
add docstring and some docs
2012-10-05 16:00:07 +02:00
gwen
8ca58c508d
__dir__ deleted
2012-10-05 11:02:58 +02:00
gwen
a2f9beb9f4
freeze() in read_write method
2012-09-24 15:58:37 +02:00
gwen
9e417334d4
multi-action available now in requires
2012-09-20 10:51:35 +02:00
gwen
9b419a488d
remove unicity by name commented code
2012-09-19 10:25:39 +02:00
gwen
b2e97573bd
tests on frozen and None value
2012-09-19 09:31:02 +02:00