Rename AmbigousOptionError as ConflictOptionError
This commit is contained in:
parent
3170237c8e
commit
80438b1495
|
@ -2,16 +2,18 @@
|
||||||
import autopath
|
import autopath
|
||||||
from py.test import raises
|
from py.test import raises
|
||||||
|
|
||||||
from tiramisu.config import *
|
|
||||||
from tiramisu.option import *
|
|
||||||
from tiramisu.error import *
|
|
||||||
from tiramisu.setting import owners
|
from tiramisu.setting import owners
|
||||||
|
from tiramisu.config import Config
|
||||||
|
from tiramisu.option import ChoiceOption, BoolOption, IntOption, FloatOption, \
|
||||||
|
StrOption, OptionDescription, SymLinkOption
|
||||||
|
from tiramisu.error import ConflictOptionError, PropertiesOptionError
|
||||||
|
|
||||||
|
|
||||||
def make_description():
|
def make_description():
|
||||||
gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
|
gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
|
||||||
gcdummy = BoolOption('dummy', 'dummy', default=False)
|
gcdummy = BoolOption('dummy', 'dummy', default=False)
|
||||||
objspaceoption = ChoiceOption('objspace', 'Object space',
|
objspaceoption = ChoiceOption('objspace', 'Object space',
|
||||||
('std', 'thunk'), 'std')
|
('std', 'thunk'), 'std')
|
||||||
booloption = BoolOption('bool', 'Test boolean option', default=True)
|
booloption = BoolOption('bool', 'Test boolean option', default=True)
|
||||||
intoption = IntOption('int', 'Test int option', default=0)
|
intoption = IntOption('int', 'Test int option', default=0)
|
||||||
floatoption = FloatOption('float', 'Test float option', default=2.3)
|
floatoption = FloatOption('float', 'Test float option', default=2.3)
|
||||||
|
@ -22,10 +24,12 @@ def make_description():
|
||||||
default=False)
|
default=False)
|
||||||
gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
|
gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
|
||||||
descr = OptionDescription('tiramisu', '', [gcgroup, booloption, objspaceoption,
|
descr = OptionDescription('tiramisu', '', [gcgroup, booloption, objspaceoption,
|
||||||
wantref_option, stroption,
|
wantref_option, stroption,
|
||||||
wantframework_option,
|
wantframework_option,
|
||||||
intoption, boolop])
|
intoption, boolop])
|
||||||
return descr
|
return descr
|
||||||
|
|
||||||
|
|
||||||
#____________________________________________________________
|
#____________________________________________________________
|
||||||
# change with __setattr__
|
# change with __setattr__
|
||||||
def test_attribute_access():
|
def test_attribute_access():
|
||||||
|
@ -37,12 +41,14 @@ def test_attribute_access():
|
||||||
config.string = "foo"
|
config.string = "foo"
|
||||||
assert config.string == "foo"
|
assert config.string == "foo"
|
||||||
|
|
||||||
|
|
||||||
def test_setitem():
|
def test_setitem():
|
||||||
s = StrOption("string", "", default=["string", "sdfsdf"], default_multi="prout", multi=True)
|
s = StrOption("string", "", default=["string", "sdfsdf"], default_multi="prout", multi=True)
|
||||||
descr = OptionDescription("options", "", [s])
|
descr = OptionDescription("options", "", [s])
|
||||||
config = Config(descr)
|
config = Config(descr)
|
||||||
config.string[1] = "titi"
|
config.string[1] = "titi"
|
||||||
|
|
||||||
|
|
||||||
def test_reset():
|
def test_reset():
|
||||||
"if value is None, resets to default owner"
|
"if value is None, resets to default owner"
|
||||||
s = StrOption("string", "", default="string")
|
s = StrOption("string", "", default="string")
|
||||||
|
@ -55,8 +61,9 @@ def test_reset():
|
||||||
assert config.string == 'string'
|
assert config.string == 'string'
|
||||||
assert config.cfgimpl_get_values().getowner(s) == owners.default
|
assert config.cfgimpl_get_values().getowner(s) == owners.default
|
||||||
|
|
||||||
|
|
||||||
def test_reset_with_multi():
|
def test_reset_with_multi():
|
||||||
s = StrOption("string", "", default=["string"], default_multi="string" , multi=True)
|
s = StrOption("string", "", default=["string"], default_multi="string", multi=True)
|
||||||
descr = OptionDescription("options", "", [s])
|
descr = OptionDescription("options", "", [s])
|
||||||
config = Config(descr)
|
config = Config(descr)
|
||||||
# config.string = []
|
# config.string = []
|
||||||
|
@ -71,29 +78,34 @@ def test_reset_with_multi():
|
||||||
assert config.cfgimpl_get_values().getowner(s) == 'default'
|
assert config.cfgimpl_get_values().getowner(s) == 'default'
|
||||||
raises(ValueError, "config.string = None")
|
raises(ValueError, "config.string = None")
|
||||||
|
|
||||||
|
|
||||||
def test_default_with_multi():
|
def test_default_with_multi():
|
||||||
"default with multi is a list"
|
"default with multi is a list"
|
||||||
s = StrOption("string", "", default=[], default_multi="string" , multi=True)
|
s = StrOption("string", "", default=[], default_multi="string", multi=True)
|
||||||
descr = OptionDescription("options", "", [s])
|
descr = OptionDescription("options", "", [s])
|
||||||
config = Config(descr)
|
config = Config(descr)
|
||||||
assert config.string == []
|
assert config.string == []
|
||||||
s = StrOption("string", "", default=None, default_multi="string" , multi=True)
|
s = StrOption("string", "", default=None, default_multi="string", multi=True)
|
||||||
descr = OptionDescription("options", "", [s])
|
descr = OptionDescription("options", "", [s])
|
||||||
config = Config(descr)
|
config = Config(descr)
|
||||||
assert config.string == []
|
assert config.string == []
|
||||||
|
|
||||||
|
|
||||||
def test_idontexist():
|
def test_idontexist():
|
||||||
descr = make_description()
|
descr = make_description()
|
||||||
cfg = Config(descr)
|
cfg = Config(descr)
|
||||||
raises(AttributeError, "cfg.idontexist")
|
raises(AttributeError, "cfg.idontexist")
|
||||||
|
|
||||||
|
|
||||||
# ____________________________________________________________
|
# ____________________________________________________________
|
||||||
def test_attribute_access_with_multi():
|
def test_attribute_access_with_multi():
|
||||||
s = StrOption("string", "", default=["string"], default_multi= "string" , multi=True)
|
s = StrOption("string", "", default=["string"], default_multi="string", multi=True)
|
||||||
descr = OptionDescription("options", "", [s])
|
descr = OptionDescription("options", "", [s])
|
||||||
config = Config(descr)
|
config = Config(descr)
|
||||||
config.string = ["foo", "bar"]
|
config.string = ["foo", "bar"]
|
||||||
assert config.string == ["foo", "bar"]
|
assert config.string == ["foo", "bar"]
|
||||||
|
|
||||||
|
|
||||||
def test_item_access_with_multi():
|
def test_item_access_with_multi():
|
||||||
s = StrOption("string", "", default=["string"], multi=True)
|
s = StrOption("string", "", default=["string"], multi=True)
|
||||||
descr = OptionDescription("options", "", [s])
|
descr = OptionDescription("options", "", [s])
|
||||||
|
@ -106,6 +118,7 @@ def test_item_access_with_multi():
|
||||||
# assert config.string[0] == 'changetest'
|
# assert config.string[0] == 'changetest'
|
||||||
# assert config.string[
|
# assert config.string[
|
||||||
|
|
||||||
|
|
||||||
def test_access_with_multi_default():
|
def test_access_with_multi_default():
|
||||||
s = StrOption("string", "", default=["string"], multi=True)
|
s = StrOption("string", "", default=["string"], multi=True)
|
||||||
descr = OptionDescription("options", "", [s])
|
descr = OptionDescription("options", "", [s])
|
||||||
|
@ -122,10 +135,11 @@ def test_access_with_multi_default():
|
||||||
# config.string = ["foo", "bar"]
|
# config.string = ["foo", "bar"]
|
||||||
# assert config.string == ["foo", "bar"]
|
# assert config.string == ["foo", "bar"]
|
||||||
|
|
||||||
|
|
||||||
def test_multi_with_requires():
|
def test_multi_with_requires():
|
||||||
s = StrOption("string", "", default=["string"], default_multi="string", multi=True)
|
s = StrOption("string", "", default=["string"], default_multi="string", multi=True)
|
||||||
intoption = IntOption('int', 'Test int option', default=0)
|
intoption = IntOption('int', 'Test int option', default=0)
|
||||||
stroption = StrOption('str', 'Test string option', default=["abc"], default_multi = "abc",
|
stroption = StrOption('str', 'Test string option', default=["abc"], default_multi="abc",
|
||||||
requires=[('int', 1, 'hidden')], multi=True)
|
requires=[('int', 1, 'hidden')], multi=True)
|
||||||
descr = OptionDescription("options", "", [s, intoption, stroption])
|
descr = OptionDescription("options", "", [s, intoption, stroption])
|
||||||
config = Config(descr)
|
config = Config(descr)
|
||||||
|
@ -136,10 +150,11 @@ def test_multi_with_requires():
|
||||||
raises(PropertiesOptionError, "config.str = ['a', 'b']")
|
raises(PropertiesOptionError, "config.str = ['a', 'b']")
|
||||||
assert config.cfgimpl_get_settings().has_property('hidden', stroption)
|
assert config.cfgimpl_get_settings().has_property('hidden', stroption)
|
||||||
|
|
||||||
|
|
||||||
def test__requires_with_inverted():
|
def test__requires_with_inverted():
|
||||||
s = StrOption("string", "", default=["string"], multi=True)
|
s = StrOption("string", "", default=["string"], multi=True)
|
||||||
intoption = IntOption('int', 'Test int option', default=0)
|
intoption = IntOption('int', 'Test int option', default=0)
|
||||||
stroption = StrOption('str', 'Test string option', default=["abc"], default_multi = "abc",
|
stroption = StrOption('str', 'Test string option', default=["abc"], default_multi="abc",
|
||||||
requires=[('int', 1, 'hide', 'inverted')], multi=True)
|
requires=[('int', 1, 'hide', 'inverted')], multi=True)
|
||||||
descr = OptionDescription("options", "", [s, intoption, stroption])
|
descr = OptionDescription("options", "", [s, intoption, stroption])
|
||||||
config = Config(descr)
|
config = Config(descr)
|
||||||
|
@ -147,6 +162,7 @@ def test__requires_with_inverted():
|
||||||
config.int = 1
|
config.int = 1
|
||||||
assert not config.cfgimpl_get_settings().has_property('hidden', stroption)
|
assert not config.cfgimpl_get_settings().has_property('hidden', stroption)
|
||||||
|
|
||||||
|
|
||||||
def test_multi_with_requires_in_another_group():
|
def test_multi_with_requires_in_another_group():
|
||||||
s = StrOption("string", "", default=["string"], multi=True)
|
s = StrOption("string", "", default=["string"], multi=True)
|
||||||
intoption = IntOption('int', 'Test int option', default=0)
|
intoption = IntOption('int', 'Test int option', default=0)
|
||||||
|
@ -163,6 +179,7 @@ def test_multi_with_requires_in_another_group():
|
||||||
raises(PropertiesOptionError, "config.opt.str = ['a', 'b']")
|
raises(PropertiesOptionError, "config.opt.str = ['a', 'b']")
|
||||||
assert config.cfgimpl_get_settings().has_property('hidden', stroption)
|
assert config.cfgimpl_get_settings().has_property('hidden', stroption)
|
||||||
|
|
||||||
|
|
||||||
def test_apply_requires_from_config():
|
def test_apply_requires_from_config():
|
||||||
s = StrOption("string", "", default=["string"], multi=True)
|
s = StrOption("string", "", default=["string"], multi=True)
|
||||||
intoption = IntOption('int', 'Test int option', default=0)
|
intoption = IntOption('int', 'Test int option', default=0)
|
||||||
|
@ -196,6 +213,7 @@ def test_apply_requires_with_disabled():
|
||||||
raises(PropertiesOptionError, 'config.opt.str')
|
raises(PropertiesOptionError, 'config.opt.str')
|
||||||
assert config.cfgimpl_get_settings().has_property('disabled', stroption)
|
assert config.cfgimpl_get_settings().has_property('disabled', stroption)
|
||||||
|
|
||||||
|
|
||||||
def test_multi_with_requires_with_disabled_in_another_group():
|
def test_multi_with_requires_with_disabled_in_another_group():
|
||||||
s = StrOption("string", "", default=["string"], multi=True)
|
s = StrOption("string", "", default=["string"], multi=True)
|
||||||
intoption = IntOption('int', 'Test int option', default=0)
|
intoption = IntOption('int', 'Test int option', default=0)
|
||||||
|
@ -212,6 +230,7 @@ def test_multi_with_requires_with_disabled_in_another_group():
|
||||||
raises(PropertiesOptionError, "config.opt.str = ['a', 'b']")
|
raises(PropertiesOptionError, "config.opt.str = ['a', 'b']")
|
||||||
assert config.cfgimpl_get_settings().has_property('disabled', stroption)
|
assert config.cfgimpl_get_settings().has_property('disabled', stroption)
|
||||||
|
|
||||||
|
|
||||||
def test_multi_with_requires_that_is_multi():
|
def test_multi_with_requires_that_is_multi():
|
||||||
s = StrOption("string", "", default=["string"], multi=True)
|
s = StrOption("string", "", default=["string"], multi=True)
|
||||||
intoption = IntOption('int', 'Test int option', default=[0], multi=True)
|
intoption = IntOption('int', 'Test int option', default=[0], multi=True)
|
||||||
|
@ -226,22 +245,25 @@ def test_multi_with_requires_that_is_multi():
|
||||||
raises(PropertiesOptionError, "config.str = ['a', 'b']")
|
raises(PropertiesOptionError, "config.str = ['a', 'b']")
|
||||||
assert config.cfgimpl_get_settings().has_property('hidden', stroption)
|
assert config.cfgimpl_get_settings().has_property('hidden', stroption)
|
||||||
|
|
||||||
|
|
||||||
def test_multi_with_bool():
|
def test_multi_with_bool():
|
||||||
s = BoolOption("bool", "", default=[False], multi=True)
|
s = BoolOption("bool", "", default=[False], multi=True)
|
||||||
descr = OptionDescription("options", "", [s])
|
descr = OptionDescription("options", "", [s])
|
||||||
config = Config(descr)
|
config = Config(descr)
|
||||||
assert descr.bool.is_multi() == True
|
assert descr.bool.is_multi() is True
|
||||||
config.bool = [True, False]
|
config.bool = [True, False]
|
||||||
assert config.cfgimpl_get_values()[s] == [True, False]
|
assert config.cfgimpl_get_values()[s] == [True, False]
|
||||||
assert config.bool == [True, False]
|
assert config.bool == [True, False]
|
||||||
|
|
||||||
|
|
||||||
def test_multi_with_bool_two():
|
def test_multi_with_bool_two():
|
||||||
s = BoolOption("bool", "", default=[False], multi=True)
|
s = BoolOption("bool", "", default=[False], multi=True)
|
||||||
descr = OptionDescription("options", "", [s])
|
descr = OptionDescription("options", "", [s])
|
||||||
config = Config(descr)
|
config = Config(descr)
|
||||||
assert descr.bool.is_multi() == True
|
assert descr.bool.is_multi() is True
|
||||||
raises(ValueError, "config.bool = True")
|
raises(ValueError, "config.bool = True")
|
||||||
|
|
||||||
|
|
||||||
def test_choice_access_with_multi():
|
def test_choice_access_with_multi():
|
||||||
ch = ChoiceOption("t1", "", ("a", "b"), default=["a"], multi=True)
|
ch = ChoiceOption("t1", "", ("a", "b"), default=["a"], multi=True)
|
||||||
descr = OptionDescription("options", "", [ch])
|
descr = OptionDescription("options", "", [ch])
|
||||||
|
@ -257,6 +279,8 @@ def test_choice_access_with_multi():
|
||||||
# cfg = Config(descr)
|
# cfg = Config(descr)
|
||||||
# booloption.setoption(cfg, False)
|
# booloption.setoption(cfg, False)
|
||||||
# assert cfg.bool == False
|
# assert cfg.bool == False
|
||||||
|
|
||||||
|
|
||||||
#____________________________________________________________
|
#____________________________________________________________
|
||||||
def test_dwim_set():
|
def test_dwim_set():
|
||||||
descr = OptionDescription("opt", "", [
|
descr = OptionDescription("opt", "", [
|
||||||
|
@ -277,9 +301,10 @@ def test_dwim_set():
|
||||||
c.set(b2=False, **{'sub.c1': 'c'})
|
c.set(b2=False, **{'sub.c1': 'c'})
|
||||||
assert not c.b2
|
assert not c.b2
|
||||||
assert c.sub.c1 == 'c'
|
assert c.sub.c1 == 'c'
|
||||||
raises(AmbigousOptionError, "c.set(d1=True)")
|
raises(ConflictOptionError, "c.set(d1=True)")
|
||||||
raises(AttributeError, "c.set(unknown='foo')")
|
raises(AttributeError, "c.set(unknown='foo')")
|
||||||
|
|
||||||
|
|
||||||
def test_more_set():
|
def test_more_set():
|
||||||
descr = OptionDescription("opt", "", [
|
descr = OptionDescription("opt", "", [
|
||||||
OptionDescription("s1", "", [
|
OptionDescription("s1", "", [
|
||||||
|
@ -291,6 +316,7 @@ def test_more_set():
|
||||||
assert config.s1.a
|
assert config.s1.a
|
||||||
assert config.int == 23
|
assert config.int == 23
|
||||||
|
|
||||||
|
|
||||||
def test_set_with_hidden_option():
|
def test_set_with_hidden_option():
|
||||||
boolopt = BoolOption("a", "", default=False, properties=(('hidden'),))
|
boolopt = BoolOption("a", "", default=False, properties=(('hidden'),))
|
||||||
descr = OptionDescription("opt", "", [
|
descr = OptionDescription("opt", "", [
|
||||||
|
@ -302,6 +328,7 @@ def test_set_with_hidden_option():
|
||||||
setting.read_write()
|
setting.read_write()
|
||||||
raises(PropertiesOptionError, "config.set(**d)")
|
raises(PropertiesOptionError, "config.set(**d)")
|
||||||
|
|
||||||
|
|
||||||
def test_set_with_unknown_option():
|
def test_set_with_unknown_option():
|
||||||
boolopt = BoolOption("b", "", default=False)
|
boolopt = BoolOption("b", "", default=False)
|
||||||
descr = OptionDescription("opt", "", [
|
descr = OptionDescription("opt", "", [
|
||||||
|
@ -320,14 +347,14 @@ def test_set_symlink_option():
|
||||||
config = Config(descr)
|
config = Config(descr)
|
||||||
setattr(config, "s1.b", True)
|
setattr(config, "s1.b", True)
|
||||||
setattr(config, "s1.b", False)
|
setattr(config, "s1.b", False)
|
||||||
assert config.s1.b == False
|
assert config.s1.b is False
|
||||||
assert config.c == False
|
assert config.c is False
|
||||||
config.c = True
|
config.c = True
|
||||||
assert config.s1.b == True
|
assert config.s1.b is True
|
||||||
assert config.c == True
|
assert config.c is True
|
||||||
config.c = False
|
config.c = False
|
||||||
assert config.s1.b == False
|
assert config.s1.b is False
|
||||||
assert config.c == False
|
assert config.c is False
|
||||||
|
|
||||||
##____________________________________________________________
|
##____________________________________________________________
|
||||||
#def test_config_impl_values():
|
#def test_config_impl_values():
|
||||||
|
@ -360,6 +387,7 @@ def test_set_symlink_option():
|
||||||
# s.setoption(config, 'bol')
|
# s.setoption(config, 'bol')
|
||||||
# assert config.string == 'bol'
|
# assert config.string == 'bol'
|
||||||
|
|
||||||
|
|
||||||
def test_allow_multiple_changes_from_config():
|
def test_allow_multiple_changes_from_config():
|
||||||
"""
|
"""
|
||||||
a `setoption` from the config object is much like the attribute access,
|
a `setoption` from the config object is much like the attribute access,
|
||||||
|
@ -373,29 +401,29 @@ def test_allow_multiple_changes_from_config():
|
||||||
config.setoption("string", s, 'blah')
|
config.setoption("string", s, 'blah')
|
||||||
config.setoption("string", s, "oh")
|
config.setoption("string", s, "oh")
|
||||||
assert config.string == "oh"
|
assert config.string == "oh"
|
||||||
config.set(string2= 'blah')
|
config.set(string2='blah')
|
||||||
assert config.bip.string2 == 'blah'
|
assert config.bip.string2 == 'blah'
|
||||||
|
|
||||||
|
|
||||||
# ____________________________________________________________
|
# ____________________________________________________________
|
||||||
# accessing a value by the get method
|
# accessing a value by the get method
|
||||||
def test_access_by_get():
|
def test_access_by_get():
|
||||||
descr = make_description()
|
descr = make_description()
|
||||||
cfg = Config(descr)
|
cfg = Config(descr)
|
||||||
raises(AttributeError, "cfg.find(byname='idontexist')" )
|
raises(AttributeError, "cfg.find(byname='idontexist')")
|
||||||
assert cfg.find_first(byname='wantref', type_='value') == False
|
assert cfg.find_first(byname='wantref', type_='value') is False
|
||||||
assert cfg.gc.dummy == False
|
assert cfg.gc.dummy is False
|
||||||
assert cfg.find_first(byname='dummy', type_='value') == False
|
assert cfg.find_first(byname='dummy', type_='value') is False
|
||||||
|
|
||||||
|
|
||||||
def test_access_by_get_whith_hide():
|
def test_access_by_get_whith_hide():
|
||||||
b1 = BoolOption("b1", "", properties=(('hidden'),))
|
b1 = BoolOption("b1", "", properties=(('hidden'),))
|
||||||
descr = OptionDescription("opt", "", [
|
descr = OptionDescription("opt", "",
|
||||||
OptionDescription("sub", "", [
|
[OptionDescription("sub", "",
|
||||||
b1,
|
[b1, ChoiceOption("c1", "", ('a', 'b', 'c'), 'a'),
|
||||||
ChoiceOption("c1", "", ('a', 'b', 'c'), 'a'),
|
BoolOption("d1", "")]),
|
||||||
BoolOption("d1", ""),
|
BoolOption("b2", ""),
|
||||||
]),
|
BoolOption("d1", "")])
|
||||||
BoolOption("b2", ""),
|
|
||||||
BoolOption("d1", ""),
|
|
||||||
])
|
|
||||||
c = Config(descr)
|
c = Config(descr)
|
||||||
setting = c.cfgimpl_get_settings()
|
setting = c.cfgimpl_get_settings()
|
||||||
setting.read_write()
|
setting.read_write()
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
# the whole pypy projet is under MIT licence
|
# the whole pypy projet is under MIT licence
|
||||||
# ____________________________________________________________
|
# ____________________________________________________________
|
||||||
#from inspect import getmembers, ismethod
|
#from inspect import getmembers, ismethod
|
||||||
from tiramisu.error import PropertiesOptionError, AmbigousOptionError
|
from tiramisu.error import PropertiesOptionError, ConflictOptionError
|
||||||
from tiramisu.option import OptionDescription, Option, SymLinkOption
|
from tiramisu.option import OptionDescription, Option, SymLinkOption
|
||||||
from tiramisu.setting import groups, Setting, apply_requires
|
from tiramisu.setting import groups, Setting, apply_requires
|
||||||
from tiramisu.value import Values
|
from tiramisu.value import Values
|
||||||
|
@ -401,7 +401,7 @@ class Config(SubConfig):
|
||||||
child = getattr(homeconfig._cfgimpl_descr, name)
|
child = getattr(homeconfig._cfgimpl_descr, name)
|
||||||
homeconfig.setoption(name, child, value)
|
homeconfig.setoption(name, child, value)
|
||||||
elif len(candidates) > 1:
|
elif len(candidates) > 1:
|
||||||
raise AmbigousOptionError(
|
raise ConflictOptionError(
|
||||||
_('more than one option that ends with {}').format(key))
|
_('more than one option that ends with {}').format(key))
|
||||||
else:
|
else:
|
||||||
raise AttributeError(
|
raise AttributeError(
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#AttributeError if no option or optiondescription in optiondescription (also when specified a path)
|
#AttributeError if no option or optiondescription in optiondescription (also when specified a path)
|
||||||
|
|
||||||
|
|
||||||
class AmbigousOptionError(StandardError):
|
class ConflictOptionError(StandardError):
|
||||||
"more than one option"
|
"more than one option"
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue