python 3 compatibility
remove __eq__ and __ne__ in Option
This commit is contained in:
parent
fc9aa7fad5
commit
fbf05ba5e4
16 changed files with 161 additions and 173 deletions
|
@ -9,6 +9,7 @@ from py.test import raises
|
|||
from tiramisu.config import Config
|
||||
from tiramisu.option import IntOption, FloatOption, StrOption, ChoiceOption, \
|
||||
BoolOption, UnicodeOption, OptionDescription
|
||||
from tiramisu.error import ConflictError
|
||||
|
||||
|
||||
def make_description():
|
||||
|
@ -199,3 +200,14 @@ def test_values_not_setitem():
|
|||
root = OptionDescription('root', '', [d1])
|
||||
config = Config(root)
|
||||
raises(ValueError, "config.cfgimpl_get_values()[g1] = 2")
|
||||
|
||||
|
||||
def test_duplicated_option():
|
||||
g1 = IntOption('g1', '', 1)
|
||||
#in same OptionDescription
|
||||
raises(ConflictError, "d1 = OptionDescription('od', '', [g1, g1])")
|
||||
d1 = OptionDescription('od1', '', [g1])
|
||||
d2 = OptionDescription('od2', '', [g1])
|
||||
root = OptionDescription('root', '', [d1, d2])
|
||||
#in different OptionDescription
|
||||
raises(ConflictError, "config = Config(root)")
|
||||
|
|
|
@ -44,7 +44,7 @@ def test_freeze_whole_config():
|
|||
prop = []
|
||||
try:
|
||||
conf.gc.dummy = True
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'frozen' in prop
|
||||
setting.remove('everything_frozen')
|
||||
|
@ -65,7 +65,7 @@ def test_freeze_one_option():
|
|||
prop = []
|
||||
try:
|
||||
conf.gc.dummy = True
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'frozen' in prop
|
||||
|
||||
|
@ -82,7 +82,7 @@ def test_frozen_value():
|
|||
prop = []
|
||||
try:
|
||||
config.string = "egg"
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'frozen' in prop
|
||||
|
||||
|
@ -99,7 +99,7 @@ def test_freeze():
|
|||
prop = []
|
||||
try:
|
||||
conf.gc.name = 'framework'
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'frozen' in prop
|
||||
|
||||
|
@ -115,7 +115,7 @@ def test_freeze_multi():
|
|||
prop = []
|
||||
try:
|
||||
conf.boolop = [True]
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'frozen' in prop
|
||||
|
||||
|
@ -133,7 +133,7 @@ def test_freeze_get_multi():
|
|||
prop = []
|
||||
try:
|
||||
valmulti.append(False)
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'frozen' in prop
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ import autopath
|
|||
|
||||
#from py.test import raises
|
||||
from tiramisu.config import Config, mandatory_warnings
|
||||
from tiramisu.option import StrOption, OptionDescription, UnicodeOption
|
||||
from tiramisu.option import StrOption, UnicodeOption, OptionDescription
|
||||
from tiramisu.error import PropertiesOptionError
|
||||
|
||||
|
||||
|
@ -26,7 +26,7 @@ def test_mandatory_ro():
|
|||
prop = []
|
||||
try:
|
||||
config.str1
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'mandatory' in prop
|
||||
config.read_write()
|
||||
|
@ -61,7 +61,7 @@ def test_mandatory_default():
|
|||
prop = []
|
||||
try:
|
||||
config.str
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'mandatory' in prop
|
||||
|
||||
|
@ -76,7 +76,7 @@ def test_mandatory_none():
|
|||
prop = []
|
||||
try:
|
||||
config.str1
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'mandatory' in prop
|
||||
|
||||
|
@ -90,7 +90,7 @@ def test_mandatory_empty():
|
|||
prop = []
|
||||
try:
|
||||
config.str1
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'mandatory' in prop
|
||||
|
||||
|
@ -104,7 +104,7 @@ def test_mandatory_multi_none():
|
|||
prop = []
|
||||
try:
|
||||
config.str3
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'mandatory' in prop
|
||||
config.read_write()
|
||||
|
@ -114,7 +114,7 @@ def test_mandatory_multi_none():
|
|||
prop = []
|
||||
try:
|
||||
config.str3
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'mandatory' in prop
|
||||
|
||||
|
@ -128,7 +128,7 @@ def test_mandatory_multi_empty():
|
|||
prop = []
|
||||
try:
|
||||
config.str3
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'mandatory' in prop
|
||||
config.read_write()
|
||||
|
@ -138,7 +138,7 @@ def test_mandatory_multi_empty():
|
|||
prop = []
|
||||
try:
|
||||
config.str3
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'mandatory' in prop
|
||||
|
||||
|
@ -160,16 +160,16 @@ def test_mandatory_disabled():
|
|||
prop = []
|
||||
try:
|
||||
config.str1
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert prop == ['mandatory']
|
||||
setting[descr.str1].append('disabled')
|
||||
prop = []
|
||||
try:
|
||||
config.str1
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert prop == ['disabled', 'mandatory']
|
||||
assert set(prop) == set(['disabled', 'mandatory'])
|
||||
|
||||
|
||||
def test_mandatory_unicode():
|
||||
|
@ -180,7 +180,7 @@ def test_mandatory_unicode():
|
|||
prop = []
|
||||
try:
|
||||
config.unicode2
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert prop == ['mandatory']
|
||||
config.read_write()
|
||||
|
@ -189,7 +189,7 @@ def test_mandatory_unicode():
|
|||
prop = []
|
||||
try:
|
||||
config.unicode2
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert prop == ['mandatory']
|
||||
|
||||
|
@ -202,7 +202,7 @@ def test_mandatory_warnings_ro():
|
|||
proc = []
|
||||
try:
|
||||
config.str
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
proc = err.proptype
|
||||
assert proc == ['mandatory']
|
||||
assert list(mandatory_warnings(config)) == ['str', 'str1', 'unicode2', 'str3']
|
||||
|
|
|
@ -6,33 +6,33 @@ import autopath
|
|||
from tiramisu.option import BoolOption, IntOption
|
||||
|
||||
|
||||
def test_option_comparison():
|
||||
"compare :class:`tiramisu.option.BoolOption`"
|
||||
dummy1 = BoolOption('dummy1', 'doc dummy')
|
||||
dummy2 = BoolOption('dummy2', 'doc dummy')
|
||||
dummy3 = BoolOption('dummy1', 'doc dummy')
|
||||
assert dummy1 != dummy2
|
||||
assert dummy1 == dummy3
|
||||
#def test_option_comparison():
|
||||
# "compare :class:`tiramisu.option.BoolOption`"
|
||||
# dummy1 = BoolOption('dummy1', 'doc dummy')
|
||||
# dummy2 = BoolOption('dummy2', 'doc dummy')
|
||||
# dummy3 = BoolOption('dummy1', 'doc dummy')
|
||||
# assert dummy1 != dummy2
|
||||
# assert dummy1 == dummy3
|
||||
|
||||
|
||||
def test_option_comparison_obj():
|
||||
"compare :class:`tiramisu.option.IntOption`"
|
||||
dummy1 = BoolOption('dummy1', 'doc dummy')
|
||||
dummy2 = IntOption('dummy1', 'doc dummy')
|
||||
assert dummy1 != dummy2
|
||||
#def test_option_comparison_obj():
|
||||
# "compare :class:`tiramisu.option.IntOption`"
|
||||
# dummy1 = BoolOption('dummy1', 'doc dummy')
|
||||
# dummy2 = IntOption('dummy1', 'doc dummy')
|
||||
# assert dummy1 != dummy2
|
||||
|
||||
|
||||
def test_option_comparison_advanced():
|
||||
dummy1 = BoolOption('dummy1', 'doc dummy')
|
||||
dummy2 = BoolOption('dummy1', 'doc dummy')
|
||||
dummy3 = BoolOption('dummy1', 'doc dummy', None)
|
||||
dummy4 = BoolOption('dummy1', 'doc dummy', True)
|
||||
dummy5 = BoolOption('dummy1', 'doc dummy', multi=True)
|
||||
dummy6 = BoolOption('dummy1', 'doc dummy', properties=tuple())
|
||||
dummy7 = BoolOption('dummy1', 'doc dummy', properties=tuple('new',))
|
||||
assert dummy1 == dummy2
|
||||
assert dummy1 == dummy3
|
||||
assert dummy1 != dummy4
|
||||
assert dummy1 != dummy5
|
||||
assert dummy1 == dummy6
|
||||
assert dummy1 != dummy7
|
||||
#def test_option_comparison_advanced():
|
||||
# dummy1 = BoolOption('dummy1', 'doc dummy')
|
||||
# dummy2 = BoolOption('dummy1', 'doc dummy')
|
||||
# dummy3 = BoolOption('dummy1', 'doc dummy', None)
|
||||
# dummy4 = BoolOption('dummy1', 'doc dummy', True)
|
||||
# dummy5 = BoolOption('dummy1', 'doc dummy', multi=True)
|
||||
# dummy6 = BoolOption('dummy1', 'doc dummy', properties=tuple())
|
||||
# dummy7 = BoolOption('dummy1', 'doc dummy', properties=tuple('new',))
|
||||
# assert dummy1 == dummy2
|
||||
# assert dummy1 == dummy3
|
||||
# assert dummy1 != dummy4
|
||||
# assert dummy1 != dummy5
|
||||
# assert dummy1 == dummy6
|
||||
# assert dummy1 != dummy7
|
||||
|
|
|
@ -71,7 +71,7 @@ def test_group_is_hidden():
|
|||
prop = []
|
||||
try:
|
||||
config.gc.dummy = False
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'hidden' in prop
|
||||
|
||||
|
@ -89,7 +89,7 @@ def test_group_is_hidden_multi():
|
|||
prop = []
|
||||
try:
|
||||
objspace.append('std')
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
prop = err.proptype
|
||||
assert 'hidden' in prop
|
||||
setting[obj].remove('hidden')
|
||||
|
|
|
@ -20,14 +20,14 @@ def test_permissive():
|
|||
props = []
|
||||
try:
|
||||
config.u1
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
setting.setpermissive(('disabled',))
|
||||
props = []
|
||||
try:
|
||||
config.u1
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
setting.append('permissive')
|
||||
|
@ -36,7 +36,7 @@ def test_permissive():
|
|||
props = []
|
||||
try:
|
||||
config.u1
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -49,18 +49,18 @@ def test_permissive_mandatory():
|
|||
props = []
|
||||
try:
|
||||
config.u1
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled', 'mandatory']
|
||||
assert set(props) == set(['disabled', 'mandatory'])
|
||||
setting.setpermissive(('mandatory', 'disabled',))
|
||||
setting.append('permissive')
|
||||
config.u1
|
||||
setting.remove('permissive')
|
||||
try:
|
||||
config.u1
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled', 'mandatory']
|
||||
assert set(props) == set(['disabled', 'mandatory'])
|
||||
|
||||
|
||||
def test_permissive_frozen():
|
||||
|
@ -71,7 +71,7 @@ def test_permissive_frozen():
|
|||
setting.setpermissive(('frozen', 'disabled',))
|
||||
try:
|
||||
config.u1 = 1
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['frozen', 'disabled']
|
||||
setting.append('permissive')
|
||||
|
@ -80,7 +80,7 @@ def test_permissive_frozen():
|
|||
setting.remove('permissive')
|
||||
try:
|
||||
config.u1 = 1
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['frozen', 'disabled']
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ def test_requires():
|
|||
props = []
|
||||
try:
|
||||
c.ip_address_service
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -47,14 +47,14 @@ def test_requires_same_action():
|
|||
props = []
|
||||
try:
|
||||
c.activate_service_web
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['new']
|
||||
#
|
||||
props = []
|
||||
try:
|
||||
c.ip_address_service_web
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -72,7 +72,7 @@ def test_multiple_requires():
|
|||
props = []
|
||||
try:
|
||||
c.ip_address_service
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -80,7 +80,7 @@ def test_multiple_requires():
|
|||
props = []
|
||||
try:
|
||||
c.ip_address_service
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -99,7 +99,7 @@ def test_multiple_requires_inverse():
|
|||
props = []
|
||||
try:
|
||||
c.ip_address_service
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -113,7 +113,7 @@ def test_multiple_requires_inverse():
|
|||
props = []
|
||||
try:
|
||||
c.ip_address_service
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -136,14 +136,14 @@ def test_requires_transitive():
|
|||
props = []
|
||||
try:
|
||||
c.activate_service_web
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
#
|
||||
props = []
|
||||
try:
|
||||
c.ip_address_service_web
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -167,14 +167,14 @@ def test_requires_transitive_bis():
|
|||
props = []
|
||||
try:
|
||||
c.activate_service_web
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
#
|
||||
props = []
|
||||
try:
|
||||
c.ip_address_service_web
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -196,7 +196,7 @@ def test_requires_transitive_hidden_disabled():
|
|||
props = []
|
||||
try:
|
||||
c.activate_service_web
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['hidden']
|
||||
raises(RequirementError, 'c.ip_address_service_web')
|
||||
|
@ -220,7 +220,7 @@ def test_requires_not_transitive():
|
|||
props = []
|
||||
try:
|
||||
c.activate_service_web
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
#
|
||||
|
@ -237,7 +237,7 @@ def test_requires_None():
|
|||
props = []
|
||||
try:
|
||||
c.ip_address_service
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
c.activate_service = False
|
||||
|
@ -260,7 +260,7 @@ def test_requires_multi_disabled():
|
|||
props = []
|
||||
try:
|
||||
c.ip_address_service
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -271,7 +271,7 @@ def test_requires_multi_disabled():
|
|||
props = []
|
||||
try:
|
||||
c.ip_address_service
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -279,7 +279,7 @@ def test_requires_multi_disabled():
|
|||
props = []
|
||||
try:
|
||||
c.ip_address_service
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -299,7 +299,7 @@ def test_requires_multi_disabled_inverse():
|
|||
props = []
|
||||
try:
|
||||
c.ip_address_service
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -307,7 +307,7 @@ def test_requires_multi_disabled_inverse():
|
|||
props = []
|
||||
try:
|
||||
c.ip_address_service
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -315,7 +315,7 @@ def test_requires_multi_disabled_inverse():
|
|||
props = []
|
||||
try:
|
||||
c.ip_address_service
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -323,7 +323,7 @@ def test_requires_multi_disabled_inverse():
|
|||
props = []
|
||||
try:
|
||||
c.ip_address_service
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -362,7 +362,7 @@ def test_requires_multi_disabled_2():
|
|||
props = []
|
||||
try:
|
||||
cfg.z
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
for boo in list_bools:
|
||||
|
@ -373,7 +373,7 @@ def test_requires_multi_disabled_2():
|
|||
props = []
|
||||
try:
|
||||
cfg.z
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -407,7 +407,7 @@ def test_requires_multi_disabled_inverse_2():
|
|||
props = []
|
||||
try:
|
||||
cfg.z
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
for boo in list_bools:
|
||||
|
@ -418,7 +418,7 @@ def test_requires_multi_disabled_inverse_2():
|
|||
props = []
|
||||
try:
|
||||
cfg.z
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
for boo in list_bools:
|
||||
|
@ -426,7 +426,7 @@ def test_requires_multi_disabled_inverse_2():
|
|||
props = []
|
||||
try:
|
||||
cfg.z
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
|
|
@ -46,14 +46,14 @@ def test_symlink_requires():
|
|||
props = []
|
||||
try:
|
||||
config.s
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
#
|
||||
props = []
|
||||
try:
|
||||
config.c
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == ['disabled']
|
||||
|
||||
|
@ -113,7 +113,7 @@ def test_symlink_master():
|
|||
|
||||
def test_symlink_slaves():
|
||||
a = StrOption('a', "", multi=True)
|
||||
ip_admin_eth0 = StrOption('ip_admin_eth0', u"ip réseau autorisé", multi=True)
|
||||
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
|
||||
netmask_admin_eth0 = SymLinkOption('netmask_admin_eth0', a)
|
||||
interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
||||
raises(ValueError, 'interface1.impl_set_group_type(groups.master)')
|
||||
|
|
|
@ -59,7 +59,7 @@ def carry_out_calculation(name,
|
|||
try:
|
||||
opt_value = config._getattr(path, force_permissive=True)
|
||||
opt = config.unwrap_from_path(path, force_permissive=True)
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
if check_disabled:
|
||||
continue
|
||||
raise ConfigError(_('unable to carry out a calculation, '
|
||||
|
|
|
@ -646,7 +646,7 @@ def mandatory_warnings(config):
|
|||
include_groups=True):
|
||||
try:
|
||||
config._getattr(path, force_properties=frozenset(('mandatory',)))
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
if err.proptype == ['mandatory']:
|
||||
yield path
|
||||
config.cfgimpl_reset_cache(only=('values',))
|
||||
|
|
|
@ -32,28 +32,28 @@ class PropertiesOptionError(AttributeError):
|
|||
|
||||
#____________________________________________________________
|
||||
# Exceptions for a Config
|
||||
class ConfigError(StandardError):
|
||||
class ConfigError(Exception):
|
||||
"""attempt to change an option's owner without a value
|
||||
or in case of `_cfgimpl_descr` is None
|
||||
or if a calculation cannot be carried out"""
|
||||
pass
|
||||
|
||||
|
||||
class ConflictError(StandardError):
|
||||
class ConflictError(Exception):
|
||||
"duplicate options are present in a single config"
|
||||
pass
|
||||
|
||||
|
||||
#____________________________________________________________
|
||||
# miscellaneous exceptions
|
||||
class RequirementError(StandardError):
|
||||
class RequirementError(Exception):
|
||||
"""a recursive loop occurs in the requirements tree
|
||||
requires
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class SlaveError(StandardError):
|
||||
class SlaveError(Exception):
|
||||
"problem with a slave's value length"
|
||||
pass
|
||||
|
||||
|
|
|
@ -25,7 +25,11 @@ if lc:
|
|||
languages += DEFAULT_LANG
|
||||
mo_location = LOCALE_DIR
|
||||
|
||||
gettext.install(True, localedir=None, unicode=1)
|
||||
|
||||
if sys.version_info[0] >= 3:
|
||||
gettext.install(True, localedir=None)
|
||||
else:
|
||||
gettext.install(True, localedir=None, unicode=1)
|
||||
gettext.find(APP_NAME, mo_location)
|
||||
gettext.textdomain(APP_NAME)
|
||||
gettext.bind_textdomain_codeset(APP_NAME, "UTF-8")
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
import re
|
||||
import sys
|
||||
from copy import copy, deepcopy
|
||||
from types import FunctionType
|
||||
from IPy import IP
|
||||
|
@ -98,7 +99,7 @@ class Option(BaseInformation):
|
|||
"""
|
||||
__slots__ = ('_name', '_requires', '_multi', '_validator',
|
||||
'_default_multi', '_default', '_properties', '_callback',
|
||||
'_multitype', '_master_slaves', '_consistencies', '_empty',
|
||||
'_multitype', '_master_slaves', '_consistencies',
|
||||
'_calc_properties', '__weakref__')
|
||||
_empty = ''
|
||||
|
||||
|
@ -147,7 +148,7 @@ class Option(BaseInformation):
|
|||
if default_multi is not None:
|
||||
try:
|
||||
self._validate(default_multi)
|
||||
except ValueError, err:
|
||||
except ValueError as err:
|
||||
raise ValueError(_("invalid default_multi value {0} "
|
||||
"for option {1}: {2}").format(
|
||||
str(default_multi), name, err))
|
||||
|
@ -184,36 +185,6 @@ class Option(BaseInformation):
|
|||
self._name))
|
||||
self._properties = properties # 'hidden', 'disabled'...
|
||||
|
||||
def __eq__(self, other):
|
||||
"Option comparison"
|
||||
if not isinstance(other, Option):
|
||||
return False
|
||||
slots = list(self.__slots__ +
|
||||
Option.__slots__ +
|
||||
BaseInformation.__slots__)
|
||||
for var in slots:
|
||||
try:
|
||||
val1 = getattr(self, var)
|
||||
not_in1 = False
|
||||
except:
|
||||
not_in1 = True
|
||||
try:
|
||||
val2 = getattr(other, var)
|
||||
not_in2 = False
|
||||
except:
|
||||
not_in2 = True
|
||||
if True in (not_in1, not_in2):
|
||||
if not_in1 != not_in2:
|
||||
return False
|
||||
elif val1 != val2:
|
||||
return False
|
||||
return True
|
||||
|
||||
def __ne__(self, other):
|
||||
if not isinstance(other, Option):
|
||||
return False
|
||||
return not self == other
|
||||
|
||||
def _launch_consistency(self, func, opt, vals, context, index, opt_):
|
||||
if context is not None:
|
||||
descr = context.cfgimpl_get_description()
|
||||
|
@ -288,7 +259,7 @@ class Option(BaseInformation):
|
|||
self.__class__.__name__))
|
||||
try:
|
||||
self._validate(_value)
|
||||
except ValueError, err:
|
||||
except ValueError as err:
|
||||
raise ValueError(_("invalid value {0} for option {1}: {2}"
|
||||
"").format(_value, self._name, err))
|
||||
if context is not None:
|
||||
|
@ -381,7 +352,7 @@ class ChoiceOption(Option):
|
|||
The option can also have the value ``None``
|
||||
"""
|
||||
|
||||
__slots__ = ('_values', '_open_values', '_opt_type')
|
||||
__slots__ = ('_values', '_open_values')
|
||||
_opt_type = 'string'
|
||||
|
||||
def __init__(self, name, doc, values, default=None, default_multi=None,
|
||||
|
@ -423,7 +394,7 @@ class ChoiceOption(Option):
|
|||
|
||||
class BoolOption(Option):
|
||||
"represents a choice between ``True`` and ``False``"
|
||||
__slots__ = ('_opt_type',)
|
||||
__slots__ = tuple()
|
||||
_opt_type = 'bool'
|
||||
|
||||
def _validate(self, value):
|
||||
|
@ -433,7 +404,7 @@ class BoolOption(Option):
|
|||
|
||||
class IntOption(Option):
|
||||
"represents a choice of an integer"
|
||||
__slots__ = ('_opt_type',)
|
||||
__slots__ = tuple()
|
||||
_opt_type = 'int'
|
||||
|
||||
def _validate(self, value):
|
||||
|
@ -443,7 +414,7 @@ class IntOption(Option):
|
|||
|
||||
class FloatOption(Option):
|
||||
"represents a choice of a floating point number"
|
||||
__slots__ = ('_opt_type',)
|
||||
__slots__ = tuple()
|
||||
_opt_type = 'float'
|
||||
|
||||
def _validate(self, value):
|
||||
|
@ -453,7 +424,7 @@ class FloatOption(Option):
|
|||
|
||||
class StrOption(Option):
|
||||
"represents the choice of a string"
|
||||
__slots__ = ('_opt_type',)
|
||||
__slots__ = tuple()
|
||||
_opt_type = 'string'
|
||||
|
||||
def _validate(self, value):
|
||||
|
@ -462,19 +433,25 @@ class StrOption(Option):
|
|||
'{0}').format(type(value)))
|
||||
|
||||
|
||||
class UnicodeOption(Option):
|
||||
"represents the choice of a unicode string"
|
||||
__slots__ = ('_opt_type',)
|
||||
_opt_type = 'unicode'
|
||||
_empty = u''
|
||||
if sys.version_info[0] >= 3:
|
||||
#UnicodeOption is same has StrOption in python 3+
|
||||
class UnicodeOption(StrOption):
|
||||
__slots__ = tuple()
|
||||
pass
|
||||
else:
|
||||
class UnicodeOption(Option):
|
||||
"represents the choice of a unicode string"
|
||||
__slots__ = tuple()
|
||||
_opt_type = 'unicode'
|
||||
_empty = u''
|
||||
|
||||
def _validate(self, value):
|
||||
if not isinstance(value, unicode):
|
||||
raise ValueError(_('value must be an unicode'))
|
||||
def _validate(self, value):
|
||||
if not isinstance(value, unicode):
|
||||
raise ValueError(_('value must be an unicode'))
|
||||
|
||||
|
||||
class SymLinkOption(object):
|
||||
__slots__ = ('_name', '_opt', '_consistencies')
|
||||
__slots__ = ('_name', '_opt')
|
||||
_opt_type = 'symlink'
|
||||
_consistencies = None
|
||||
|
||||
|
@ -495,7 +472,7 @@ class SymLinkOption(object):
|
|||
|
||||
class IPOption(Option):
|
||||
"represents the choice of an ip"
|
||||
__slots__ = ('_opt_type', '_only_private')
|
||||
__slots__ = ('_only_private',)
|
||||
_opt_type = 'ip'
|
||||
|
||||
def __init__(self, name, doc, default=None, default_multi=None,
|
||||
|
@ -531,8 +508,7 @@ class PortOption(Option):
|
|||
Port number 0 is reserved and can't be used.
|
||||
see: http://en.wikipedia.org/wiki/Port_numbers
|
||||
"""
|
||||
__slots__ = ('_opt_type', '_allow_range', '_allow_zero', '_min_value',
|
||||
'_max_value')
|
||||
__slots__ = ('_allow_range', '_allow_zero', '_min_value', '_max_value')
|
||||
_opt_type = 'port'
|
||||
|
||||
def __init__(self, name, doc, default=None, default_multi=None,
|
||||
|
@ -593,7 +569,7 @@ class PortOption(Option):
|
|||
|
||||
class NetworkOption(Option):
|
||||
"represents the choice of a network"
|
||||
__slots__ = ('_opt_type',)
|
||||
__slots__ = tuple()
|
||||
_opt_type = 'network'
|
||||
|
||||
def _validate(self, value):
|
||||
|
@ -604,7 +580,7 @@ class NetworkOption(Option):
|
|||
|
||||
class NetmaskOption(Option):
|
||||
"represents the choice of a netmask"
|
||||
__slots__ = ('_opt_type',)
|
||||
__slots__ = tuple()
|
||||
_opt_type = 'netmask'
|
||||
|
||||
def _validate(self, value):
|
||||
|
@ -651,7 +627,7 @@ class NetmaskOption(Option):
|
|||
|
||||
class DomainnameOption(Option):
|
||||
"represents the choice of a domain name"
|
||||
__slots__ = ('_opt_type', '_type', '_allow_ip')
|
||||
__slots__ = ('_type', '_allow_ip')
|
||||
_opt_type = 'domainname'
|
||||
|
||||
def __init__(self, name, doc, default=None, default_multi=None,
|
||||
|
@ -733,7 +709,7 @@ class OptionDescription(BaseInformation):
|
|||
valid_child.sort()
|
||||
old = None
|
||||
for child in valid_child:
|
||||
if id(child) == id(old):
|
||||
if child == old:
|
||||
raise ConflictError(_('duplicate option name: '
|
||||
'{0}').format(child))
|
||||
old = child
|
||||
|
@ -807,6 +783,9 @@ class OptionDescription(BaseInformation):
|
|||
attr = option._name
|
||||
if attr.startswith('_cfgimpl'):
|
||||
continue
|
||||
if option in cache_option:
|
||||
raise ConflictError(_('duplicate option: {0}').format(option))
|
||||
|
||||
cache_option.append(option)
|
||||
cache_path.append(str('.'.join(_currpath + [attr])))
|
||||
if not isinstance(option, OptionDescription):
|
||||
|
@ -826,15 +805,6 @@ class OptionDescription(BaseInformation):
|
|||
_consistencies)
|
||||
_currpath.pop()
|
||||
if save:
|
||||
#valid no duplicated option
|
||||
valid_child = copy(cache_option)
|
||||
valid_child.sort()
|
||||
old = None
|
||||
for child in valid_child:
|
||||
if id(child) == id(old):
|
||||
raise ConflictError(_('duplicate option: '
|
||||
'{0}').format(child))
|
||||
old = child
|
||||
self._cache_paths = (tuple(cache_option), tuple(cache_path))
|
||||
self._consistencies = _consistencies
|
||||
|
||||
|
@ -971,7 +941,6 @@ def validate_requires_arg(requires, name):
|
|||
' same_action must be boolean'))
|
||||
|
||||
if not isinstance(option, Option):
|
||||
print option, type(option)
|
||||
raise ValueError(_('malformed requirements '
|
||||
'must be an option in option {0}').format(name))
|
||||
if option.impl_is_multi():
|
||||
|
@ -980,7 +949,7 @@ def validate_requires_arg(requires, name):
|
|||
if expected is not None:
|
||||
try:
|
||||
option._validate(expected)
|
||||
except ValueError, err:
|
||||
except ValueError as err:
|
||||
raise ValueError(_('malformed requirements second argument '
|
||||
'must be valid for option {0}'
|
||||
': {1}').format(name, err))
|
||||
|
|
|
@ -206,7 +206,7 @@ class Property(object):
|
|||
def set_storage(name, **args):
|
||||
storage_type.set_storage(name)
|
||||
settings = __import__(storage_type.get_storage(), globals(), locals(),
|
||||
['Setting'], -1).Setting()
|
||||
['Setting']).Setting()
|
||||
for option, value in args.items():
|
||||
try:
|
||||
getattr(settings, option)
|
||||
|
@ -223,17 +223,17 @@ def get_storage(context, session_id, persistent):
|
|||
if session_id is None:
|
||||
session_id = gen_id(context)
|
||||
return __import__(storage_type.get_storage(), globals(), locals(),
|
||||
['Storage'], -1).Storage(session_id, persistent)
|
||||
['Storage']).Storage(session_id, persistent)
|
||||
|
||||
|
||||
def list_sessions():
|
||||
return __import__(storage_type.get_storage(), globals(), locals(),
|
||||
['list_sessions'], -1).list_sessions()
|
||||
['list_sessions']).list_sessions()
|
||||
|
||||
|
||||
def delete_session(session_id):
|
||||
return __import__(storage_type.get_storage(), globals(), locals(),
|
||||
['delete_session'], -1).delete_session(session_id)
|
||||
['delete_session']).delete_session(session_id)
|
||||
|
||||
|
||||
#____________________________________________________________
|
||||
|
@ -255,8 +255,8 @@ class Settings(object):
|
|||
self._owner = owners.user
|
||||
self.context = weakref.ref(context)
|
||||
import_lib = 'tiramisu.storage.{0}.setting'.format(storage.storage)
|
||||
self._p_ = __import__(import_lib, globals(), locals(), ['Settings'],
|
||||
-1).Settings(storage)
|
||||
self._p_ = __import__(import_lib, globals(), locals(), ['Settings']
|
||||
).Settings(storage)
|
||||
|
||||
#____________________________________________________________
|
||||
# properties methods
|
||||
|
@ -496,7 +496,7 @@ class Settings(object):
|
|||
try:
|
||||
value = self.context()._getattr(reqpath,
|
||||
force_permissive=True)
|
||||
except PropertiesOptionError, err:
|
||||
except PropertiesOptionError as err:
|
||||
if not transitive:
|
||||
continue
|
||||
properties = err.proptype
|
||||
|
|
|
@ -17,8 +17,6 @@
|
|||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# ____________________________________________________________
|
||||
|
||||
|
||||
from tiramisu.i18n import _
|
||||
from tiramisu.error import ConfigError
|
||||
|
||||
|
@ -84,8 +82,7 @@ class Cache(object):
|
|||
return path in self._cache
|
||||
|
||||
def reset_expired_cache(self, cache_type, exp):
|
||||
keys = self._cache.keys()
|
||||
for key in keys:
|
||||
for key in tuple(self._cache.keys()):
|
||||
val, created = self._cache[key]
|
||||
if exp > created:
|
||||
del(self._cache[key])
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
# ____________________________________________________________
|
||||
from time import time
|
||||
from copy import copy
|
||||
import sys
|
||||
import weakref
|
||||
from tiramisu.error import ConfigError, SlaveError
|
||||
from tiramisu.setting import owners, multitypes, expires_time
|
||||
|
@ -45,7 +46,7 @@ class Values(object):
|
|||
# the storage type is dictionary or sqlite3
|
||||
import_lib = 'tiramisu.storage.{0}.value'.format(storage.storage)
|
||||
self._p_ = __import__(import_lib, globals(), locals(), ['Values'],
|
||||
-1).Values(storage)
|
||||
).Values(storage)
|
||||
|
||||
def _getdefault(self, opt):
|
||||
"""
|
||||
|
@ -427,7 +428,12 @@ class Multi(list):
|
|||
multitypes.master]:
|
||||
raise SlaveError(_("cannot sort multi option {0} if master or slave"
|
||||
"").format(self.opt._name))
|
||||
super(Multi, self).sort(cmp=cmp, key=key, reverse=reverse)
|
||||
if sys.version_info[0] >= 3:
|
||||
if cmp is not None:
|
||||
raise ValueError(_('cmp is not permitted in python v3 or greater'))
|
||||
super(Multi, self).sort(key=key, reverse=reverse)
|
||||
else:
|
||||
super(Multi, self).sort(cmp=cmp, key=key, reverse=reverse)
|
||||
self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, self)
|
||||
|
||||
def reverse(self):
|
||||
|
@ -458,7 +464,7 @@ class Multi(list):
|
|||
if value is not None:
|
||||
try:
|
||||
self.opt._validate(value)
|
||||
except ValueError, err:
|
||||
except ValueError as err:
|
||||
raise ValueError(_("invalid value {0} "
|
||||
"for option {1}: {2}"
|
||||
"").format(str(value),
|
||||
|
|
Loading…
Reference in a new issue