Admin Panel
from amitools.vamos.cfgcore import *
from StringIO import StringIO
import logging
import os
def config_main_logging_test(caplog):
mp = MainParser(debug=True)
assert caplog.record_tuples == [
('config', logging.DEBUG, 'logging setup')
]
def config_main_ini_test():
mp = MainParser()
cfg = """
[hello]
key=value
what=on
number=12
[more]
sys=/home/me
"""
io = StringIO(cfg)
res = mp.parse_ini_config(io)
assert res == {
"hello": {
"key": "value",
"what": "on",
"number": "12"
},
"more": {
"sys": "/home/me"
}}
def config_main_ini_error_test(caplog):
mp = MainParser()
cfg = """
[hello
"""
io = StringIO(cfg)
assert mp.parse_ini_config(io) is None
assert caplog.record_tuples == [
('config', logging.ERROR,
"???: ini parser failed: File contains no section headers. file: <???>, line: 2 '[hello\\n'")
]
def config_main_json_test():
mp = MainParser()
cfg = """
{ "hello": {
"key": "value",
"what": true,
"number": 12
},
"more": {
"sys": "/home/me"
}
}
"""
io = StringIO(cfg)
res = mp.parse_json_config(io)
assert res == {
"hello": {
"key": "value",
"what": True,
"number": 12
},
"more": {
"sys": "/home/me"
}}
def config_main_json_error_test(caplog):
mp = MainParser()
cfg = """
{ "hello": {
"key": "value",
"""
io = StringIO(cfg)
assert mp.parse_json_config(io) is None
assert caplog.record_tuples == [
('config', logging.ERROR,
"???: json parser failed: Expecting object: line 3 column 20 (char 33)")
]
def config_main_auto_ini_test():
mp = MainParser()
cfg = """
[hello]
key=value
what=on
number=12
[more]
sys=/home/me
"""
io = StringIO(cfg)
res = mp.parse_config_auto(io)
assert res == {
"hello": {
"key": "value",
"what": "on",
"number": "12"
},
"more": {
"sys": "/home/me"
}}
def config_main_auto_json_test():
mp = MainParser()
cfg = """
{ "hello": {
"key": "value",
"what": true,
"number": 12
},
"more": {
"sys": "/home/me"
}
}
"""
io = StringIO(cfg)
res = mp.parse_config_auto(io)
assert res == {
"hello": {
"key": "value",
"what": True,
"number": 12
},
"more": {
"sys": "/home/me"
}}
def config_main_add_file_arg_test():
mp = MainParser()
mp.add_file_arg()
assert mp.pre_parse_args([]) == (True, None, False)
assert mp.pre_parse_args(['-c', 'bla']) == (True, 'bla', False)
assert mp.pre_parse_args(['--config-file', 'bla']) == (True, 'bla', False)
def config_main_add_skip_arg_test():
mp = MainParser()
mp.add_skip_arg()
assert mp.pre_parse_args([]) == (True, None, False)
assert mp.pre_parse_args(['-S']) == (True, None, True)
assert mp.pre_parse_args(['--skip-configs']) == (True, None, True)
def config_main_parse_test(tmpdir):
tmpdir.join("cfg1").write("[hello]\na=1")
tmpdir.join("cfg2").write("[hello]\nb=1")
cfg1 = str(tmpdir.join("cfg1"))
cfg2 = str(tmpdir.join("cfg2"))
paths = [cfg1, cfg2]
mp = MainParser()
assert mp.parse(paths, args=[])
mp = MainParser()
assert mp.parse(paths, args=['-S'])
mp = MainParser()
assert mp.parse(paths, args=['-c', cfg2])
def config_main_parse_fail_test(tmpdir):
tmpdir.join("cfg1").write("[hello\na=1")
tmpdir.join("cfg2").write("[hello\nb=1")
cfg1 = str(tmpdir.join("cfg1"))
cfg2 = str(tmpdir.join("cfg2"))
paths = [cfg1, cfg2]
mp = MainParser()
assert not mp.parse(paths, args=[])
mp = MainParser()
assert mp.parse(paths, args=['-S'])
mp = MainParser()
assert not mp.parse(paths, args=['-c', cfg2])
def config_main_parse_skip_nonexist_test(tmpdir):
cfg1 = str(tmpdir.join("cfg1"))
cfg2 = str(tmpdir.join("cfg2"))
paths = [cfg1, cfg2]
mp = MainParser()
assert mp.parse(paths, args=[])
mp = MainParser()
assert mp.parse(paths, args=['-S'])
mp = MainParser()
assert not mp.parse(paths, args=['-c', cfg2])
def config_main_parse_custom_args_test(tmpdir):
mp = MainParser()
p = mp.get_arg_parser()
p.add_argument("--fusel", action='store')
assert mp.parse(args=['--fusel', 'bla'])
args = mp.get_args()
assert args.fusel == 'bla'
def gen_parser(list_sections=None):
def_cfg = {"a": {"v": 1,
"w": ValueList(str),
"x": True},
"b": "hello",
"c": ValueDict(int)}
arg_cfg = {"a": {"v": Argument("-v", action='store_const', const=2),
"w": Argument("-w"),
"x": Argument("-x", action='store_false')},
"b": Argument("-b"),
"c": Argument("-C")}
return Parser("parser", def_cfg, arg_cfg, ini_list_sections=list_sections)
def config_main_parser_config_test(tmpdir):
mp = MainParser()
p = gen_parser()
mp.add_parser(p)
tmpdir.join("cfg1").write("[a]\nv=3")
cfg1 = str(tmpdir.join("cfg1"))
paths = [cfg1]
# run without args
assert mp.parse(paths, args=[])
assert p.get_cfg_dict() == {
"a": {"v": 3, # from config
"w": None,
"x": True},
"b": "hello",
"c": None
}
def config_main_parser_config_fail_test(tmpdir, caplog):
mp = MainParser()
p = gen_parser()
mp.add_parser(p)
tmpdir.join("cfg1").write("[a]\nv=hallo")
cfg1 = str(tmpdir.join("cfg1"))
paths = [cfg1]
# run without args
assert not mp.parse(paths, args=[])
assert caplog.record_tuples == [
('config', logging.ERROR,
"parser: failed: invalid literal for int() with base 10: 'hallo'")
]
def config_main_parser_args_test(tmpdir):
mp = MainParser()
p = gen_parser()
mp.add_parser(p)
tmpdir.join("cfg1").write("[a]\nv=3")
cfg1 = str(tmpdir.join("cfg1"))
paths = [cfg1]
# run with args
assert mp.parse(paths, args=['-v'])
assert p.get_cfg_dict() == {
"a": {"v": 2, # from args
"w": None,
"x": True},
"b": "hello",
"c": None
}
def config_main_parser_args_fail_test(tmpdir, caplog):
mp = MainParser()
p = gen_parser()
mp.add_parser(p)
tmpdir.join("cfg1").write("[a]\nv=3")
cfg1 = str(tmpdir.join("cfg1"))
paths = [cfg1]
# run with args
assert not mp.parse(paths, args=['--blubber'])
assert caplog.record_tuples == [
('config', logging.ERROR, 'args: unrecognized arguments: --blubber')
]
def config_main_parser_args_fail2_test(tmpdir, caplog):
mp = MainParser()
p = gen_parser()
mp.add_parser(p)
tmpdir.join("cfg1").write("[a]\nv=3")
cfg1 = str(tmpdir.join("cfg1"))
paths = [cfg1]
# run with args
assert not mp.parse(paths, args=['-C', 'a:hugo'])
assert caplog.record_tuples == [
('config', logging.ERROR,
"args: parser failed: invalid literal for int() with base 10: 'hugo'")
]
def config_main_parser_dict_test(tmpdir):
mp = MainParser()
p = gen_parser()
mp.add_parser(p)
# run with dict
d = {
"a": {"v": 2}
}
assert mp.parse(args=[], cfg_dict=d)
assert p.get_cfg_dict() == {
"a": {"v": 2, # from dict
"w": None,
"x": True},
"b": "hello",
"c": None
}
def config_main_parser_dict_fail_test(tmpdir, caplog):
mp = MainParser()
p = gen_parser()
mp.add_parser(p)
# run with dict
d = {
"a": {"v": "blubber"}
}
assert not mp.parse(args=[], cfg_dict=d)
assert caplog.record_tuples == [
('config', logging.ERROR,
"parser: failed: invalid literal for int() with base 10: 'blubber'")
]