Beispiel #1
0
def get_tree(dict_argv):
    """
    Check that arguments given for tree step are compatible
    """
    # Get arguments from config file and add them (overwrite if needed)
    if not "configfile" in dict_argv:
        conf_conffile = utils_argparse.Conf_all_parser("", ["tree"])
    else:
        conf_conffile = utils_argparse.Conf_all_parser(dict_argv['configfile'],
                                                       readsec=["tree"])
    # Add arguments from commandline
    conf_conffile.update(dict_argv, "tree")
    # Add default arguments if not found in commandline nor config file
    defaults = {
        "verbose": 0,
        "quiet": False,
        "threads": 1,
        "soft": "iqtree",
        "model": None,
        "boot": 0,
        "write_boot": False,
        "memory": None,
        "fast": False
    }
    conf_conffile.add_default(defaults, "tree")
    conf_conffile.set_boolean("tree", "quiet")
    conf_conffile.set_boolean("tree", "fast")
    conf_conffile.set_boolean("tree", "write_boot")
    conf_conffile.set_int("tree", "boot")
    conf_conffile.set_int("tree", "verbose")
    conf_conffile.set_int("tree", "threads")
    tree_dict = conf_conffile.get_section_dict("tree")
    return tree_dict
Beispiel #2
0
def test_conf_parser_update(capsys):
    """
    Test update section
    Update current parameters with values given
    """
    c1 = autils.Conf_all_parser(CONFFILE, ["sec1", "sec4"])
    update = {"param1": "55", "defparam": "default value"}
    # Add default parameters to sec1
    c1.update(update, "sec1")
    assert c1.get_section_dict("sec1") == {"param1": "55", "param2": "10", 'sec1p': "",
                                          "toto": "parameter", "titi": "my value",
                                          "defparam": "default value"}
    assert c1.get_section_dict("sec4") == {}
    c1["sec1"]["param1"] == "10"
    c1["sec1"]["defparam"] == "default value"
    c1["sec4"]["param1"] == "3"   # sec4 has default parameter found in configfile

    # Add default parameters to sec1
    c2 = autils.Conf_all_parser(CONFFILE, ["sec1", "sec4"])
    c2.update(update, "sec4")
    assert c2.get_section_dict("sec1") == {"param1": "10", "param2": "10", 'sec1p': "",
                                          "toto": "parameter", "titi": "my value"}
    assert c2.get_section_dict("sec4") == {"param1": "55", "defparam": "default value"}
    c2["sec1"]["param1"] == "10"
    c2["sec4"]["param1"] == "55"   # sec4 has default parameter found in configfile
Beispiel #3
0
def test_conf_parser_init_empty(capsys):
    """
    test class Conf_all_parser init when no config file or empty config file
    """
    # No conf file, no section
    c = autils.Conf_all_parser("")
    assert c.sec_dicts == {}
    # No conf file, empty section list
    c = autils.Conf_all_parser("", [])
    assert c.sec_dicts == {}
    # No conf file, sections
    c = autils.Conf_all_parser("", ["sec1", "sec2"])
    assert c.sec_dicts == {"sec1": {}, "sec2": {}}

    confdir = os.path.join("test", "data", "generated_by_utils")
    os.makedirs(confdir)
    conffile = os.path.join(confdir, "conf.ini")
    open(conffile, "w").close()
    # Empty conffile, no section
    c = autils.Conf_all_parser(conffile)
    assert c.sec_dicts == {}
    # Empty conffile, sections
    c = autils.Conf_all_parser(conffile, ["sec1", "sec2"])
    assert c.sec_dicts == {"sec1": {}, "sec2": {}}
    shutil.rmtree(confdir)
Beispiel #4
0
def get_corepers(dict_argv):
    """
    Check that arguments given for corepers step are compatible
    """
    # Get arguments from config file and add them (overwrite if needed)
    if not "configfile" in dict_argv:
        conf_conffile = utils_argparse.Conf_all_parser("", ["corepers"])
    else:
        conf_conffile = utils_argparse.Conf_all_parser(dict_argv['configfile'],
                                                       readsec=["corepers"])
    # Add arguments from commandline
    conf_conffile.update(dict_argv, "corepers")
    # Add default arguments if not found in commandline nor config file
    defaults = {
        "verbose": 0,
        "quiet": False,
        "tol": 1,
        "mixed": False,
        "multi": False,
        "floor": False,
        "threads": 1
    }
    conf_conffile.add_default(defaults, "corepers")
    conf_conffile.set_boolean("corepers", "quiet")
    conf_conffile.set_boolean("corepers", "floor")
    conf_conffile.set_boolean("corepers", "mixed")
    conf_conffile.set_boolean("corepers", "multi")
    conf_conffile.set_int("corepers", "verbose")
    conf_conffile.set_float("corepers", "tol")
    conf_conffile.set_int("corepers", "threads")
    corepers_dict = conf_conffile.get_section_dict("corepers")
    return corepers_dict
Beispiel #5
0
def get_pangenome(dict_argv):
    """
    Check that arguments given for pangenome step are compatible
    """
    # Get arguments from config file and add them (overwrite if needed)
    if not "configfile" in dict_argv:
        conf_conffile = utils_argparse.Conf_all_parser("", ["pangenome"])
    else:
        conf_conffile = utils_argparse.Conf_all_parser(dict_argv['configfile'],
                                                       readsec=["pangenome"])
    # Add arguments from commandline
    conf_conffile.update(dict_argv, "pangenome")
    # Add default arguments if not found in commandline nor config file
    defaults = {
        "verbose": 0,
        "threads": 1,
        "min_id": 0.8,
        "quiet": False,
        "clust_mode": 1,
        "outfile": "",
        "spedir": ""
    }
    conf_conffile.add_default(defaults, "pangenome")
    conf_conffile.set_boolean("pangenome", "quiet")
    conf_conffile.set_int("pangenome", "verbose")
    conf_conffile.set_int("pangenome", "threads")
    conf_conffile.set_float("pangenome", "min_id")
    pan_dict = conf_conffile.get_section_dict("pangenome")
    return pan_dict
Beispiel #6
0
def test_conf_parser_setbool(capsys):
    """
    try to convert a given parameter to a boolean
    """
    c1 = autils.Conf_all_parser(CONFFILE, ["sec_bool"])
    # 0/1 to False/True
    c1.set_boolean("sec_bool", "bool num_false")
    assert c1["sec_bool"]["bool num_false"] == "0"
    assert c1.sec_dicts["sec_bool"]["bool num_false"] == False
    c1.set_boolean("sec_bool", "bool_num_true")
    assert c1["sec_bool"]["bool_num_true"] == "1"
    assert c1.sec_dicts["sec_bool"]["bool_num_true"] == True

    # off/on to False/True
    c1.set_boolean("sec_bool", "bool_f")
    assert c1["sec_bool"]["bool_f"] == "off"
    assert c1.sec_dicts["sec_bool"]["bool_f"] == False
    c1.set_boolean("sec_bool", "bool_t")
    assert c1["sec_bool"]["bool_t"] == "ON"
    assert c1.sec_dicts["sec_bool"]["bool_t"] == True

    # no/yes to False/True
    c1.set_boolean("sec_bool", "bool_n")
    assert c1["sec_bool"]["bool_n"] == "no"
    assert c1.sec_dicts["sec_bool"]["bool_n"] == False
    c1.set_boolean("sec_bool", "bool_y")
    assert c1["sec_bool"]["bool_y"] == "YES"
    assert c1.sec_dicts["sec_bool"]["bool_y"] == True

    # false/true to False/True
    c1.set_boolean("sec_bool", "bool_false")
    assert c1["sec_bool"]["bool_false"] == "FalSe"
    assert c1.sec_dicts["sec_bool"]["bool_false"] == False
    c1.set_boolean("sec_bool", "bool_true")
    assert c1["sec_bool"]["bool_true"] == "tRUE"
    assert c1.sec_dicts["sec_bool"]["bool_true"] == True

    # With a boolean called with "", not cleaned
    cfg_file = os.path.join("test", "data", "utils", "configfile-str.ini")
    c_str = autils.Conf_all_parser(cfg_file, ["sec_bool"], clean_str=False)
    with pytest.raises(SystemExit):
        c_str.set_boolean("sec_bool", "bool_f")
    out, err = capsys.readouterr()
    assert ('ERROR: bool_f must be a boolean. Wrong value: "off".') in out

    # With a boolean called with "" but cleaned
    cfg_file = os.path.join("test", "data", "utils", "configfile-str.ini")
    c_str = autils.Conf_all_parser(cfg_file, ["sec_bool"])
    c_str.set_boolean("sec_bool", "bool_f")
    assert c1["sec_bool"]["bool_f"] == 'off'
    assert c1.sec_dicts["sec_bool"]["bool_f"] == False

    # error
    with pytest.raises(SystemExit):
        c1.set_boolean('sec1', "param1")
    out, err = capsys.readouterr()
    assert ('ERROR: param1 must be a boolean. Wrong value: 10.') in out
Beispiel #7
0
def get_prepare(dict_argv):
    """
    Check that arguments given for prepare step are compatible
    """
    # Get arguments from config file and add them (overwrite if needed)
    if not "configfile" in dict_argv:
        conf_conffile = utils_argparse.Conf_all_parser("", ["prepare"])
    else:
        conf_conffile = utils_argparse.Conf_all_parser(dict_argv['configfile'],
                                                       readsec=["prepare"])
    # Add arguments from commandline
    conf_conffile.update(dict_argv, "prepare")
    # Add default arguments if not found in cmd line nor config file
    defaults = {
        "verbose": 0,
        "threads": 1,
        "cutn": 5,
        "l90": 100,
        "nbcont": 999,
        "levels": "all",
        "quiet": False,
        "ncbi_species_name": "",
        "ncbi_species_taxid": "",
        "ncbi_taxid": "",
        "strains": "",
        "tmp_dir": "",
        "db_dir": "",
        "info_file": "",
        "min_dist": 1e-4,
        "max_dist": 0.06,
        "norefseq": False,
        "only_mash": False,
        "ncbi_section": "refseq"
    }
    conf_conffile.add_default(defaults, "prepare")
    # Change to expected types (boolean, int, float)
    conf_conffile.set_boolean("prepare", "quiet")
    conf_conffile.set_boolean("prepare", "only_mash")
    conf_conffile.set_boolean("prepare", "norefseq")
    conf_conffile.set_int("prepare", "threads")
    conf_conffile.set_int("prepare", "verbose")
    conf_conffile.set_int("prepare", "cutn")
    conf_conffile.set_int("prepare", "l90")
    conf_conffile.set_int("prepare", "nbcont")
    conf_conffile.set_float("prepare", "min_dist")
    conf_conffile.set_float("prepare", "max_dist")
    prep_dict = conf_conffile.get_section_dict("prepare")
    return prep_dict
Beispiel #8
0
def test_conf_parser_add_default(capsys):
    """
    Test add default parameters to config parser.
    If parameter given already exists, do nothing. If does not exist, add it with given value
    """
    c = autils.Conf_all_parser(CONFFILE, ["sec1", "sec4"])
    defaults = {"param1": "55", "defparam": "default value"}
    # Add default parameters to sec1
    c.add_default(defaults, "sec1")
    assert c.get_section_dict("sec1") == {"param1": "10", "param2": "10", 'sec1p': "",
                                          "toto": "parameter", "titi": "my value",
                                          "defparam": "default value"}
    assert c.get_section_dict("sec4") == {}
    c["sec1"]["param1"] == "10"
    c["sec1"]["defparam"] == "default value"
    c["sec4"]["param1"] == "3"   # sec4 has default parameter found in configfile

    # Add default parameters to sec4 (sec1 already have them)
    c.add_default(defaults, "sec4")
    assert c.get_section_dict("sec1") == {"param1": "10", "param2": "10", 'sec1p': "",
                                          "toto": "parameter", "titi": "my value",
                                          "defparam": "default value"}
    assert c.get_section_dict("sec4") == {"param1": "55", "defparam": "default value"}
    c["sec1"]["param1"] == "10"
    c["sec1"]["defparam"] == "default value"
    c["sec4"]["param1"] == "55"
Beispiel #9
0
def test_conf_parser_init_notexisting(capsys):
    """
    test class Conf_all_parser init when given configfile does not exist
    """
    with pytest.raises(SystemExit):
        autils.Conf_all_parser("not_existing_conffile.ini")
    out, err = capsys.readouterr()
    assert "Error: config file not_existing_conffile.ini not found." in out
Beispiel #10
0
def get_align(dict_argv):
    """
    Check that arguments given for align step are compatible
    """
    # Get arguments from config file and add them (overwrite if needed)
    if not "configfile" in dict_argv:
        conf_conffile = utils_argparse.Conf_all_parser("", ["align"])
    else:
        conf_conffile = utils_argparse.Conf_all_parser(dict_argv['configfile'],
                                                       readsec=["align"])
    # Add arguments from commandline
    conf_conffile.update(dict_argv, "align")
    # Add default arguments if not found in commandline nor config file
    defaults = {"prot_ali": False}
    conf_conffile.add_default(defaults, "align")
    conf_conffile.set_boolean("align", "prot_ali")
    ali_dict = conf_conffile.get_section_dict("align")
    return ali_dict
Beispiel #11
0
def test_conf_parser_init_duplicate(capsys):
    """
    test class Conf_all_parser configfile contains a duplicated parameter
    -> raises error
    """
    conffile = os.path.join("test", "data", "utils", "configfile-dup.ini")
    with pytest.raises(SystemExit):
        autils.Conf_all_parser(conffile)
    out, err = capsys.readouterr()
    assert "option 'bool_y' in section 'sec_bool' already exists" in out
Beispiel #12
0
def get_annotate(dict_argv):
    """
    Check that arguments given for annotate step are compatible
    """
    # Get arguments from config file and add them (overwrite if needed)
    if not "configfile" in dict_argv:
        conf_conffile = utils_argparse.Conf_all_parser("", ["annotate"])
    else:
        conf_conffile = utils_argparse.Conf_all_parser(dict_argv['configfile'],
                                                       readsec=["annotate"])
    # Add arguments from commandline
    not_allowed = ["l90", "nbcont", "cutn"]
    for param in not_allowed:
        if param in conf_conffile.get_section_dict("annotate").keys():
            print(f"{param} not allowed in annotate section.")
            sys.exit(1)
    conf_conffile.update(dict_argv, "annotate")
    if "date" not in dict(conf_conffile["annotate"]):
        import time
        date = time.strftime("%m%y")
        conf_conffile.update({"date": date}, "annotate")
    # Add default arguments if not found in commandline nor config file
    defaults = {
        "verbose": 0,
        "threads": 1,
        "quiet": False,
        "prodigal_only": False,
        "small": False,
        "qc_only": False,
        "list_file": "list_file",
        "db_path": "db_path",
        "from_info": False
    }
    conf_conffile.add_default(defaults, "annotate")
    conf_conffile.set_boolean("annotate", "quiet")
    conf_conffile.set_boolean("annotate", "prodigal_only")
    conf_conffile.set_boolean("annotate", "small")
    conf_conffile.set_boolean("annotate", "qc_only")
    conf_conffile.set_int("annotate", "verbose")
    conf_conffile.set_int("annotate", "threads")
    annot_dict = conf_conffile.get_section_dict("annotate")
    return annot_dict
Beispiel #13
0
def test_conf_parser_setint(capsys):
    """
    try to convert a given parameter to an int
    """
    c1 = autils.Conf_all_parser(CONFFILE, ["sec1"])
    c1.set_int("sec1", "param1")
    assert c1["sec1"]["param1"] == "10"
    assert c1.sec_dicts["sec1"]["param1"] == 10

    # With an int called with "" but cleaned
    cfg_file = os.path.join("test", "data", "utils", "configfile-str.ini")
    c_str = autils.Conf_all_parser(cfg_file, ["sec2"])
    assert c_str.sec_dicts["sec2"]["paramint"] == "2"
    c_str.set_int("sec2", "paramint")
    assert c_str["sec2"]["paramint"] == "2"
    assert c_str.sec_dicts["sec2"]["paramint"] == 2

    with pytest.raises(SystemExit):
        c1.set_int("sec1", "toto")
    out, err = capsys.readouterr()
    assert ('ERROR: toto must be an int. Wrong value: parameter.') in out
Beispiel #14
0
def test_conf_parser_init():
    """
    Test config parser with a given config file. Check value of defaults etc.
    """
    # configfile but no section
    c = autils.Conf_all_parser(CONFFILE)
    assert c["sec1"]["toto"] == "parameter"
    assert c["sec1"]["param1"] == "10"
    assert c["sec2"]["param1"] == "3"
    assert c["sec3"]["param1"] == "3"
    assert c["sec1"]["param2"] == "10"
    assert c["sec2"]["param2"] == ''
    assert c["sec3"]["param2"] == "10"
    assert c.sec_dicts == {}

    # configfile and 2 sections among 3 existing in configfile
    c = autils.Conf_all_parser(CONFFILE, ["sec1", "sec3"])
    assert c["sec1"]["toto"] == "parameter"
    assert c["sec1"]["param1"] == "10"
    assert c["sec2"]["param1"] == "3"
    assert c["sec2"]["myval"] == "parameter"
    assert c["sec3"]["param1"] == "3"
    assert c["sec1"]["param2"] == "10"
    assert c["sec2"]["param2"] == ''
    assert c["sec3"]["param2"] == "10"
    assert c.sec_dicts == {"sec1": {"param1": "10", "param2": "10", 'sec1p': "",
                                    "toto": "parameter", "titi": "my value"},
                           "sec3": {"param1": "3", "param2": "10"}}

    # configfile 2 sections, 1 not in configfile
    c = autils.Conf_all_parser(CONFFILE, ["sec1", "sec4"])
    assert c["sec1"]["toto"] == "parameter"
    assert c["sec1"]["param1"] == "10"
    assert c["sec2"]["param1"] == "3"
    assert c["sec4"]["param1"] == "3"  # created sec4 with default parameters
    assert c["sec4"]["param2"] == "10"  # created sec4 with default parameters
    assert not "toto" in c["sec4"]  # created sec4 with default parameters
    assert c.sec_dicts == {"sec1": {"param1": "10", "param2": "10", 'sec1p': "",
                                    "toto": "parameter", "titi": "my value"},
                           "sec4": {}}  # But sec4 dict is empty (no param given in configfile)
Beispiel #15
0
def test_conf_parser_clean_str(capsys):
    """
    Check that surounding "" are removed
    """
    cfg_file = os.path.join("test", "data", "utils", "configfile-str.ini")
    c = autils.Conf_all_parser(cfg_file, ["sec2", "sec_bool"])
    assert c.get_section_dict("sec2") == {"param2": "", "myval": "parameter", 
                                          'param3': "myparameter",
                                          "param1": "3", "paramint": "2"}
    assert c.get_section_dict("sec_bool") == {"bool num_false": "0", "bool_num_true": "1", 
                                              "bool_f": "off", "bool_t": "ON", "bool_n": "no",
                                              "bool_y": "YES", 
                                              "bool_false": "FalSe", "bool_true": "tRUE",
                                              "param1": "3", "param2": "10"}
Beispiel #16
0
def test_conf_parser_get_section(capsys):
    """
    Test get dict of values for a given section
    """
    c = autils.Conf_all_parser(CONFFILE, ["sec1", "sec4"])
    # Get sec1 dict
    assert c.get_section_dict("sec1") == {"param1": "10", "param2": "10", 'sec1p': "",
                                          "toto": "parameter", "titi": "my value"}
    assert c.get_section_dict("sec4") == {}
    # Try to get sec2 dict, but does not exist
    with pytest.raises(SystemExit):
        c.get_section_dict("sec2")
    out, err = capsys.readouterr()
    assert ('No section sec2 in test/data/utils/configfile.ini') in out
Beispiel #17
0
def test_conf_parser_setfloat(capsys):
    """
    try to convert a given parameter to a float
    """
    c1 = autils.Conf_all_parser(CONFFILE, ["sec_float"])
    # float with decimal
    c1.set_float("sec_float", "float_param")
    assert c1["sec_float"]["float_param"] == "0.12"
    assert c1.sec_dicts["sec_float"]["float_param"] == 0.12

    # exp format
    c1.set_float("sec_float", "float_param2")
    assert c1["sec_float"]["float_param2"] == "1e5"
    assert c1.sec_dicts["sec_float"]["float_param2"] == 100000

    with pytest.raises(SystemExit):
        c1.set_float("sec1", "toto")
    out, err = capsys.readouterr()
    assert ('ERROR: toto must be a float. Wrong value: parameter.') in out

    # With a fload called with "" but cleaned
    cfg_file = os.path.join("test", "data", "utils", "configfile-str.ini")
    c_str = autils.Conf_all_parser(cfg_file, ["sec_float"])
    assert c_str.sec_dicts["sec_float"]["float_param"] == "0.12"
    c_str.set_float("sec_float", "float_param")
    assert c_str["sec_float"]["float_param"] == "0.12"
    assert c_str.sec_dicts["sec_float"]["float_param"] == 0.12

    # With a fload called with "" not cleaned
    cfg_file = os.path.join("test", "data", "utils", "configfile-str.ini")
    c_str = autils.Conf_all_parser(cfg_file, ["sec_float"], clean_str=False)
    assert c_str.sec_dicts["sec_float"]["float_param"] == '"0.12"'
    with pytest.raises(SystemExit):
        c_str.set_float("sec_float", "float_param")
    out, err = capsys.readouterr()
    assert ('ERROR: float_param must be a float. Wrong value: "0.12".') in out
Beispiel #18
0
def test_conf_parser_init_noCleanStr():
    """
    Test config parser with a given config file. Do not clean str (keep surounding "")
    """
    # configfile but no section
    cfg_file = os.path.join("test", "data", "utils", "configfile-str.ini")
    c = autils.Conf_all_parser(cfg_file, clean_str=False)
    assert c["sec2"]["param1"] == "3"
    assert c["sec2"]["param2"] == ''
    assert c["sec2"]["myval"] == '"parameter"'
    assert c["sec2"]["param3"] == 'myparameter'
    assert c["sec3"]["param1"] == "3"
    assert c["sec3"]["param2"] == "10"
    assert c["sec_bool"]["bool num_false"] == "0"
    assert c["sec_bool"]["bool_t"] == "ON"
    assert c["sec_bool"]["bool_f"] == '"off"'
    assert c.sec_dicts == {}