def test_previous_run(self): kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'previous_run' : 'foo', 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs) try: cfg_base = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertIsNone(cfg_base.previous_run) cfg_base.save( cfg_base.working_dir ) #wait time.sleep(1) new_cfg = Config(previous_run = cfg_base.working_dir) self.assertEqual(new_cfg.previous_run, cfg_base.working_dir) finally: # close loggers filehandles, so they don't block file deletion # in shutil.rmtree calls in Windows logging.shutdown() try: shutil.rmtree(new_cfg.working_dir) except: pass
def test_worker_nb(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.worker_nb, 1) self.tearDown() self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir, worker_nb = 2 ) self.assertEqual(self.cfg.worker_nb, 2) self.tearDown() kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'res_search_dir' : self.tmp_dir, 'worker_nb' : '2.3' } self.assertRaises(ValueError, Config, **kwargs)
def test_def_dir(self): kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'def_dir': '/kjhdsjkg938268235764kjdsg', 'res_search_dir' : self.tmp_dir } real_def_dir = os.path.join(os.path.dirname(__file__), '..', 'data', 'DEF'), self.assertRaises(ValueError, Config, **kwargs) def_dir = os.path.join(tempfile.gettempdir(), 'macsyfinder_DEF') if not os.path.exists(def_dir): os.mkdir(def_dir) self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = def_dir, profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(def_dir, self.cfg.def_dir) shutil.rmtree(def_dir) self.tearDown() def_dir = os.path.join(os.path.dirname(__file__),'..', 'data', 'DEF') self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = def_dir, profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(def_dir, self.cfg.def_dir)
def test_previous_run(self): kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'previous_run' : 'foo', 'res_search_dir' : '/tmp', } self.assertRaises(ValueError, Config, **kwargs) try: cfg_base = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = '/tmp', ) self.assertIsNone(cfg_base.previous_run) cfg_base.save( cfg_base.working_dir ) #wait time.sleep(1) new_cfg = Config(previous_run = cfg_base.working_dir) self.assertEqual(new_cfg.previous_run, cfg_base.working_dir) finally: try: shutil.rmtree(cfg_base.working_dir) except: pass try: shutil.rmtree(new_cfg.working_dir) except: pass
def test_coverage_profile(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir, ) self.assertEqual( self.cfg.coverage_profile, 0.5 ) self.tearDown() self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), coverage_profile = 0.6, res_search_dir = self.tmp_dir, ) self.assertEqual( self.cfg.coverage_profile, 0.6 ) self.tearDown() #coverage_profile must be a float kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'coverage_profile' : "foo", 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs)
def test_replicon_topology(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.replicon_topology, 'circular') self.tearDown() self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), replicon_topology = 'linear', res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.replicon_topology, 'linear') self.tearDown() kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'replicon_topology' : 'foo', 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs)
def test_build_indexes(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertFalse(self.cfg.build_indexes) self.tearDown() kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'build_indexes' : True } config = Config( cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir, build_indexes = True ) self.assertTrue(config.build_indexes)
def test_sequence_db(self): kwargs = {'cfg_file' : "nimportnaoik", 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'worker_nb' : '2.3' , 'res_search_dir' : '/tmp', } self.assertRaises(ValueError, Config, **kwargs) kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : "foo", 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'worker_nb' : '2.3', 'res_search_dir' : '/tmp', } self.assertRaises(ValueError, Config, **kwargs) sequence_db = os.path.join(self._data_dir, "base", "test_base.fa") self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = sequence_db, db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = '/tmp', ) self.assertEqual(self.cfg.sequence_db, sequence_db)
def test_sequence_db(self): kwargs = {'cfg_file' : "nimportnaoik", 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'worker_nb' : '2.3' , 'res_search_dir' : self.tmp_dir, 'log_file' : 'NUL' if platform.system() == 'Windows' else '/dev/null' } self.assertRaises(ValueError, Config, **kwargs) kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : "foo", 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'worker_nb' : '2.3', 'res_search_dir' : self.tmp_dir, 'log_file' : 'NUL' if platform.system() == 'Windows' else '/dev/null' } self.assertRaises(ValueError, Config, **kwargs) sequence_db = os.path.join(self._data_dir, "base", "test_base.fa") self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = sequence_db, db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir, log_file = 'NUL' if platform.system() == 'Windows' else '/dev/null' ) self.assertEqual(self.cfg.sequence_db, sequence_db)
def test_default(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.hmmer_exe, 'hmmsearch')
def test_index_db_exe(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.index_db_exe, 'makeblastdb') self.tearDown() self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), index_db_exe = 'truc', res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.index_db_exe, 'truc')
def test_hmmer_exe(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = '/tmp' ) self.assertEqual(self.cfg.hmmer_exe, 'hmmsearch') self.tearDown() self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), hmmer_exe = 'truc', res_search_dir = '/tmp', ) self.assertEqual(self.cfg.hmmer_exe, 'truc')
def test_profile_suffix(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.profile_suffix, '.hmm') self.tearDown() profile_suffix = 'foo' self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), profile_suffix = profile_suffix, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.profile_suffix, profile_suffix)
def test_res_extract_suffix(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = '/tmp', ) self.assertEqual(self.cfg.res_extract_suffix, '.res_hmm_extract') self.tearDown() res_extract_suffix = 'foo' self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_extract_suffix = res_extract_suffix, res_search_dir = '/tmp', ) self.assertEqual(self.cfg.res_extract_suffix, res_extract_suffix)
def test_res_search_suffix(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(os.path.dirname(__file__),'..', 'data', 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.res_search_suffix, '.search_hmm.out') self.tearDown() res_search_suffix = 'foo' self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_suffix = res_search_suffix, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.res_search_suffix, res_search_suffix)
def test_i_value_sel(self): kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'i_evalue_sel' : 'foo', 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs) self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.i_evalue_sel, 0.001) self.tearDown() self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), i_evalue_sel = 0.7, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.i_evalue_sel, 0.7) self.tearDown() kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'e_value_res' : 0.7, 'i_evalue_sel' : 1, 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs)
def test_min_mandatory_genes_required(self): min_mandatory_genes_required = (["T2SS", 32], ['Flagellum', 64]) self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), min_mandatory_genes_required = min_mandatory_genes_required, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.min_mandatory_genes_required('T2SS'), 32) self.assertEqual(self.cfg.min_mandatory_genes_required('Flagellum'), 64) self.assertIsNone(self.cfg.min_mandatory_genes_required('Foo'))
def test_multi_loci(self): multi_loci = "T2SS,Flagellum" self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), multi_loci = multi_loci, res_search_dir = self.tmp_dir ) self.assertTrue(self.cfg.multi_loci('T2SS')) self.assertTrue(self.cfg.multi_loci('Flagellum')) self.assertFalse(self.cfg.multi_loci('Foo'))
def test_max_nb_genes(self): max_nb_genes = (["T2SS", 32], ['Flagellum', 64]) self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), max_nb_genes = max_nb_genes, res_search_dir = '/tmp', ) self.assertEqual(self.cfg.max_nb_genes('T2SS'), 32) self.assertEqual(self.cfg.max_nb_genes('Flagellum'), 64) self.assertIsNone(self.cfg.max_nb_genes('Foo'))
def test_inter_gene_max_space(self): inter_gene_max_space = (["T2SS", 32], ['Flagellum', 64]) self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), inter_gene_max_space = inter_gene_max_space, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.inter_gene_max_space('T2SS'), 32) self.assertEqual(self.cfg.inter_gene_max_space('Flagellum'), 64) self.assertIsNone(self.cfg.inter_gene_max_space('Foo'))
def test_profile_dir(self): kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : 'foo', 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs) profile_dir = os.path.join(os.path.dirname(__file__), '..', 'data', 'profiles') self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = profile_dir, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.profile_dir, profile_dir)
def test_db_type(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = '/tmp', ) self.assertEqual( self.cfg.db_type, 'gembase') self.tearDown() kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'foo', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'res_search_dir' : '/tmp', } self.assertRaises(ValueError, Config, **kwargs)
def test_res_search_dir(self): kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'res_search_dir' : 'foo', 'log_file' : 'NUL' if platform.system() == 'Windows' else '/dev/null' } self.assertRaises(ValueError, Config, **kwargs) self.tearDown() res_search_dir = os.path.join(os.path.dirname(__file__), 'datatest') self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = res_search_dir, log_file = 'NUL' if platform.system() == 'Windows' else '/dev/null' ) self.assertEqual(self.cfg.res_search_dir, res_search_dir)
def test_models_dir(self): self.parsed_args.models_dir = self.tmp_dir cfg = Config(self.defaults, self.parsed_args) self.assertEqual(cfg.models_dir(), [self.tmp_dir])
def test_working_dir(self): cfg = Config(self.defaults, self.parsed_args) self.assertEqual(cfg.out_dir(), cfg.working_dir())
def test_bad_topology(self): self.parsed_args.replicon_topology = "FOO" with self.assertRaises(ValueError) as ctx: Config(self.defaults, self.parsed_args) self.assertEqual(str(ctx.exception), "replicon_topology as unauthorized value : 'FOO'.")
def test_bad_db_type(self): self.parsed_args.db_type = "FOO" with self.assertRaises(ValueError) as ctx: Config(self.defaults, self.parsed_args) self.assertEqual(str(ctx.exception), "db_type as unauthorized value : 'FOO'.")
def setUp(self): self.args = argparse.Namespace() self.args.db_type = 'gembase' self.args.models_dir = self.find_data('models') self.args.res_search_dir = tempfile.gettempdir() self.args.log_level = 30 self.args.out_dir = os.path.join(self.args.res_search_dir, 'test_macsyfinder_repliconDB') if os.path.exists(self.args.out_dir): shutil.rmtree(self.args.out_dir) os.mkdir(self.args.out_dir) seq_db = self.find_data("base", "test_base.fa") shutil.copy(seq_db, self.args.out_dir) self.args.sequence_db = os.path.join(self.args.out_dir, os.path.basename(seq_db)) self.cfg = Config(MacsyDefaults(), self.args) self.ESCO030p01_genes = [('000010', '886'), ('000020', '291'), ('000030', '656'), ('000040', '500'), ('000050', '407'), ('000060', '144'), ('000070', '183'), ('000080', '121'), ('000090', '199'), ('000100', '325'), ('000110', '425'), ('000120', '171'), ('000130', '277'), ('000140', '133'), ('000150', '108'), ('000160', '295'), ('000170', '273'), ('000180', '367'), ('000190', '573'), ('000200', '343'), ('000210', '295'), ('000220', '108'), ('000230', '117'), ('000240', '153'), ('000250', '479'), ('000260', '706'), ('000270', '998'), ('000280', '171'), ('000290', '108'), ('000300', '295'), ('000310', '165'), ('000320', '243'), ('000330', '295'), ('000340', '108'), ('000350', '1755'), ('000360', '248'), ('000370', '286'), ('000380', '186'), ('000390', '83'), ('000400', '153'), ('000410', '69'), ('000420', '295'), ('000430', '108'), ('000440', '145'), ('000450', '59'), ('000460', '124'), ('000470', '246'), ('000480', '325'), ('000490', '54'), ('000500', '95'), ('000510', '83'), ('000520', '56'), ('000530', '401'), ('000540', '320'), ('000550', '256'), ('000560', '73'), ('000570', '144'), ('000580', '258'), ('000590', '133'), ('000600', '140'), ('000610', '63'), ('000620', '138'), ('000630', '68'), ('000640', '169'), ('000650', '127'), ('000660', '295'), ('000670', '108'), ('000670', '108')] self.PSAE001c01_genes = [('006940', '803'), ('013980', '759'), ('017350', '600'), ('018920', '776'), ('026600', '273'), ('031420', '658'), ('043580', '416'), ('051090', '714'), ('055870', '449'), ('055880', '447'), ('055890', '588'), ('055900', '292'), ('055910', '262'), ('055920', '166'), ('055930', '288'), ('055940', '194'), ('055950', '567'), ('055960', '188'), ('055970', '247'), ('055980', '252'), ('055990', '455'), ('056000', '450'), ('056010', '260'), ('056020', '246'), ('056030', '70'), ('056040', '133'), ('056050', '284'), ('056060', '585'), ('056070', '435'), ('056080', '342'), ('056090', '252'), ('056100', '122'), ('056110', '213'), ('056120', '400'), ('056130', '134'), ('056140', '138'), ('056150', '397'), ('056160', '298'), ('056170', '186'), ('056180', '445'), ('056190', '414'), ('056200', '132'), ('056210', '674'), ('056220', '319'), ('056230', '394'), ('056240', '207'), ('056250', '401'), ('056260', '611'), ('056270', '257'), ('056280', '169'), ('056290', '454'), ('056300', '141'), ('056310', '458'), ('056320', '286'), ('056330', '514'), ('056340', '178'), ('056350', '156'), ('056360', '85'), ('056370', '289'), ('056380', '126'), ('056390', '290'), ('056400', '262'), ('056410', '214'), ('056420', '630'), ('056430', '127'), ('056440', '455'), ('056440', '455')] self.NCDB_genes = [('056134', '289'), ('056135', '126'), ('056136', '290'), ('056137', '262'), ('056138', '214'), ('056139', '630'), ('056140', '127'), ('056141', '803'), ('056141', '803')] idx = Indexes(self.cfg) idx._build_my_indexes()
class Test(MacsyTest): def __init__(self, methodName='runTest'): super(Test, self).__init__(methodName) def fake_init(obj, cfg): obj.cfg = cfg idx = Indexes(cfg) obj.sequence_idx = idx.find_my_indexes() obj.topology_file = cfg.topology_file() obj._DB = {} self.fake_init = fake_init self.real_init = RepliconDB.__init__ def setUp(self): self.args = argparse.Namespace() self.args.db_type = 'gembase' self.args.models_dir = self.find_data('models') self.args.res_search_dir = tempfile.gettempdir() self.args.log_level = 30 self.args.out_dir = os.path.join(self.args.res_search_dir, 'test_macsyfinder_repliconDB') if os.path.exists(self.args.out_dir): shutil.rmtree(self.args.out_dir) os.mkdir(self.args.out_dir) seq_db = self.find_data("base", "test_base.fa") shutil.copy(seq_db, self.args.out_dir) self.args.sequence_db = os.path.join(self.args.out_dir, os.path.basename(seq_db)) self.cfg = Config(MacsyDefaults(), self.args) self.ESCO030p01_genes = [('000010', '886'), ('000020', '291'), ('000030', '656'), ('000040', '500'), ('000050', '407'), ('000060', '144'), ('000070', '183'), ('000080', '121'), ('000090', '199'), ('000100', '325'), ('000110', '425'), ('000120', '171'), ('000130', '277'), ('000140', '133'), ('000150', '108'), ('000160', '295'), ('000170', '273'), ('000180', '367'), ('000190', '573'), ('000200', '343'), ('000210', '295'), ('000220', '108'), ('000230', '117'), ('000240', '153'), ('000250', '479'), ('000260', '706'), ('000270', '998'), ('000280', '171'), ('000290', '108'), ('000300', '295'), ('000310', '165'), ('000320', '243'), ('000330', '295'), ('000340', '108'), ('000350', '1755'), ('000360', '248'), ('000370', '286'), ('000380', '186'), ('000390', '83'), ('000400', '153'), ('000410', '69'), ('000420', '295'), ('000430', '108'), ('000440', '145'), ('000450', '59'), ('000460', '124'), ('000470', '246'), ('000480', '325'), ('000490', '54'), ('000500', '95'), ('000510', '83'), ('000520', '56'), ('000530', '401'), ('000540', '320'), ('000550', '256'), ('000560', '73'), ('000570', '144'), ('000580', '258'), ('000590', '133'), ('000600', '140'), ('000610', '63'), ('000620', '138'), ('000630', '68'), ('000640', '169'), ('000650', '127'), ('000660', '295'), ('000670', '108'), ('000670', '108')] self.PSAE001c01_genes = [('006940', '803'), ('013980', '759'), ('017350', '600'), ('018920', '776'), ('026600', '273'), ('031420', '658'), ('043580', '416'), ('051090', '714'), ('055870', '449'), ('055880', '447'), ('055890', '588'), ('055900', '292'), ('055910', '262'), ('055920', '166'), ('055930', '288'), ('055940', '194'), ('055950', '567'), ('055960', '188'), ('055970', '247'), ('055980', '252'), ('055990', '455'), ('056000', '450'), ('056010', '260'), ('056020', '246'), ('056030', '70'), ('056040', '133'), ('056050', '284'), ('056060', '585'), ('056070', '435'), ('056080', '342'), ('056090', '252'), ('056100', '122'), ('056110', '213'), ('056120', '400'), ('056130', '134'), ('056140', '138'), ('056150', '397'), ('056160', '298'), ('056170', '186'), ('056180', '445'), ('056190', '414'), ('056200', '132'), ('056210', '674'), ('056220', '319'), ('056230', '394'), ('056240', '207'), ('056250', '401'), ('056260', '611'), ('056270', '257'), ('056280', '169'), ('056290', '454'), ('056300', '141'), ('056310', '458'), ('056320', '286'), ('056330', '514'), ('056340', '178'), ('056350', '156'), ('056360', '85'), ('056370', '289'), ('056380', '126'), ('056390', '290'), ('056400', '262'), ('056410', '214'), ('056420', '630'), ('056430', '127'), ('056440', '455'), ('056440', '455')] self.NCDB_genes = [('056134', '289'), ('056135', '126'), ('056136', '290'), ('056137', '262'), ('056138', '214'), ('056139', '630'), ('056140', '127'), ('056141', '803'), ('056141', '803')] idx = Indexes(self.cfg) idx._build_my_indexes() def tearDown(self): try: shutil.rmtree(self.cfg.working_dir()) except: pass RepliconDB.__init__ = self.real_init def test_fill_topology(self): self.args.topology_file = self.args.sequence_db + ".topo" db_send = {'ESCO030p01': 'circular', 'PSAE001c01': 'linear'} with open(self.args.topology_file, 'w') as f: for k, v in list(db_send.items()): f.write('{0} : {1}\n'.format(k, v)) cfg = Config(MacsyDefaults(), self.args) RepliconDB.__init__ = self.fake_init db = RepliconDB(cfg) rcv_topo = db._fill_topology() self.assertDictEqual(db_send, rcv_topo) def test_fill_ordered_replicon_min_max(self): seq_ori = self.find_data("base", "ordered_replicon_base.fasta") shutil.copy(seq_ori, self.args.out_dir) self.args.sequence_db = os.path.join(self.args.out_dir, os.path.basename(seq_ori)) cfg = Config(MacsyDefaults(), self.args) idx = Indexes(cfg) idx._build_my_indexes() RepliconDB.__init__ = self.fake_init db = RepliconDB(cfg) db._fill_ordered_min_max(cfg.replicon_topology()) self.assertEqual(len(db._DB), 1) rep = db[RepliconDB.ordered_replicon_name] self.assertEqual(rep.topology, cfg.replicon_topology()) self.assertEqual(rep.min, 1) self.assertEqual(rep.max, 52) def test_fill_gembase_min_max_default_topology(self): RepliconDB.__init__ = self.fake_init db = RepliconDB(self.cfg) db._fill_gembase_min_max({}, self.cfg.replicon_topology()) self.assertEqual(len(db._DB), 3) self.assertEqual(set(db._DB.keys()), set(['ESCO030p01', 'PSAE001c01', 'NC_xxxxx_xx'])) PRRU001c01 = db['ESCO030p01'] self.assertEqual(PRRU001c01.topology, 'circular') self.assertEqual(PRRU001c01.min, 1) self.assertEqual(PRRU001c01.max, 67) self.assertEqual(PRRU001c01.genes, self.ESCO030p01_genes) PSAE001c01 = db['PSAE001c01'] self.assertEqual(PSAE001c01.topology, 'circular') self.assertEqual(PSAE001c01.min, 68) self.assertEqual(PSAE001c01.max, 133) self.assertEqual(PSAE001c01.genes, self.PSAE001c01_genes) DBNC = db['NC_xxxxx_xx'] self.assertEqual(DBNC.topology, 'circular') self.assertEqual(DBNC.min, 134) self.assertEqual(DBNC.max, 141) self.assertEqual(DBNC.genes, self.NCDB_genes) def test_fill_gembase_min_max_with_topology(self): self.args.topology_file = self.args.sequence_db + ".topo" with open(self.args.topology_file, 'w') as f: f.write( '# topology file\nESCO030p01 : circular\nPSAE001c01 : linear\n' ) cfg = Config(MacsyDefaults(), self.args) RepliconDB.__init__ = self.fake_init db = RepliconDB(cfg) topo_dict = db._fill_topology() db._fill_gembase_min_max(topo_dict, 'circular') self.assertEqual(len(db._DB), 3) self.assertEqual(set(db._DB.keys()), set(['ESCO030p01', 'PSAE001c01', 'NC_xxxxx_xx'])) ESCO030p01 = db['ESCO030p01'] self.assertEqual(ESCO030p01.topology, 'circular') self.assertEqual(ESCO030p01.min, 1) self.assertEqual(ESCO030p01.max, 67) self.assertEqual(ESCO030p01.genes, self.ESCO030p01_genes) PSAE001c01 = db['PSAE001c01'] self.assertEqual(PSAE001c01.topology, 'linear') self.assertEqual(PSAE001c01.min, 68) self.assertEqual(PSAE001c01.max, 133) self.assertEqual(PSAE001c01.genes, self.PSAE001c01_genes) DBNC = db['NC_xxxxx_xx'] self.assertEqual(DBNC.topology, 'circular') self.assertEqual(DBNC.min, 134) self.assertEqual(DBNC.max, 141) self.assertEqual(DBNC.genes, self.NCDB_genes) def test_in(self): db = RepliconDB(self.cfg) self.assertIn('ESCO030p01', db) self.assertIn('PSAE001c01', db) self.assertIn('NC_xxxxx_xx', db) self.assertNotIn('toto', db) def test_getitem(self): db = RepliconDB(self.cfg) ESCO030p01 = RepliconInfo(self.cfg.replicon_topology(), 1, 67, self.ESCO030p01_genes) PSAE001c01 = RepliconInfo(self.cfg.replicon_topology(), 68, 133, self.PSAE001c01_genes) NCXX = RepliconInfo("circular", 134, 141, self.NCDB_genes) self.assertEqual(ESCO030p01, db['ESCO030p01']) self.assertEqual(PSAE001c01, db['PSAE001c01']) self.assertEqual(NCXX, db['NC_xxxxx_xx']) self.assertRaises(KeyError, db.__getitem__, 'foo') def test_get(self): db = RepliconDB(self.cfg) ESCO030p01 = RepliconInfo(self.cfg.replicon_topology(), 1, 67, self.ESCO030p01_genes) PSAE001c01 = RepliconInfo(self.cfg.replicon_topology(), 68, 133, self.PSAE001c01_genes) NCXX = RepliconInfo("circular", 134, 141, self.NCDB_genes) self.assertEqual(ESCO030p01, db.get('ESCO030p01')) self.assertEqual(PSAE001c01, db.get('PSAE001c01')) self.assertEqual(NCXX, db.get('NC_xxxxx_xx', 'foo')) self.assertIsNone(db.get('foo')) self.assertEqual('bar', db.get('foo', 'bar')) def test_items(self): db = RepliconDB(self.cfg) ESCO030p01 = RepliconInfo(self.cfg.replicon_topology(), 1, 67, self.ESCO030p01_genes) PSAE001c01 = RepliconInfo(self.cfg.replicon_topology(), 68, 133, self.PSAE001c01_genes) NCXX = RepliconInfo("circular", 134, 141, self.NCDB_genes) self.assertCountEqual(list(db.items()), [('ESCO030p01', ESCO030p01), ('NC_xxxxx_xx', NCXX), ('PSAE001c01', PSAE001c01)]) def test_iteritems(self): db = RepliconDB(self.cfg) ESCO030p01 = RepliconInfo(self.cfg.replicon_topology(), 1, 67, self.ESCO030p01_genes) PSAE001c01 = RepliconInfo(self.cfg.replicon_topology(), 68, 133, self.PSAE001c01_genes) NCXX = RepliconInfo("circular", 134, 141, self.NCDB_genes) self.assertCountEqual(iter(db.items()), [('ESCO030p01', ESCO030p01), ('NC_xxxxx_xx', NCXX), ('PSAE001c01', PSAE001c01)]) def test_replicon_infos(self): db = RepliconDB(self.cfg) ESCO030p01 = RepliconInfo(self.cfg.replicon_topology(), 1, 67, self.ESCO030p01_genes) PSAE001c01 = RepliconInfo(self.cfg.replicon_topology(), 68, 133, self.PSAE001c01_genes) NCXX = RepliconInfo("circular", 134, 141, self.NCDB_genes) values = db.replicon_infos() self.assertCountEqual(values, [ESCO030p01, NCXX, PSAE001c01])
class TestSearchGenes(MacsyTest): def setUp(self): self.tmp_dir = os.path.join(tempfile.gettempdir(), 'test_macsyfinder_search_genes') if os.path.exists(self.tmp_dir): shutil.rmtree(self.tmp_dir) os.mkdir(self.tmp_dir) args = argparse.Namespace() args.sequence_db = self.find_data("base", "test_base.fa") args.db_type = 'gembase' args.models_dir = self.find_data('models') args.log_level = 30 args.out_dir = os.path.join(self.tmp_dir, 'job_1') args.res_search_dir = args.out_dir os.mkdir(args.out_dir) self.cfg = Config(MacsyDefaults(), args) self.model_name = 'foo' self.model_location = ModelLocation( path=os.path.join(args.models_dir, self.model_name)) idx = Indexes(self.cfg) idx._build_my_indexes() self.profile_factory = ProfileFactory(self.cfg) def tearDown(self): try: shutil.rmtree(self.cfg.working_dir()) #pass except: pass @unittest.skipIf(not which('hmmsearch'), 'hmmsearch not found in PATH') def test_search(self): gene_name = "abc" c_gene_abc = CoreGene(self.model_location, gene_name, self.profile_factory) report = search_genes([c_gene_abc], self.cfg) expected_hit = [ Hit(c_gene_abc, "ESCO030p01_000260", 706, "ESCO030p01", 26, float(1.000e-200), float(660.800), float(1.000), float(0.714), 160, 663) ] self.assertEqual(len(report), 1) self.assertEqual(expected_hit[0], report[0].hits[0]) @unittest.skipIf(not which('hmmsearch'), 'hmmsearch not found in PATH') def test_search_recover(self): # first job searching using hmmsearch gene_name = "abc" c_gene_abc = CoreGene(self.model_location, gene_name, self.profile_factory) report = search_genes([c_gene_abc], self.cfg) expected_hit = [ Hit(c_gene_abc, "ESCO030p01_000260", 706, "ESCO030p01", 26, float(1.000e-200), float(660.800), float(1.000), float(0.714), 160, 663) ] # second job using recover # disable hmmer to be sure that test use the recover inner function self.cfg.hmmer = lambda: "hmmer_disable" # and create a new dir for the second job previous_job_path = self.cfg.working_dir() self.cfg.previous_run = lambda: previous_job_path self.cfg.out_dir = lambda: os.path.join(self.tmp_dir, 'job_2') os.mkdir(self.cfg.out_dir()) # rerun with previous run # but we have to reset the profile attached to the gene gene._profile._report self.profile_factory = ProfileFactory(self.cfg) c_gene_abc = CoreGene(self.model_location, gene_name, self.profile_factory) report = search_genes([c_gene_abc], self.cfg) self.assertEqual(len(report), 1) self.assertEqual(expected_hit[0], report[0].hits[0])
class Test(unittest.TestCase): _data_dir = os.path.join(os.path.dirname(__file__), "datatest") def setUp(self): l = logging.getLogger() l.manager.loggerDict.clear() if hasattr(self, 'tmp_dir'): try: shutil.rmtree(self.cfg.working_dir) except Exception as err: pass self.tmp_dir = tempfile.gettempdir() def tearDown(self): logging.shutdown() l = logging.getLogger() l.manager.loggerDict.clear() if hasattr(self, 'cfg'): try: shutil.rmtree(self.cfg.working_dir) except Exception as err: pass def test_build_indexes(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertFalse(self.cfg.build_indexes) self.tearDown() kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'build_indexes' : True } config = Config( cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir, build_indexes = True ) self.assertTrue(config.build_indexes) def test_default(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.hmmer_exe, 'hmmsearch') def test_coverage_profile(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir, ) self.assertEqual( self.cfg.coverage_profile, 0.5 ) self.tearDown() self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), coverage_profile = 0.6, res_search_dir = self.tmp_dir, ) self.assertEqual( self.cfg.coverage_profile, 0.6 ) self.tearDown() #coverage_profile must be a float kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'coverage_profile' : "foo", 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs) def test_def_dir(self): kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'def_dir': '/kjhdsjkg938268235764kjdsg', 'res_search_dir' : self.tmp_dir } real_def_dir = os.path.join(os.path.dirname(__file__), '..', 'data', 'DEF'), self.assertRaises(ValueError, Config, **kwargs) def_dir = os.path.join(tempfile.gettempdir(), 'macsyfinder_DEF') if not os.path.exists(def_dir): os.mkdir(def_dir) self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = def_dir, profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(def_dir, self.cfg.def_dir) shutil.rmtree(def_dir) self.tearDown() def_dir = os.path.join(os.path.dirname(__file__),'..', 'data', 'DEF') self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = def_dir, profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(def_dir, self.cfg.def_dir) def test_e_value_res(self): kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'e_value_res' : 'foo', 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs) self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.e_value_res, 1) self.tearDown() self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), e_value_res = 0.7, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.e_value_res, 0.7) self.tearDown() kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'e_value_res' : 0.7, 'i_evalue_sel' : 1, 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs) def test_hmmer_exe(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.hmmer_exe, 'hmmsearch') self.tearDown() self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), hmmer_exe = 'truc', res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.hmmer_exe, 'truc') def test_index_db_exe(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.index_db_exe, 'makeblastdb') self.tearDown() self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), index_db_exe = 'truc', res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.index_db_exe, 'truc') def test_i_value_sel(self): kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'i_evalue_sel' : 'foo', 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs) self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.i_evalue_sel, 0.001) self.tearDown() self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), i_evalue_sel = 0.7, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.i_evalue_sel, 0.7) self.tearDown() kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'e_value_res' : 0.7, 'i_evalue_sel' : 1, 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs) def test_db_type(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual( self.cfg.db_type, 'gembase') self.tearDown() kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'foo', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs) def test_previous_run(self): kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'previous_run' : 'foo', 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs) try: cfg_base = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertIsNone(cfg_base.previous_run) cfg_base.save( cfg_base.working_dir ) #wait time.sleep(1) new_cfg = Config(previous_run = cfg_base.working_dir) self.assertEqual(new_cfg.previous_run, cfg_base.working_dir) finally: # close loggers filehandles, so they don't block file deletion # in shutil.rmtree calls in Windows logging.shutdown() try: shutil.rmtree(new_cfg.working_dir) except: pass def test_profile_dir(self): kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : 'foo', 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs) profile_dir = os.path.join(os.path.dirname(__file__), '..', 'data', 'profiles') self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = profile_dir, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.profile_dir, profile_dir) def test_profile_suffix(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.profile_suffix, '.hmm') self.tearDown() profile_suffix = 'foo' self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), profile_suffix = profile_suffix, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.profile_suffix, profile_suffix) def test_replicon_topology(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.replicon_topology, 'circular') self.tearDown() self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), replicon_topology = 'linear', res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.replicon_topology, 'linear') self.tearDown() kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'replicon_topology' : 'foo', 'res_search_dir' : self.tmp_dir } self.assertRaises(ValueError, Config, **kwargs) def test_inter_gene_max_space(self): inter_gene_max_space = (["T2SS", 32], ['Flagellum', 64]) self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), inter_gene_max_space = inter_gene_max_space, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.inter_gene_max_space('T2SS'), 32) self.assertEqual(self.cfg.inter_gene_max_space('Flagellum'), 64) self.assertIsNone(self.cfg.inter_gene_max_space('Foo')) def test_min_genes_required(self): min_genes_required = (["T2SS", 32], ['Flagellum', 64]) self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), min_genes_required = min_genes_required, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.min_genes_required('T2SS'), 32) self.assertEqual(self.cfg.min_genes_required('Flagellum'), 64) self.assertIsNone(self.cfg.min_genes_required('Foo')) def test_max_nb_genes(self): max_nb_genes = (["T2SS", 32], ['Flagellum', 64]) self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), max_nb_genes = max_nb_genes, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.max_nb_genes('T2SS'), 32) self.assertEqual(self.cfg.max_nb_genes('Flagellum'), 64) self.assertIsNone(self.cfg.max_nb_genes('Foo')) def test_min_mandatory_genes_required(self): min_mandatory_genes_required = (["T2SS", 32], ['Flagellum', 64]) self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), min_mandatory_genes_required = min_mandatory_genes_required, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.min_mandatory_genes_required('T2SS'), 32) self.assertEqual(self.cfg.min_mandatory_genes_required('Flagellum'), 64) self.assertIsNone(self.cfg.min_mandatory_genes_required('Foo')) def test_multi_loci(self): multi_loci = "T2SS,Flagellum" self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), multi_loci = multi_loci, res_search_dir = self.tmp_dir ) self.assertTrue(self.cfg.multi_loci('T2SS')) self.assertTrue(self.cfg.multi_loci('Flagellum')) self.assertFalse(self.cfg.multi_loci('Foo')) def test_res_extract_suffix(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.res_extract_suffix, '.res_hmm_extract') self.tearDown() res_extract_suffix = 'foo' self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_extract_suffix = res_extract_suffix, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.res_extract_suffix, res_extract_suffix) def test_res_search_dir(self): kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'res_search_dir' : 'foo', 'log_file' : 'NUL' if platform.system() == 'Windows' else '/dev/null' } self.assertRaises(ValueError, Config, **kwargs) self.tearDown() res_search_dir = os.path.join(os.path.dirname(__file__), 'datatest') self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = res_search_dir, log_file = 'NUL' if platform.system() == 'Windows' else '/dev/null' ) self.assertEqual(self.cfg.res_search_dir, res_search_dir) def test_res_search_suffix(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(os.path.dirname(__file__),'..', 'data', 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.res_search_suffix, '.search_hmm.out') self.tearDown() res_search_suffix = 'foo' self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_suffix = res_search_suffix, res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.res_search_suffix, res_search_suffix) def test_sequence_db(self): kwargs = {'cfg_file' : "nimportnaoik", 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'worker_nb' : '2.3' , 'res_search_dir' : self.tmp_dir, 'log_file' : 'NUL' if platform.system() == 'Windows' else '/dev/null' } self.assertRaises(ValueError, Config, **kwargs) kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : "foo", 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'worker_nb' : '2.3', 'res_search_dir' : self.tmp_dir, 'log_file' : 'NUL' if platform.system() == 'Windows' else '/dev/null' } self.assertRaises(ValueError, Config, **kwargs) sequence_db = os.path.join(self._data_dir, "base", "test_base.fa") self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = sequence_db, db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir, log_file = 'NUL' if platform.system() == 'Windows' else '/dev/null' ) self.assertEqual(self.cfg.sequence_db, sequence_db) def test_worker_nb(self): self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir ) self.assertEqual(self.cfg.worker_nb, 1) self.tearDown() self.cfg = Config(cfg_file = "nimportnaoik", sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"), db_type = 'gembase', def_dir = os.path.join(self._data_dir, 'DEF'), profile_dir = os.path.join(self._data_dir, 'profiles'), res_search_dir = self.tmp_dir, worker_nb = 2 ) self.assertEqual(self.cfg.worker_nb, 2) self.tearDown() kwargs = {'cfg_file' : "nimportnaoik", 'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"), 'db_type' : 'gembase', 'def_dir' : os.path.join(self._data_dir, 'DEF'), 'profile_dir' : os.path.join(self._data_dir, 'profiles'), 'res_search_dir' : self.tmp_dir, 'worker_nb' : '2.3' } self.assertRaises(ValueError, Config, **kwargs)