Esempio n. 1
0
    def test_Config(self):
        cfg = Config(self.defaults, self.parsed_args)
        methods_needing_args = {
            'inter_gene_max_space': None,
            'max_nb_genes': None,
            'min_genes_required': None,
            'min_mandatory_genes_required': None,
            'multi_loci': None
        }

        for opt, val in self.defaults.items():
            if opt == 'out_dir':
                self.assertEqual(
                    cfg.out_dir(),
                    os.path.join(cfg.res_search_dir(),
                                 f'macsyfinder-{strftime("%Y%m%d_%H-%M-%S")}'))
            elif opt == 'multi_loci':
                self.assertFalse(cfg.multi_loci('whatever'))
            elif opt in methods_needing_args:
                self.assertEqual(
                    getattr(cfg, opt)('whatever'),
                    val,
                    msg=
                    f"test of '{opt}' failed : expected{getattr(cfg, opt)('whatever')} !=  got {val}"
                )
            else:
                self.assertEqual(
                    getattr(cfg, opt)(),
                    val,
                    msg=
                    f"test of '{opt}' failed : expected{getattr(cfg, opt)()} !=  got {val}"
                )
Esempio n. 2
0
    def test_Config_file(self):
        methods_needing_args = {
            'inter_gene_max_space': [('set_1/Flagellum', 4),
                                     ('set_1/T2SS', 2)],
            'max_nb_genes': [('set_1/Flagellum', 6), ('set_1/T3SS', 3)],
            'min_genes_required': [('set_1/Flagellum', 8), ('set_1/T4SS', 4)],
            'min_mandatory_genes_required': [('set_1/Flagellum', 12),
                                             ('set_1/T6SS', 6)],
            'multi_loci': {'set_1/Flagellum', 'T4SS'}
        }

        self.parsed_args.cfg_file = self.find_data(
            os.path.join('conf_files', 'macsy_models.conf'))
        cfg = Config(self.defaults, self.parsed_args)

        expected_values = {k: v for k, v in self.defaults.items()}
        expected_values['cfg_file'] = self.parsed_args.cfg_file
        expected_values.update(methods_needing_args)

        for opt, val in expected_values.items():
            if opt == 'out_dir':
                self.assertEqual(
                    cfg.out_dir(),
                    os.path.join(cfg.res_search_dir(),
                                 f'macsyfinder-{strftime("%Y%m%d_%H-%M-%S")}'))
            elif opt == 'multi_loci':
                self.assertTrue(cfg.multi_loci('set_1/Flagellum'))
                self.assertTrue(cfg.multi_loci('set_1/T4SS'))
                self.assertFalse(cfg.multi_loci('set_1/T6SS'))
            elif opt in methods_needing_args:
                for model, genes in expected_values[opt]:
                    self.assertEqual(getattr(cfg, opt)(model), genes)
            else:
                self.assertEqual(getattr(cfg, opt)(), val)
Esempio n. 3
0
 def test_out_dir(self):
     cfg = Config(self.defaults, self.parsed_args)
     self.assertEqual(
         cfg.out_dir(),
         os.path.join(cfg.res_search_dir(),
                      f'macsyfinder-{strftime("%Y%m%d_%H-%M-%S")}'))
     self.parsed_args.out_dir = 'foo'
     cfg = Config(self.defaults, self.parsed_args)
     self.assertEqual(cfg.out_dir(), 'foo')
Esempio n. 4
0
    def test_Config_args(self):
        methods_needing_args = {
            'inter_gene_max_space': [('set_1/Flagellum', '14'),
                                     ('set_1/T2SS', '12')],
            'max_nb_genes': [('set_1/Flagellum', '16'), ('set_1/T3SS', '13')],
            'min_genes_required': [('set_1/Flagellum', '18'),
                                   ('set_1/T4SS', '14')],
            'min_mandatory_genes_required': [('set_1/Flagellum', '22'),
                                             ('set_1/T6SS', '16')],
            'multi_loci':
            'set_1/Flagellum, set_1/T4SS',
        }
        for opt, value in methods_needing_args.items():
            setattr(self.parsed_args, opt, value)

        simple_opt = {
            'hmmer': 'foo',
            'i_evalue_sel': 20,
            'replicon_topology': 'linear',
            'db_type': 'gembase',
            'sequence_db': self.find_data(os.path.join('base',
                                                       'test_1.fasta')),
            'topology_file': __file__  # test only the existence of a file
        }

        for opt, val in simple_opt.items():
            setattr(self.parsed_args, opt, val)

        cfg = Config(self.defaults, self.parsed_args)

        expected_values = {k: v for k, v in self.defaults.items()}
        expected_values.update(methods_needing_args)
        expected_values.update(simple_opt)
        for opt, val in expected_values.items():
            if opt == 'out_dir':
                self.assertEqual(
                    cfg.out_dir(),
                    os.path.join(cfg.res_search_dir(),
                                 f'macsyfinder-{strftime("%Y%m%d_%H-%M-%S")}'))
            elif opt == 'multi_loci':
                self.assertTrue(cfg.multi_loci('set_1/Flagellum'))
                self.assertTrue(cfg.multi_loci('set_1/T4SS'))
                self.assertFalse(cfg.multi_loci('set_1/T6SS'))
            elif opt in methods_needing_args:
                for model, genes in expected_values[opt]:
                    self.assertEqual(getattr(cfg, opt)(model), int(genes))
            elif opt == 'models_dir':
                self.assertEqual(
                    getattr(cfg, opt)(), self.defaults['system_models_dir'])
            else:
                self.assertEqual(
                    getattr(cfg, opt)(),
                    val,
                    msg=
                    f"{opt} failed: expected: val '{val}' != got '{getattr(cfg, opt)()}'"
                )
Esempio n. 5
0
    def test_Config_file_n_args(self):
        cfg_needing_args = {
            'inter_gene_max_space': [('set_1/Flagellum', '4'),
                                     ('set_1/T2SS', '2')],
            'max_nb_genes': [('set_1/Flagellum', '6'), ('set_1/T3SS', '3')],
            'min_genes_required': [('set_1/Flagellum', '8'),
                                   ('set_1/T4SS', '4')],
            'min_mandatory_genes_required': [('set_1/Flagellum', '12'),
                                             ('set_1/T6SS', '6')],
            'multi_loci':
            'set_1/Flagellum, set_1/T4SS',
        }

        self.parsed_args.cfg_file = self.find_data(
            os.path.join('conf_files', 'macsy_models.conf'))
        expected_values = {k: v for k, v in self.defaults.items()}
        expected_values['cfg_file'] = self.parsed_args.cfg_file
        expected_values.update(cfg_needing_args)

        cmd_needing_args = {
            'min_genes_required': [('set_1/Flagellum', 18), ('T4SS', 14)],
            'min_mandatory_genes_required': [('set_1/Flagellum', 22),
                                             ('set_1/T6SS', 16)],
        }
        for opt, value in cmd_needing_args.items():
            setattr(self.parsed_args, opt,
                    ' '.join([f"{m} {v}" for m, v in value]))

        simple_opt = {'hmmer': 'foo', 'i_evalue_sel': 20, 'db_type': 'gembase'}
        for opt, val in simple_opt.items():
            setattr(self.parsed_args, opt, val)

        cfg = Config(self.defaults, self.parsed_args)

        expected_values.update(cmd_needing_args)
        expected_values.update(simple_opt)

        for opt, exp_val in expected_values.items():
            if opt == 'out_dir':
                self.assertEqual(
                    cfg.out_dir(),
                    os.path.join(cfg.res_search_dir(),
                                 f"macsyfinder-{strftime('%Y%m%d_%H-%M-%S')}"))
            elif opt == 'multi_loci':
                self.assertTrue(cfg.multi_loci('set_1/Flagellum'))
                self.assertTrue(cfg.multi_loci('set_1/T4SS'))
                self.assertFalse(cfg.multi_loci('set_1/T6SS'))
            elif opt in cfg_needing_args:
                for model, val in expected_values[opt]:
                    self.assertEqual(getattr(cfg, opt)(model), int(val))
            elif opt == 'models_dir':
                self.assertEqual(
                    getattr(cfg, opt)(), self.defaults['system_models_dir'])
            else:
                self.assertEqual(getattr(cfg, opt)(), exp_val)
Esempio n. 6
0
    def test_Config_conf_file_virtualenv(self):
        methods_needing_args = {
            'inter_gene_max_space': [('set_1/Flagellum', 4),
                                     ('set_1/T2SS', 2)],
            'min_mandatory_genes_required': [('set_1/Flagellum', 9),
                                             ('set_1/T2SS', 5)]
        }
        modified_args = {
            'db_type': 'gembase',
            'coverage_profile': 0.1,
            'replicon_topology': 'circular'
        }

        with tempfile.TemporaryDirectory() as tmpdirname:
            ori_conf_file = self.find_data(
                os.path.join('conf_files', 'macsy_virtualenv_test.conf'))
            conf_dir = os.path.join(tmpdirname, 'etc', 'macsyfinder')
            os.makedirs(conf_dir)
            dest_conf_file = os.path.join(conf_dir, 'macsyfinder.conf')
            shutil.copy(ori_conf_file, dest_conf_file)
            virtual_env = os.environ.get("VIRTUAL_ENV")

            os.environ['VIRTUAL_ENV'] = tmpdirname
            try:
                cfg = Config(self.defaults, self.parsed_args)

                expected_values = {k: v for k, v in self.defaults.items()}
                expected_values.update(methods_needing_args)
                expected_values.update(modified_args)
                for opt, val in expected_values.items():
                    if opt == 'out_dir':
                        self.assertEqual(
                            cfg.out_dir(),
                            os.path.join(
                                cfg.res_search_dir(),
                                f'macsyfinder-{strftime("%Y%m%d_%H-%M-%S")}'))
                    elif opt in ('max_nb_genes', 'min_genes_required',
                                 'multi_loci'):  # not set in cfg file
                        pass
                    elif opt in methods_needing_args:
                        for model, genes in expected_values[opt]:
                            self.assertEqual(getattr(cfg, opt)(model), genes)
                    elif opt == 'models_dir':
                        self.assertEqual(
                            getattr(cfg, opt)(),
                            self.defaults['system_models_dir'])
                    else:
                        self.assertEqual(getattr(cfg, opt)(), val)
            finally:
                if virtual_env:
                    os.environ["VIRTUAL_ENV"] = virtual_env
Esempio n. 7
0
    def test_Config_default_conf_file(self):
        methods_needing_args = {
            'inter_gene_max_space': [('set_1/Flagellum', 4),
                                     ('set_1/T2SS', 2)],
            'max_nb_genes': [('set_1/Flagellum', 6), ('set_1/T3SS', 3)],
            'min_genes_required': [('set_1/Flagellum', 8), ('set_1/T4SS', 4)],
            'min_mandatory_genes_required': [('set_1/Flagellum', 12),
                                             ('set_1/T6SS', 6)],
            'multi_loci': {'set_1/Flagellum', 'set_1/T4SS'}
        }
        with tempfile.TemporaryDirectory() as tmpdirname:
            ori_conf_file = self.find_data(
                os.path.join('conf_files', 'macsy_models.conf'))
            dest_conf_file = os.path.join(tmpdirname, 'macsyfinder.conf')
            shutil.copy(ori_conf_file, dest_conf_file)
            os.environ['MACSY_CONF'] = dest_conf_file
            virtual_env = os.environ.get("VIRTUAL_ENV")
            del os.environ["VIRTUAL_ENV"]
            try:
                cfg = Config(self.defaults, self.parsed_args)

                expected_values = {k: v for k, v in self.defaults.items()}
                expected_values.update(methods_needing_args)
                for opt, val in expected_values.items():
                    if opt == 'out_dir':
                        self.assertEqual(
                            cfg.out_dir(),
                            os.path.join(
                                cfg.res_search_dir(),
                                f'macsyfinder-{strftime("%Y%m%d_%H-%M-%S")}'))
                    elif opt == 'multi_loci':
                        self.assertTrue(cfg.multi_loci('set_1/Flagellum'))
                        self.assertTrue(cfg.multi_loci('set_1/T4SS'))
                        self.assertFalse(cfg.multi_loci('set_1/T6SS'))
                    elif opt in methods_needing_args:
                        for model, genes in expected_values[opt]:
                            self.assertEqual(getattr(cfg, opt)(model), genes)
                    elif opt == 'models_dir':
                        self.assertEqual(
                            getattr(cfg, opt)(),
                            self.defaults['system_models_dir'])
                    else:
                        self.assertEqual(getattr(cfg, opt)(), val)
            finally:
                os.environ["VIRTUAL_ENV"] = virtual_env
Esempio n. 8
0
    def test_project_config_file(self):
        os.chdir(self.tmp_dir)
        methods_needing_args = {
            'inter_gene_max_space': [('set_1/Flagellum', 4),
                                     ('set_1/T2SS', 2)],
            'max_nb_genes': [('set_1/Flagellum', 6), ('set_1/T3SS', 3)],
            'min_genes_required': [('set_1/Flagellum', 8), ('set_1/T4SS', 4)],
            'min_mandatory_genes_required': [('set_1/Flagellum', 12),
                                             ('set_1/T6SS', 6)],
            'multi_loci': {'set_1/Flagellum', 'T4SS'}
        }
        hmmer_opts_in_file = {'coverage_profile': 0.8, 'e_value_search': 0.12}

        try:
            shutil.copyfile(
                self.find_data(os.path.join('conf_files', 'project.conf')),
                os.path.join(self.tmp_dir, 'macsyfinder.conf'))
            cfg = Config(self.defaults, self.parsed_args)

            expected_values = {k: v for k, v in self.defaults.items()}
            expected_values.update(methods_needing_args)
            expected_values.update(hmmer_opts_in_file)

            for opt, val in expected_values.items():
                if opt == 'out_dir':
                    self.assertEqual(
                        cfg.out_dir(),
                        os.path.join(
                            cfg.res_search_dir(),
                            f'macsyfinder-{strftime("%Y%m%d_%H-%M-%S")}'))
                elif opt == 'multi_loci':
                    self.assertTrue(cfg.multi_loci('set_1/Flagellum'))
                    self.assertTrue(cfg.multi_loci('set_1/T4SS'))
                    self.assertFalse(cfg.multi_loci('set_1/T6SS'))
                elif opt in methods_needing_args:
                    for model, genes in expected_values[opt]:
                        self.assertEqual(getattr(cfg, opt)(model), genes)
                elif opt == 'models_dir':
                    self.assertEqual(
                        getattr(cfg, opt)(),
                        self.defaults['system_models_dir'])
                else:
                    self.assertEqual(getattr(cfg, opt)(), val)
        except:
            os.chdir(self._current_dir)