diff --git a/test/autopath.py b/test/autopath.py
index 11c5057..8820560 100644
--- a/test/autopath.py
+++ b/test/autopath.py
@@ -7,8 +7,8 @@ checkout)
from os.path import dirname, abspath, join, normpath
import sys
-HERE = dirname(abspath(__file__))
-PATH = normpath(join(HERE, '..', 'tiramisu'))
-if PATH not in sys.path:
- sys.path.insert(1, PATH)
-
+def do_autopath():
+ HERE = dirname(abspath(__file__))
+ PATH = normpath(join(HERE, '..', 'tiramisu'))
+ if PATH not in sys.path:
+ sys.path.insert(1, PATH)
diff --git a/test/test_cache.py b/test/test_cache.py
index 5fe4472..2eb2268 100644
--- a/test/test_cache.py
+++ b/test/test_cache.py
@@ -1,5 +1,7 @@
# coding: utf-8
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from tiramisu import setting
setting.expires_time = 1
from tiramisu.option import IntOption, OptionDescription
@@ -20,9 +22,10 @@ def make_description():
def test_cache_config():
od1 = make_description()
- assert od1.impl_already_build_caches() == False
+ assert od1.impl_already_build_caches() is False
c = Config(od1)
- assert od1.impl_already_build_caches() == True
+ assert od1.impl_already_build_caches() is True
+ c
def test_cache():
diff --git a/test/test_choice_option.py b/test/test_choice_option.py
index 470f247..9b3d504 100644
--- a/test/test_choice_option.py
+++ b/test/test_choice_option.py
@@ -1,5 +1,6 @@
# coding: utf-8
-import autopath
+from autopath import do_autopath
+do_autopath()
from tiramisu.setting import owners
from tiramisu.option import ChoiceOption, StrOption, OptionDescription
diff --git a/test/test_config.py b/test/test_config.py
index 8c41305..7e743ba 100644
--- a/test/test_config.py
+++ b/test/test_config.py
@@ -2,8 +2,9 @@
"""theses tests are much more to test that config, option description, vs...
**it's there** and answers via attribute access"""
+from autopath import do_autopath
+do_autopath()
-import autopath
from py.test import raises
from tiramisu.config import Config, SubConfig
@@ -165,6 +166,7 @@ def test_config_impl_get_path_by_opt():
dummy = config.unwrap_from_path('gc.dummy')
boo = config.unwrap_from_path('bool')
unknown = IntOption('test', '')
+ unknown
assert config.cfgimpl_get_description().impl_get_path_by_opt(boo) == 'bool'
assert config.cfgimpl_get_description().impl_get_path_by_opt(dummy) == 'gc.dummy'
raises(AttributeError, "config.cfgimpl_get_description().impl_get_path_by_opt(unknown)")
@@ -236,11 +238,13 @@ def test_values_not_setitem():
d1 = OptionDescription('od', '', [g1, g2, g3, g4, g5])
root = OptionDescription('root', '', [d1])
config = Config(root)
+ config
raises(ConfigError, "config.cfgimpl_get_values()[g1] = 2")
def test_duplicated_option():
g1 = IntOption('g1', '', 1)
+ g1
#in same OptionDescription
raises(ConflictError, "d1 = OptionDescription('od', '', [g1, g1])")
@@ -250,12 +254,14 @@ def test_duplicated_option_diff_od():
d1 = OptionDescription('od1', '', [g1])
#in different OptionDescription
d2 = OptionDescription('od2', '', [g1, d1])
+ d2
raises(ConflictError, 'Config(d2)')
def test_cannot_assign_value_to_option_description():
descr = make_description()
cfg = Config(descr)
+ cfg
raises(TypeError, "cfg.gc = 3")
diff --git a/test/test_config_api.py b/test/test_config_api.py
index 920b7e5..1c4ad06 100644
--- a/test/test_config_api.py
+++ b/test/test_config_api.py
@@ -1,5 +1,7 @@
"configuration objects global API"
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from py.test import raises
from tiramisu.config import Config
@@ -197,6 +199,7 @@ def test_find_multi():
def test_does_not_find_in_config():
descr = make_description()
conf = Config(descr)
+ conf
raises(AttributeError, "conf.find(byname='IDontExist')")
@@ -266,14 +269,21 @@ def test_impl_getpaths():
def test_invalid_option():
+ ChoiceOption('a', '', ('1', '2'))
raises(TypeError, "ChoiceOption('a', '', [1, 2])")
raises(TypeError, "ChoiceOption('a', '', 1)")
raises(ValueError, "ChoiceOption('a', '', (1,), 3)")
+ FloatOption('a', '')
raises(ValueError, "FloatOption('a', '', 'string')")
+ UnicodeOption('a', '')
raises(ValueError, "UnicodeOption('a', '', 1)")
+ u = UnicodeOption('a', '')
+ SymLinkOption('a', u)
raises(ValueError, "SymLinkOption('a', 'string')")
+ IPOption('a', '')
raises(ValueError, "IPOption('a', '', 1)")
raises(ValueError, "IPOption('a', '', 'string')")
+ PortOption('a', '')
raises(ValueError, "PortOption('a', '', 'string')")
raises(ValueError, "PortOption('a', '', '11:12:13', allow_range=True)")
raises(ValueError, "PortOption('a', '', 11111111111111111111)")
@@ -282,9 +292,13 @@ def test_invalid_option():
raises(ValueError, "PortOption('a', '', allow_zero=True, allow_wellknown=False, allow_registred=False, allow_private=True)")
raises(ValueError, "PortOption('a', '', allow_zero=True, allow_wellknown=False, allow_registred=True, allow_private=True)")
raises(ValueError, "PortOption('a', '', allow_zero=False, allow_wellknown=False, allow_registred=False, allow_private=False)")
+ NetworkOption('a', '')
raises(ValueError, "NetworkOption('a', '', 'string')")
+ NetmaskOption('a', '')
raises(ValueError, "NetmaskOption('a', '', 'string')")
+ BroadcastOption('a', '')
raises(ValueError, "BroadcastOption('a', '', 'string')")
+ DomainnameOption('a', '')
raises(ValueError, "DomainnameOption('a', '', 'string')")
raises(ValueError, "DomainnameOption('a', '', type_='string')")
raises(ValueError, "DomainnameOption('a', '', allow_ip='string')")
diff --git a/test/test_config_big_example.py b/test/test_config_big_example.py
deleted file mode 100644
index b6613b1..0000000
--- a/test/test_config_big_example.py
+++ /dev/null
@@ -1,258 +0,0 @@
-##just a proof of concept with a lot of options and option groups
-#import autopath
-#from tiramisu.config import *
-#from tiramisu.option import *
-
-#all_modules = ['amon', 'sphynx', 'zephir']
-
-#example__optiondescription = OptionDescription("objspace", "Object Space Options", [
-# ChoiceOption("name", "Object Space name",
-# ["std", "flow", "thunk", "dump", "taint"],
-# "std"),
-
-# OptionDescription("opcodes", "opcodes to enable in the interpreter", [
-# BoolOption("CALL_LIKELY_BUILTIN", "emit a special bytecode for likely calls to builtin functions",
-# default=False,
-# requires=[("translation.stackless", False)]),
-# BoolOption("CALL_METHOD", "emit a special bytecode for expr.name()",
-# default=False),
-# ]),
-
-# BoolOption("nofaking", "disallow faking in the object space",
-# default=False,
-# requires=[
-# ("objspace.usemodules.posix", True),
-# ("objspace.usemodules.time", True),
-# ("objspace.usemodules.errno", True)],
-# ),
-
-# OptionDescription("usemodules", "Which Modules should be used", [
-# BoolOption(modname, "use module %s" % (modname, ),
-# default=True,
-# requires= [('amon', False)],
-# )
-# for modname in all_modules]),
-
-# BoolOption("allworkingmodules", "use as many working modules as possible",
-# default=True,
-# ),
-
-# BoolOption("translationmodules",
-# "use only those modules that are needed to run translate.py on pypy",
-# default=False,
-# ),
-
-# BoolOption("geninterp", "specify whether geninterp should be used",
-# default=True),
-
-# BoolOption("logbytecodes",
-# "keep track of bytecode usage",
-# default=False),
-
-# BoolOption("usepycfiles", "Write and read pyc files when importing",
-# default=True),
-
-# BoolOption("lonepycfiles", "Import pyc files with no matching py file",
-# default=False,
-# requires=[("objspace.usepycfiles", True)]),
-
-# StrOption("soabi",
-# "Tag to differentiate extension modules built for different Python interpreters",
-# default=None),
-
-# BoolOption("honor__builtins__",
-# "Honor the __builtins__ key of a module dictionary",
-# default=False),
-
-# BoolOption("disable_call_speedhacks",
-# "make sure that all calls go through space.call_args",
-# default=False),
-
-# BoolOption("timing",
-# "timing of various parts of the interpreter (simple profiling)",
-# default=False),
-
-# OptionDescription("std", "Standard Object Space Options", [
-# BoolOption("withtproxy", "support transparent proxies",
-# default=True),
-
-# BoolOption("withsmallint", "use tagged integers",
-# default=False,
-# requires=[("objspace.std.withprebuiltint", False),
-# ("translation.taggedpointers", True)]),
-
-# BoolOption("withprebuiltint", "prebuild commonly used int objects",
-# default=False),
-
-# IntOption("prebuiltintfrom", "lowest integer which is prebuilt",
-# default=-5),
-
-# IntOption("prebuiltintto", "highest integer which is prebuilt",
-# default=100),
-
-# BoolOption("withstrjoin", "use strings optimized for addition",
-# default=False),
-
-# BoolOption("withstrslice", "use strings optimized for slicing",
-# default=False),
-
-# BoolOption("withstrbuf", "use strings optimized for addition (ver 2)",
-# default=False),
-
-# BoolOption("withprebuiltchar",
-# "use prebuilt single-character string objects",
-# default=False),
-
-# BoolOption("sharesmallstr",
-# "always reuse the prebuilt string objects "
-# "(the empty string and potentially single-char strings)",
-# default=False),
-
-# BoolOption("withrope", "use ropes as the string implementation",
-# default=False,
-# requires=[("objspace.std.withstrslice", False),
-# ("objspace.std.withstrjoin", False),
-# ("objspace.std.withstrbuf", False)],
-# ),
-
-# BoolOption("withropeunicode", "use ropes for the unicode implementation",
-# default=False,
-# requires=[("objspace.std.withrope", True)]),
-
-# BoolOption("withcelldict",
-# "use dictionaries that are optimized for being used as module dicts",
-# default=False,
-# requires=[("objspace.opcodes.CALL_LIKELY_BUILTIN", False),
-# ("objspace.honor__builtins__", False)]),
-
-# BoolOption("withdictmeasurement",
-# "create huge files with masses of information "
-# "about dictionaries",
-# default=False),
-
-# BoolOption("withmapdict",
-# "make instances really small but slow without the JIT",
-# default=False,
-# requires=[("objspace.std.getattributeshortcut", True),
-# ("objspace.std.withtypeversion", True),
-# ]),
-
-# BoolOption("withrangelist",
-# "enable special range list implementation that does not "
-# "actually create the full list until the resulting "
-# "list is mutated",
-# default=False),
-
-# BoolOption("withtypeversion",
-# "version type objects when changing them",
-# default=False,
-# # weakrefs needed, because of get_subclasses()
-# requires=[("translation.rweakref", True)]),
-
-# BoolOption("withmethodcache",
-# "try to cache method lookups",
-# default=False,
-# requires=[("objspace.std.withtypeversion", True),
-# ("translation.rweakref", True)]),
-# BoolOption("withmethodcachecounter",
-# "try to cache methods and provide a counter in __pypy__. "
-# "for testing purposes only.",
-# default=False,
-# requires=[("objspace.std.withmethodcache", True)]),
-# IntOption("methodcachesizeexp",
-# " 2 ** methodcachesizeexp is the size of the of the method cache ",
-# default=11),
-# BoolOption("optimized_int_add",
-# "special case the addition of two integers in BINARY_ADD",
-# default=False),
-# BoolOption("optimized_comparison_op",
-# "special case the comparison of integers",
-# default=False),
-# BoolOption("optimized_list_getitem",
-# "special case the 'list[integer]' expressions",
-# default=False),
-# BoolOption("builtinshortcut",
-# "a shortcut for operations between built-in types",
-# default=False),
-# BoolOption("getattributeshortcut",
-# "track types that override __getattribute__",
-# default=False),
-# BoolOption("newshortcut",
-# "cache and shortcut calling __new__ from builtin types",
-# default=False),
-
-# BoolOption("logspaceoptypes",
-# "a instrumentation option: before exit, print the types seen by "
-# "certain simpler bytecodes",
-# default=False),
-# ChoiceOption("multimethods", "the multimethod implementation to use",
-# ["doubledispatch", "mrd"],
-# default="mrd"),
-# BoolOption("immutable_builtintypes",
-# "Forbid the changing of builtin types", default=True),
-# ]),
-#])
-
-## ____________________________________________________________
-
-#def get_combined_translation_config(other_optdescr=None,
-# existing_config=None,
-# overrides=None,
-# translating=False):
-# if overrides is None:
-# overrides = {}
-# d = BoolOption("translating",
-# "indicates whether we are translating currently",
-# default=False)
-# if other_optdescr is None:
-# children = []
-# newname = ""
-# else:
-# children = [other_optdescr]
-# newname = other_optdescr._name
-# descr = OptionDescription("eole", "all options", children)
-# config = Config(descr, **overrides)
-# if translating:
-# config.translating = True
-# if existing_config is not None:
-# for child in existing_config._cfgimpl_descr._children:
-# if child._name == newname:
-# continue
-# value = getattr(existing_config, child._name)
-# config._cfgimpl_values[child._name] = value
-# return config
-
-#def get_example_config(overrides=None, translating=False):
-# return get_combined_translation_config(
-# example__optiondescription, overrides=overrides,
-# translating=translating)
-
-## ____________________________________________________________
-
-#def test_example_option():
-# config = get_example_config()
-# result = ['objspace.name', 'objspace.opcodes.CALL_LIKELY_BUILTIN',
-# 'objspace.opcodes.CALL_METHOD', 'objspace.nofaking',
-# 'objspace.usemodules.amon', 'objspace.usemodules.sphynx',
-# 'objspace.usemodules.zephir', 'objspace.allworkingmodules',
-# 'objspace.translationmodules', 'objspace.geninterp',
-# 'objspace.logbytecodes', 'objspace.usepycfiles', 'objspace.lonepycfiles',
-# 'objspace.soabi', 'objspace.honor__builtins__',
-# 'objspace.disable_call_speedhacks', 'objspace.timing',
-# 'objspace.std.withtproxy', 'objspace.std.withsmallint',
-# 'objspace.std.withprebuiltint', 'objspace.std.prebuiltintfrom',
-# 'objspace.std.prebuiltintto', 'objspace.std.withstrjoin',
-# 'objspace.std.withstrslice', 'objspace.std.withstrbuf',
-# 'objspace.std.withprebuiltchar', 'objspace.std.sharesmallstr',
-# 'objspace.std.withrope', 'objspace.std.withropeunicode',
-# 'objspace.std.withcelldict', 'objspace.std.withdictmeasurement',
-# 'objspace.std.withmapdict', 'objspace.std.withrangelist',
-# 'objspace.std.withtypeversion', 'objspace.std.withmethodcache',
-# 'objspace.std.withmethodcachecounter', 'objspace.std.methodcachesizeexp',
-# 'objspace.std.optimized_int_add', 'objspace.std.optimized_comparison_op',
-# 'objspace.std.optimized_list_getitem', 'objspace.std.builtinshortcut',
-# 'objspace.std.getattributeshortcut', 'objspace.std.newshortcut',
-# 'objspace.std.logspaceoptypes', 'objspace.std.multimethods',
-# 'objspace.std.immutable_builtintypes']
-
-# assert config.getpaths(allpaths=True) == result
diff --git a/test/test_config_domain.py b/test/test_config_domain.py
index 30b9e00..f3a5b56 100644
--- a/test/test_config_domain.py
+++ b/test/test_config_domain.py
@@ -1,4 +1,6 @@
-import autopath
+from autopath import do_autopath
+do_autopath()
+
import warnings
from py.test import raises
diff --git a/test/test_config_ip.py b/test/test_config_ip.py
index 581cbd2..b4359f4 100644
--- a/test/test_config_ip.py
+++ b/test/test_config_ip.py
@@ -1,4 +1,6 @@
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from py.test import raises
from tiramisu.config import Config
from tiramisu.option import IPOption, NetworkOption, NetmaskOption, \
@@ -27,6 +29,7 @@ def test_ip():
c = Config(od)
raises(ValueError, "c.a = '192.000.023.01'")
+
def test_ip_default():
a = IPOption('a', '', '88.88.88.88')
od = OptionDescription('od', '', [a])
diff --git a/test/test_dereference.py b/test/test_dereference.py
index e23c065..f8776b5 100644
--- a/test/test_dereference.py
+++ b/test/test_dereference.py
@@ -1,6 +1,6 @@
# coding: utf-8
-import autopath
-#from py.test import raises
+from autopath import do_autopath
+do_autopath()
from tiramisu.config import Config, GroupConfig, MetaConfig
from tiramisu.option import BoolOption, IntOption, StrOption, OptionDescription, submulti
@@ -9,6 +9,7 @@ import weakref
IS_DEREFABLE = True
+
def test_deref_storage():
b = BoolOption('b', '')
o = OptionDescription('od', '', [b])
diff --git a/test/test_dyn_optiondescription.py b/test/test_dyn_optiondescription.py
index 5b830e5..89da108 100644
--- a/test/test_dyn_optiondescription.py
+++ b/test/test_dyn_optiondescription.py
@@ -1,5 +1,6 @@
# coding: utf-8
-import autopath
+from autopath import do_autopath
+do_autopath()
from tiramisu.setting import groups, owners
from tiramisu.option import BoolOption, StrOption, ChoiceOption, IPOption, \
@@ -85,6 +86,7 @@ def test_unknown_dyndescription():
od = OptionDescription('od', '', [dod])
od2 = OptionDescription('od', '', [od])
cfg = Config(od2)
+ cfg
raises(AttributeError, "cfg.od.dodval3")
raises(AttributeError, "cfg.od.dodval1.novalue")
@@ -711,6 +713,7 @@ def test_consistency_external_dyndescription():
st2 = StrOption('st2', '')
dod = DynOptionDescription('dod', '', [st1, st2], callback=return_list)
od = OptionDescription('od', '', [dod, st])
+ od
raises(ConfigError, "st.impl_add_consistency('not_equal', st2)")
@@ -722,6 +725,7 @@ def test_consistency_notsame_dyndescription():
tst2 = StrOption('tst2', '')
tdod = DynOptionDescription('tdod', '', [tst1, tst2], callback=return_list)
od = OptionDescription('od', '', [dod, tdod])
+ od
raises(ConfigError, "st1.impl_add_consistency('not_equal', tst1)")
@@ -1279,30 +1283,35 @@ def test_invalid_conflict_dyndescription():
st = StrOption('st', '')
dod = DynOptionDescription('dod', '', [st], callback=return_list)
dodinvalid = StrOption('dodinvalid', '')
+ dod, dodinvalid
raises(ConflictError, "OptionDescription('od', '', [dod, dodinvalid])")
def test_invalid_subod_dyndescription():
st2 = StrOption('st2', '')
od1 = OptionDescription('od1', '', [st2])
+ od1
raises(ConfigError, "DynOptionDescription('dod', '', [od1], callback=return_list)")
def test_invalid_subdynod_dyndescription():
st2 = StrOption('st2', '')
od1 = DynOptionDescription('od1', '', [st2], callback=return_list)
+ od1
raises(ConfigError, "DynOptionDescription('dod', '', [od1], callback=return_list)")
def test_invalid_symlink_dyndescription():
st = StrOption('st', '')
st2 = SymLinkOption('st2', st)
+ st2
raises(ConfigError, "DynOptionDescription('dod', '', [st, st2], callback=return_list)")
def test_nocallback_dyndescription():
st = StrOption('st', '')
st2 = StrOption('st2', '')
+ st, st2
raises(ConfigError, "DynOptionDescription('dod', '', [st, st2])")
@@ -1311,6 +1320,7 @@ def test_invalid_samevalue_dyndescription():
dod = DynOptionDescription('dod', '', [st], callback=return_same_list)
od = OptionDescription('od', '', [dod])
cfg = Config(od)
+ cfg
raises(ConfigError, "print cfg")
@@ -1319,4 +1329,5 @@ def test_invalid_name_dyndescription():
dod = DynOptionDescription('dod', '', [st], callback=return_wrong_list)
od = OptionDescription('od', '', [dod])
cfg = Config(od)
+ cfg
raises(ValueError, "print cfg")
diff --git a/test/test_freeze.py b/test/test_freeze.py
index 9b0f71e..3d9a923 100644
--- a/test/test_freeze.py
+++ b/test/test_freeze.py
@@ -1,6 +1,7 @@
# coding: utf-8
"frozen and hidden values"
-import autopath
+from autopath import do_autopath
+do_autopath()
from tiramisu.setting import owners
from tiramisu.option import ChoiceOption, BoolOption, IntOption, FloatOption, \
diff --git a/test/test_mandatory.py b/test/test_mandatory.py
index 374e2aa..69ea2ad 100644
--- a/test/test_mandatory.py
+++ b/test/test_mandatory.py
@@ -1,4 +1,6 @@
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from time import sleep
#from py.test import raises
diff --git a/test/test_metaconfig.py b/test/test_metaconfig.py
index f472d17..b395fcb 100644
--- a/test/test_metaconfig.py
+++ b/test/test_metaconfig.py
@@ -1,4 +1,5 @@
-import autopath
+from autopath import do_autopath
+do_autopath()
from py.test import raises
@@ -177,6 +178,7 @@ def test_not_meta():
conf2 = Config(od2, name='conf2')
conf3 = Config(od2)
conf4 = Config(od2, name='conf2')
+ conf3, conf4
raises(ValueError, "GroupConfig(conf1)")
#same name
raises(ConflictError, "GroupConfig([conf2, conf4])")
@@ -215,6 +217,7 @@ def test_meta_unconsistent():
conf2 = Config(od2, name='conf2')
conf3 = Config(od2, name='conf3')
conf4 = Config(od1, name='conf4')
+ conf3, conf4
meta = MetaConfig([conf1, conf2])
meta.cfgimpl_get_settings().setowner(owners.meta)
raises(TypeError, 'MetaConfig("string")')
diff --git a/test/test_multi.py b/test/test_multi.py
index 42fd8e1..6d06011 100644
--- a/test/test_multi.py
+++ b/test/test_multi.py
@@ -1,5 +1,7 @@
# coding: utf-8
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from tiramisu.value import Multi
from tiramisu.option import IntOption, OptionDescription
from tiramisu.config import Config
@@ -13,7 +15,7 @@ def test_multi():
i = IntOption('int', '', multi=True)
o = OptionDescription('od', '', [i])
c = Config(o)
- multi = Multi([1,2,3], weakref.ref(c), i, 'int')
+ multi = Multi([1, 2, 3], weakref.ref(c), i, 'int')
raises(ValueError, "Multi([1,2,3], c, i, 'int')")
raises(ValueError, "Multi(multi, weakref.ref(c), i, 'int')")
assert c is multi._getcontext()
diff --git a/test/test_option.py b/test/test_option.py
index 64985ea..90113e0 100644
--- a/test/test_option.py
+++ b/test/test_option.py
@@ -1,7 +1,9 @@
"""these tests are here to create some :class:`tiramisu.option.Option`'s
and to compare them
"""
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from py.test import raises
from tiramisu.option import IntOption, OptionDescription
diff --git a/test/test_option_calculation.py b/test/test_option_calculation.py
index 6b12387..694e524 100644
--- a/test/test_option_calculation.py
+++ b/test/test_option_calculation.py
@@ -1,4 +1,6 @@
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from py.test import raises
from tiramisu.config import Config
diff --git a/test/test_option_consistency.py b/test/test_option_consistency.py
index 9be2507..c6a0f09 100644
--- a/test/test_option_consistency.py
+++ b/test/test_option_consistency.py
@@ -1,4 +1,6 @@
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from py.test import raises
from tiramisu.setting import owners, groups
diff --git a/test/test_option_default.py b/test/test_option_default.py
index 6aaf631..dfe2b97 100644
--- a/test/test_option_default.py
+++ b/test/test_option_default.py
@@ -1,5 +1,7 @@
"test all types of option default values for options, add new option in a descr"
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from py.test import raises
from tiramisu.config import Config
diff --git a/test/test_option_owner.py b/test/test_option_owner.py
index 4b8fdb0..6065051 100644
--- a/test/test_option_owner.py
+++ b/test/test_option_owner.py
@@ -1,4 +1,6 @@
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from py.test import raises
from tiramisu.setting import owners
diff --git a/test/test_option_setting.py b/test/test_option_setting.py
index 9b4e511..b1c1e85 100644
--- a/test/test_option_setting.py
+++ b/test/test_option_setting.py
@@ -1,5 +1,7 @@
"config.set() or config.setoption() or option.setoption()"
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from py.test import raises
from tiramisu.setting import owners
diff --git a/test/test_option_type.py b/test/test_option_type.py
index 3537d6d..c80cc83 100644
--- a/test/test_option_type.py
+++ b/test/test_option_type.py
@@ -1,6 +1,8 @@
# coding: utf-8
"frozen and hidden values"
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from py.test import raises
from tiramisu.config import Config
diff --git a/test/test_option_username.py b/test/test_option_username.py
index 472e9cd..88c800b 100644
--- a/test/test_option_username.py
+++ b/test/test_option_username.py
@@ -1,5 +1,7 @@
"configuration objects global API"
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from py.test import raises
from tiramisu.config import Config
diff --git a/test/test_option_validator.py b/test/test_option_validator.py
index c30bcaa..d7af41d 100644
--- a/test/test_option_validator.py
+++ b/test/test_option_validator.py
@@ -1,4 +1,6 @@
-import autopath
+from autopath import do_autopath
+do_autopath()
+
import warnings
from py.test import raises
diff --git a/test/test_option_with_special_name.py b/test/test_option_with_special_name.py
index 483aca0..63fe82f 100644
--- a/test/test_option_with_special_name.py
+++ b/test/test_option_with_special_name.py
@@ -1,5 +1,7 @@
#this test is much more to test that **it's there** and answers attribute access
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from py.test import raises
from tiramisu.config import Config
diff --git a/test/test_parsing_group.py b/test/test_parsing_group.py
index dc299d7..36d06d4 100644
--- a/test/test_parsing_group.py
+++ b/test/test_parsing_group.py
@@ -1,5 +1,7 @@
# coding: utf-8
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from tiramisu.setting import groups, owners
from tiramisu.config import Config
from tiramisu.option import ChoiceOption, BoolOption, IntOption, \
diff --git a/test/test_permissive.py b/test/test_permissive.py
index 615fef7..99d3ac9 100644
--- a/test/test_permissive.py
+++ b/test/test_permissive.py
@@ -1,5 +1,7 @@
# coding: utf-8
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from py.test import raises
from tiramisu.option import IntOption, OptionDescription
diff --git a/test/test_requires.py b/test/test_requires.py
index c6d1032..02d1d36 100644
--- a/test/test_requires.py
+++ b/test/test_requires.py
@@ -1,5 +1,7 @@
# coding: utf-8
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from copy import copy
from tiramisu import setting
setting.expires_time = 1
diff --git a/test/test_reverse_from_path.py b/test/test_reverse_from_path.py
deleted file mode 100644
index be43cac..0000000
--- a/test/test_reverse_from_path.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#import autopath
-#from py.test import raises
-
-#from tool import reverse_from_paths
-
-#def make_description():
-# gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
-# gcdummy = BoolOption('dummy', 'dummy', default=False)
-# objspaceoption = ChoiceOption('objspace', 'Object space',
-# ['std', 'thunk'], 'std')
-# booloption = BoolOption('bool', 'Test boolean option', default=True)
-# intoption = IntOption('int', 'Test int option', default=0)
-# floatoption = FloatOption('float', 'Test float option', default=2.3)
-# stroption = StrOption('str', 'Test string option', default="abc")
-# boolop = BoolOption('boolop', 'Test boolean option op', default=True)
-# wantref_option = BoolOption('wantref', 'Test requires', default=False)
-# wantframework_option = BoolOption('wantframework', 'Test requires',
-# default=False)
-#
-# gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
-# descr = OptionDescription('tiram', '', [gcgroup, booloption, objspaceoption,
-# wantref_option, stroption,
-# wantframework_option,
-# intoption, boolop])
-# return descr
-
-#def test_rebuild():
-# # pouvoir faire une comparaison avec equal
-# d = {"s1.s2.s3.s4.a": True, "int": 43, "s2.b":True, "s3.c": True, "s3.d":[1,2,3]}
-# cfg = reverse_from_paths(d)
-# assert cfg.s1.s2.s3.s4.a == True
-# assert cfg.int == 43
-# assert cfg.s2.b == True
-# assert cfg.s3.c == True
-# assert cfg.s3.d == [1,2,3]
-
-# assert config.getpaths() == ['gc.name', 'gc.dummy', 'gc.float', 'bool',
-# 'objspace', 'wantref', 'str', 'wantframework',
-# 'int', 'boolop']
-
-# assert config.getpaths(include_groups=False) == ['gc.name', 'gc.dummy', 'gc.float', 'bool', 'objspace', 'wantref', 'str', 'wantframework', 'int', 'boolop']
-# assert config.getpaths(include_groups=True) == ['gc', 'gc.name', 'gc.dummy', 'gc.float', 'bool', 'objspace', 'wantref', 'str', 'wantframework', 'int', 'boolop']
diff --git a/test/test_slots.py b/test/test_slots.py
index 225ccce..d3bfdd0 100644
--- a/test/test_slots.py
+++ b/test/test_slots.py
@@ -1,5 +1,7 @@
## coding: utf-8
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from py.test import raises
from tiramisu.config import Config, SubConfig
@@ -110,6 +112,7 @@ def test_slots_option_readonly_name():
p = DomainnameOption('p', '')
q = DomainnameOption('q', '')
m = OptionDescription('m', '', [a, b, c, d, e, f, g, h, i, j, k, l, o, p, q])
+ m
raises(AttributeError, "a._name = 'a'")
raises(AttributeError, "b._name = 'b'")
raises(AttributeError, "c._name = 'c'")
@@ -154,6 +157,7 @@ def test_slots_setting():
od2 = OptionDescription('a', '', [od1])
c = Config(od2)
s = c.cfgimpl_get_settings()
+ s
raises(AttributeError, "s.x = 1")
@@ -162,4 +166,5 @@ def test_slots_value():
od2 = OptionDescription('a', '', [od1])
c = Config(od2)
v = c.cfgimpl_get_values()
+ v
raises(AttributeError, "v.x = 1")
diff --git a/test/test_state.py b/test/test_state.py
index 1a5d5bf..22931a1 100644
--- a/test/test_state.py
+++ b/test/test_state.py
@@ -1,4 +1,5 @@
-import autopath
+from autopath import do_autopath
+do_autopath()
from tiramisu.option import BoolOption, UnicodeOption, SymLinkOption, \
IntOption, IPOption, NetmaskOption, StrOption, OptionDescription, \
@@ -53,7 +54,7 @@ def _diff_opt(opt1, opt2):
try:
val1 = getattr(opt1, attr)
msg1 = "exists"
- except Exception, err:
+ except:
err1 = True
msg1 = "not exists"
@@ -189,6 +190,7 @@ def test_diff_opt():
def test_only_optiondescription():
b = BoolOption('b', '')
+ b
raises(SystemError, "a = dumps(b)")
diff --git a/test/test_storage.py b/test/test_storage.py
index fd3d743..8906c9e 100644
--- a/test/test_storage.py
+++ b/test/test_storage.py
@@ -1,5 +1,7 @@
# coding: utf-8
-import autopath
+from autopath import do_autopath
+do_autopath()
+
#from py.test import raises
from tiramisu.config import Config
diff --git a/test/test_submulti.py b/test/test_submulti.py
index 6b5108f..ab9c03b 100644
--- a/test/test_submulti.py
+++ b/test/test_submulti.py
@@ -1,5 +1,7 @@
# coding: utf-8
-import autopath
+from autopath import do_autopath
+do_autopath()
+
from tiramisu.setting import groups, owners
from tiramisu.config import Config
from tiramisu.option import StrOption, OptionDescription, submulti
diff --git a/test/test_symlink.py b/test/test_symlink.py
index 7f86837..648d752 100644
--- a/test/test_symlink.py
+++ b/test/test_symlink.py
@@ -1,5 +1,6 @@
# coding: utf-8
-import autopath
+from autopath import do_autopath
+do_autopath()
from tiramisu.option import BoolOption, StrOption, SymLinkOption, \
OptionDescription
@@ -109,6 +110,7 @@ def test_symlink_master():
ip_admin_eth0 = SymLinkOption('ip_admin_eth0', a)
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "", multi=True)
interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
+ interface1
raises(ValueError, 'interface1.impl_set_group_type(groups.master)')
@@ -117,4 +119,5 @@ def test_symlink_slaves():
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])
+ interface1
raises(ValueError, 'interface1.impl_set_group_type(groups.master)')
diff --git a/tiramisu/config.py b/tiramisu/config.py
index 546a522..5ecbd8c 100644
--- a/tiramisu/config.py
+++ b/tiramisu/config.py
@@ -20,7 +20,6 @@
# ____________________________________________________________
"options handler global entry point"
import weakref
-from copy import copy
from tiramisu.error import PropertiesOptionError, ConfigError, ConflictError
@@ -603,9 +602,16 @@ class _CommonConfig(SubConfig):
fake_config = Config(self._impl_descr, persistent=False,
force_storages=get_storages_validation(),
force_settings=self.cfgimpl_get_settings())
- fake_config.cfgimpl_get_values()._p_._values = copy(self.cfgimpl_get_values()._p_.get_modified_values())
+ fake_config.cfgimpl_get_values()._p_._values = self.cfgimpl_get_values()._p_.get_modified_values()
return fake_config
+ def duplicate(self):
+ config = Config(self._impl_descr)
+ config.cfgimpl_get_values()._p_._values = self.cfgimpl_get_values()._p_.get_modified_values()
+ config.cfgimpl_get_settings()._p_._properties = self.cfgimpl_get_settings()._p_.get_modified_properties()
+ config.cfgimpl_get_settings()._p_._permissives = self.cfgimpl_get_settings()._p_.get_modified_permissives()
+ return config
+
# ____________________________________________________________
class Config(_CommonConfig):
diff --git a/tiramisu/option/optiondescription.py b/tiramisu/option/optiondescription.py
index 81851a5..8a3831e 100644
--- a/tiramisu/option/optiondescription.py
+++ b/tiramisu/option/optiondescription.py
@@ -302,6 +302,10 @@ class OptionDescription(BaseOption, StorageOptionDescription):
def __getattr__(self, name, context=undefined):
if name.startswith('_'): # or name.startswith('impl_'):
return object.__getattribute__(self, name)
+ if '.' in name:
+ path = name.split('.')[0]
+ subpath = '.'.join(name.split('.')[1:])
+ return self.__getattr__(path, context=context).__getattr__(subpath, context=context)
return self._getattr(name, context=context)
diff --git a/tiramisu/storage/dictionary/setting.py b/tiramisu/storage/dictionary/setting.py
index fb76109..0422314 100644
--- a/tiramisu/storage/dictionary/setting.py
+++ b/tiramisu/storage/dictionary/setting.py
@@ -15,6 +15,7 @@
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see .
# ____________________________________________________________
+from copy import copy
from ..util import Cache
@@ -58,10 +59,10 @@ class Settings(Cache):
"""return all modified settings in a dictionary
example: {'path1': set(['prop1', 'prop2'])}
"""
- return self._properties
+ return copy(self._properties)
def get_modified_permissives(self):
"""return all modified permissives in a dictionary
example: {'path1': set(['perm1', 'perm2'])}
"""
- return self._permissives
+ return copy(self._permissives)
diff --git a/tiramisu/storage/dictionary/value.py b/tiramisu/storage/dictionary/value.py
index f0ffe3a..15b91fd 100644
--- a/tiramisu/storage/dictionary/value.py
+++ b/tiramisu/storage/dictionary/value.py
@@ -15,7 +15,7 @@
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see .
# ____________________________________________________________
-
+from copy import copy
from ..util import Cache
@@ -58,7 +58,7 @@ class Values(Cache):
"""return all values in a dictionary
example: {'path1': (owner, 'value1'), 'path2': (owner, 'value2')}
"""
- return self._values
+ return copy(self._values)
# owner
def setowner(self, path, owner):