def test_get_set_of_pdbid_in_crystalph_tsv_and_pdb_seqres_w_hits(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = DataImportTask(temp_dir, params) task.create_dir() f = open(task.get_crystalph_tsv(), 'w') f.write('PDB_ID _exptl_crystal_grow.pH\n') f.write('4X09\t6.5\n') f.write('4rfr\t8\n') f.write('4XET\t6.2\n') f.write('4XF1\t6.2\n') f.write('4XF3\t6.2\n') f.flush() f.close() makeblast = MakeBlastDBTask(temp_dir, params) makeblast.create_dir() f = open(makeblast.get_pdb_seqres_txt(), 'w') f.write('>4rfr_A mol:protein length:154 MYOGLOBIN\n') f.write('MVLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRVK' 'HLKTEAEMKASEDLKKHG\n') f.write('>102l_A mol:protein length:165 T4 LYSOZYME\n') f.write('MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNAAAKSELDKA' 'IGRNTNGVITKDEAEKLFNQDVDAAVRGILRNAKLKPVYDSLDAVRRAAL' 'INMVFQMGETGVAGFTNSLRMLQQKRWDEAAVNLAKSRWYNQTPNRAKRV' 'ITTFRTGTWDAYKNL\n') f.flush() f.close() pdbset = task.get_set_of_pdbid_in_crystalph_tsv_and_pdb_seqres() self.assertEqual(len(pdbset), 1) self.assertEqual('4RFR' in pdbset, True) finally: shutil.rmtree(temp_dir)
def test_get_set_of_pdbid_from_crystalph_tsv_valid_entries(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = DataImportTask(temp_dir, params) task.create_dir() f = open(task.get_crystalph_tsv(), 'w') f.write('PDB_ID _exptl_crystal_grow.pH\n') f.write('4rfr 7.5\n') f.write('4X09\t6.5\n') f.write('4XET\t6.2\n') f.write('4XF1\t6.2\n') f.write('4XF3\t6.2\n') f.flush() f.close() pdbid_set = task.get_set_of_pdbid_from_crystalph_tsv() self.assertEqual(os.path.isfile(task.get_crystalph_tsv()), True) self.assertEqual(len(pdbid_set), 5) self.assertEqual('4RFR' in pdbid_set, True) self.assertEqual('4X09' in pdbid_set, True) self.assertEqual('4XET' in pdbid_set, True) self.assertEqual('4XF1' in pdbid_set, True) self.assertEqual('4XF3' in pdbid_set, True) finally: shutil.rmtree(temp_dir)
def test_get_set_of_pdbid_from_crystalph_tsv_invalid_entries(self): """Header missing and 4rfr has 3 columns """ temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = DataImportTask(temp_dir, params) task.create_dir() f = open(task.get_crystalph_tsv(), 'w') f.write('4X09\t6.5\n') f.write('4rfr 7.5 8\n') f.write('4XET\t6.2\n') f.write('4XF1\t6.2\n') f.write('4XF3\t6.2\n') f.flush() f.close() pdbid_set = task.get_set_of_pdbid_from_crystalph_tsv() self.assertEqual(os.path.isfile(task.get_crystalph_tsv()), True) self.assertEqual(len(pdbid_set), 3) self.assertEqual('4RFR' in pdbid_set, False) self.assertEqual('4X09' in pdbid_set, False) self.assertEqual('4XET' in pdbid_set, True) self.assertEqual('4XF1' in pdbid_set, True) self.assertEqual('4XF3' in pdbid_set, True) finally: shutil.rmtree(temp_dir)
def test_download_participant_list_file_not_found(self): temp_dir = tempfile.mkdtemp() try: foo = FtpFileTransfer(None) mockftp = D3RParameters() mockftp.get = Mock() foo.set_remote_dir('/foo') foo.set_connection(mockftp) params = D3RParameters() task = DataImportTask(temp_dir, params) task.set_file_transfer(foo) task.create_dir() task._download_participant_list_csv() self.assertEqual( task.get_email_log(), '\nWARNING: participant_list.csv not downloaded ' 'which means external users will NOT get ' 'evaluation email\n') mockftp.get\ .assert_called_with('/foo/' + DataImportTask.PARTICIPANT_LIST_CSV, local=task.get_participant_list_csv()) finally: shutil.rmtree(temp_dir)
def test_run_success_with_ftp_upload(self): temp_dir = tempfile.mkdtemp() try: script = self.create_gen_challenge_script(temp_dir) params = D3RParameters() params.genchallenge = script params.pdbdb = '/foo' params.version = '1' blastnfilter = BlastNFilterTask(temp_dir, params) blastnfilter.create_dir() open(os.path.join(blastnfilter.get_dir(), D3RTask.COMPLETE_FILE), 'a').close() chall = ChallengeDataTask(temp_dir, params) mockftp = D3RParameters() mockftp.put = Mock(side_effect=[3, 5]) ftp = FtpFileTransfer(None) ftp.set_remote_challenge_dir('/challenge') ftp.set_connection(mockftp) chall.set_file_transfer(ftp) dimport = DataImportTask(temp_dir, params) dimport.create_dir() ctsv = dimport.get_crystalph_tsv() f = open(ctsv, 'w') f.write('crystal') f.flush() f.close() nonpoly = dimport.get_nonpolymer_tsv() f = open(nonpoly, 'w') f.write('nonpoly') f.flush() f.close() seq = dimport.get_sequence_tsv() f = open(seq, 'w') f.write('seq') f.flush() f.close() chall.run() self.assertEqual(chall.get_error(), None) # verify test files get created errfile = os.path.join(chall.get_dir(), D3RTask.ERROR_FILE) self.assertEqual(os.path.isfile(errfile), False) compfile = os.path.join(chall.get_dir(), D3RTask.COMPLETE_FILE) self.assertEqual(os.path.isfile(compfile), True) ftp.disconnect() finally: shutil.rmtree(temp_dir)
def test_download_files_with_wait_all_successful(self): temp_dir = tempfile.mkdtemp() try: prev_friday = util.get_previous_friday_from_date( datetime.now(tzlocal())) sat = prev_friday + timedelta(days=1) dse = sat - datetime(1970, 01, 01, tzinfo=tzutc()) secs_since_epoch = self.get_total_seconds(dse) nonpoly = os.path.join(temp_dir, DataImportTask.NONPOLYMER_TSV) f = open(nonpoly, 'w') f.write('nonpoly\n') f.flush() f.close() os.utime(nonpoly, (secs_since_epoch, secs_since_epoch)) seq = os.path.join(temp_dir, DataImportTask.SEQUENCE_TSV) f = open(seq, 'w') f.write('seq\n') f.flush() f.close() os.utime(seq, (secs_since_epoch, secs_since_epoch)) oldseq = os.path.join(temp_dir, DataImportTask.OLDSEQUENCE_TSV) f = open(oldseq, 'w') f.write('oldseq\n') f.flush() f.close() os.utime(oldseq, (secs_since_epoch, secs_since_epoch)) crystal = os.path.join(temp_dir, DataImportTask.CRYSTALPH_TSV) f = open(crystal, 'w') f.write('crystal\n') f.flush() f.close() os.utime(crystal, (secs_since_epoch, secs_since_epoch)) comp = os.path.join(temp_dir, DataImportTask.COMPINCHI_ICH) f = open(comp, 'w') f.write('comp\n') f.flush() f.close() params = D3RParameters() params.skipimportwait = False params.importretry = 2 params.importsleep = 0 params.compinchi = 'file://' + temp_dir task = DataImportTask(temp_dir, params) task.create_dir() val = task._download_files('file://' + temp_dir) self.assertEqual(task.get_error(), None) self.assertTrue(val) finally: shutil.rmtree(temp_dir)
def test_get_set_of_pdbid_from_crystalph_tsv_nonexistant_file(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = DataImportTask(temp_dir, params) task.create_dir() pdbid_set = task.get_set_of_pdbid_in_crystalph_tsv_and_pdb_seqres() self.assertEqual(len(pdbid_set), 0) finally: shutil.rmtree(temp_dir)
def test_copy_over_tsv_files(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() dimport = DataImportTask(temp_dir, params) dimport.create_dir() ctsv = dimport.get_crystalph_tsv() f = open(ctsv, 'w') f.write('crystal') f.flush() f.close() nonpoly = dimport.get_nonpolymer_tsv() f = open(nonpoly, 'w') f.write('nonpoly') f.flush() f.close() seq = dimport.get_sequence_tsv() f = open(seq, 'w') f.write('seq') f.flush() f.close() task = ChallengeDataTask(temp_dir, params) task.create_dir() challenge_dir = task._create_challenge_dir() self.assertEqual(os.path.isdir(challenge_dir), True) task._copy_over_tsv_files(challenge_dir) cop_ctsv = os.path.join(challenge_dir, DataImportTask.CRYSTALPH_TSV) self.assertEqual(os.path.isfile(cop_ctsv), True) f = open(cop_ctsv) self.assertEqual(f.readline(), 'crystal') f.close() cop_nonpoly = os.path.join(challenge_dir, DataImportTask.NONPOLYMER_TSV) self.assertEqual(os.path.isfile(cop_nonpoly), True) f = open(cop_nonpoly) self.assertEqual(f.readline(), 'nonpoly') f.close() cop_seq = os.path.join(challenge_dir, DataImportTask.SEQUENCE_TSV) self.assertEqual(os.path.isfile(cop_seq), True) f = open(cop_seq) self.assertEqual(f.readline(), 'seq') f.close() finally: shutil.rmtree(temp_dir)
def test_get_set_of_pdbid_from_crystalph_tsv_empty_file(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = DataImportTask(temp_dir, params) task.create_dir() open(task.get_crystalph_tsv(), 'a').close() pdbid_set = task.get_set_of_pdbid_in_crystalph_tsv_and_pdb_seqres() self.assertEqual(os.path.isfile(task.get_crystalph_tsv()), True) self.assertEqual(len(pdbid_set), 0) finally: shutil.rmtree(temp_dir)
def test_get_set_of_pdbid_from_crystalph_tsv_internal_exception(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = DataImportTask(temp_dir, params) task.create_dir() open(task.get_crystalph_tsv(), 'a').close() os.chmod(task.get_crystalph_tsv(), 0o000) pdbid_set = task.get_set_of_pdbid_from_crystalph_tsv() self.assertEqual(len(pdbid_set), 0) finally: shutil.rmtree(temp_dir)
def test_can_run_with_complete_file(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = DataImportTask(temp_dir, params) task.create_dir() open(os.path.join(task.get_dir(), D3RTask.COMPLETE_FILE), 'a').close() self.assertEquals(task.can_run(), False) self.assertEquals(task.get_error(), None) self.assertEquals(task._can_run, False) finally: shutil.rmtree(temp_dir)
def test_get_set_of_pdbid_from_crystalph_tsv_no_header_invalid_lines(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = DataImportTask(temp_dir, params) task.create_dir() f = open(task.get_crystalph_tsv(), 'w') f.write('hello\nx\n') f.flush() f.close() pdbid_set = task.get_set_of_pdbid_from_crystalph_tsv() self.assertEqual(os.path.isfile(task.get_crystalph_tsv()), True) self.assertEqual(len(pdbid_set), 0) finally: shutil.rmtree(temp_dir)
def test_download_participant_list_no_filetransfer(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = DataImportTask(temp_dir, params) task.create_dir() task._download_participant_list_csv() self.assertEqual( task.get_email_log(), '\nWARNING: Unable to download ' 'participant_list.csv which means ' 'external users will NOT get evaluation ' 'email : \'NoneType\' object has no attribute ' '\'connect\'\n') finally: shutil.rmtree(temp_dir)
def test_tar_challenge_dir(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() dimport = DataImportTask(temp_dir, params) dimport.create_dir() open(dimport.get_sequence_tsv(), 'a').close() open(dimport.get_nonpolymer_tsv(), 'a').close() open(dimport.get_crystalph_tsv(), 'a').close() task = ChallengeDataTask(temp_dir, params) task.create_dir() chall_dir = task._create_challenge_dir() final_log = os.path.join(chall_dir, 'final.log') open(final_log, 'a').close() task._create_readme(chall_dir) task._copy_over_tsv_files(chall_dir) # make a fake candidate file_list = self.make_fake_candidate_dir(chall_dir, '5hib', '2eb2', 'CSX') self.assertEqual(os.path.isdir(chall_dir), True) name = task.get_celpp_challenge_data_dir_name() tfile = task._tar_challenge_dir(name) self.assertEqual(os.path.isfile(tfile), True) foodir = os.path.join(temp_dir, 'foo') tar = tarfile.open(tfile, 'r:*') tar.extractall(path=foodir) tar.close() cdir = os.path.join(foodir, name) readme = os.path.join(cdir, ChallengeDataTask.README_TXT_FILE) self.assertEqual(os.path.isfile(readme), True) final_log = os.path.join(foodir, 'final.log') self.assertEqual(os.path.isfile(final_log), False) for fname in file_list: chk = os.path.join(cdir, fname) self.assertEqual(os.path.isfile(chk), True, chk) finally: shutil.rmtree(temp_dir)
def test_get_participant_database_with_valid_csvfile(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() dimport = DataImportTask(temp_dir, params) dimport.create_dir() csvfile = dimport.get_participant_list_csv() f = open(csvfile, 'w') f.write('name,d3rusername,guid,email\n') f.write('joe,jj,123,[email protected]\n') f.flush() f.close() etf = EvaluationTaskFactory(temp_dir, params) pdb = etf._get_participant_database() p = pdb.get_participant_by_guid('123') self.assertEqual(p.get_email(), '*****@*****.**') finally: shutil.rmtree(temp_dir)
def test_can_run_does_not_exist_or_error(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = DataImportTask(temp_dir, params) # no make blast db self.assertEquals(task.can_run(), False) self.assertEquals(task.get_error(), 'makeblastdb task has notfound status') self.assertEquals(task._can_run, False) make_blast = MakeBlastDBTask(temp_dir, params) make_blast.create_dir() # make blast db failed err_file = os.path.join(make_blast.get_dir(), D3RTask.ERROR_FILE) open(err_file, 'a').close() self.assertEquals(task.can_run(), False) self.assertEquals(task.get_error(), 'makeblastdb task has error status') self.assertEquals(task._can_run, False) os.remove(err_file) # make blast db success open(os.path.join(make_blast.get_dir(), D3RTask.COMPLETE_FILE), 'a').close() self.assertEquals(task.can_run(), True) self.assertEquals(task.get_error(), None) self.assertEquals(task._can_run, True) task.create_dir() open(os.path.join(task.get_dir(), D3RTask.ERROR_FILE), 'a').close() self.assertEquals(task.can_run(), False) self.assertEquals(task._can_run, False) self.assertEquals( task.get_error(), task.get_dir_name() + ' already exists and ' + 'status is ' + D3RTask.ERROR_STATUS) finally: shutil.rmtree(temp_dir)
def test_get_set_of_pdbid_in_crystalph_tsv_and_pdb_seqres_no_seq(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = DataImportTask(temp_dir, params) task.create_dir() f = open(task.get_crystalph_tsv(), 'w') f.write('PDB_ID _exptl_crystal_grow.pH\n') f.write('4X09\t6.5\n') f.write('4rfr\t8\n') f.write('4XET\t6.2\n') f.write('4XF1\t6.2\n') f.write('4XF3\t6.2\n') f.flush() f.close() pdbset = task.get_set_of_pdbid_in_crystalph_tsv_and_pdb_seqres() self.assertEqual(len(pdbset), 0) finally: shutil.rmtree(temp_dir)
def test_append_standard_to_files(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = DataImportTask(temp_dir, params) task.create_dir() task.append_standard_to_files() self.assertTrue(os.path.isfile(task.get_nonpolymer_tsv())) self.assertTrue(os.path.isfile(task.get_sequence_tsv())) self.assertTrue(os.path.isfile(task.get_crystalph_tsv())) # now do it again, but this time make the append fail # cause the nonpolymer_tsv is a directory os.unlink(task.get_nonpolymer_tsv()) os.makedirs(task.get_nonpolymer_tsv()) task.append_standard_to_files() finally: shutil.rmtree(temp_dir)
def test_get_uploadable_files(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = DataImportTask(temp_dir, params) self.assertEqual(task.get_uploadable_files(), []) task.create_dir() # test empty dir self.assertEqual(task.get_uploadable_files(), []) # test with only compinchi open(task.get_components_inchi_file(), 'a').close() flist = task.get_uploadable_files() self.assertEqual(len(flist), 1) flist.index(task.get_components_inchi_file()) # test with crystal file open(task.get_crystalph_tsv(), 'a').close() flist = task.get_uploadable_files() self.assertEqual(len(flist), 2) flist.index(task.get_components_inchi_file()) flist.index(task.get_crystalph_tsv()) # test with nonpolymer file open(task.get_nonpolymer_tsv(), 'a').close() flist = task.get_uploadable_files() self.assertEqual(len(flist), 3) flist.index(task.get_components_inchi_file()) flist.index(task.get_crystalph_tsv()) flist.index(task.get_nonpolymer_tsv()) # test with sequence file open(task.get_sequence_tsv(), 'a').close() flist = task.get_uploadable_files() self.assertEqual(len(flist), 4) flist.index(task.get_components_inchi_file()) flist.index(task.get_crystalph_tsv()) flist.index(task.get_nonpolymer_tsv()) flist.index(task.get_sequence_tsv()) finally: shutil.rmtree(temp_dir)
def test_download_files_fail(self): temp_dir = tempfile.mkdtemp() try: nonpoly = os.path.join(temp_dir, DataImportTask.NONPOLYMER_TSV) f = open(nonpoly, 'w') f.write('nonpoly\n') f.flush() f.close() seq = os.path.join(temp_dir, DataImportTask.SEQUENCE_TSV) f = open(seq, 'w') f.write('seq\n') f.flush() f.close() oldseq = os.path.join(temp_dir, DataImportTask.OLDSEQUENCE_TSV) f = open(oldseq, 'w') f.write('oldseq\n') f.flush() f.close() crystal = os.path.join(temp_dir, DataImportTask.CRYSTALPH_TSV) f = open(crystal, 'w') f.write('crystal\n') f.flush() f.close() params = D3RParameters() params.skipimportwait = True params.compinchi = 'file://' + temp_dir task = DataImportTask(temp_dir, params) task.create_dir() val = task._download_files('file://' + temp_dir) self.assertEqual( task.get_error(), 'Unable to download file from ' 'file://' + temp_dir + ' to ' + task.get_components_inchi_file()) self.assertFalse(val) finally: shutil.rmtree(temp_dir)
def test_download_participant_list_success(self): temp_dir = tempfile.mkdtemp() try: foo = FtpFileTransfer(None) mockftp = D3RParameters() mockftp.get = Mock() foo.set_remote_dir('/foo') foo.set_connection(mockftp) params = D3RParameters() task = DataImportTask(temp_dir, params) task.set_file_transfer(foo) task.create_dir() open(task.get_participant_list_csv(), 'a').close() task._download_participant_list_csv() self.assertEqual(task.get_email_log(), None) mockftp.get\ .assert_called_with('/foo/' + DataImportTask.PARTICIPANT_LIST_CSV, local=task.get_participant_list_csv()) finally: shutil.rmtree(temp_dir)
def test_get_external_submitter_email_participant_not_found(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() dimport = DataImportTask(temp_dir, params) dimport.create_dir() csvfile = dimport.get_participant_list_csv() f = open(csvfile, 'w') f.write('name,d3rusername,guid,email\n') f.write('joe,jj,123,[email protected]\n') f.flush() f.close() fac = ParticipantDatabaseFromCSVFactory(csvfile) params = D3RParameters() dtask = D3RTask('/foo', params) dtask.set_name('444' + EvaluationTask.EXT_SUBMISSION_SUFFIX) task = EvaluationTask(temp_dir, dtask.get_name(), dtask, params) emailer = EvaluationEmailer(fac.get_participant_database(), None) self.assertEqual(emailer._get_external_submitter_email(task), None) self.assertEqual(emailer.get_message_log(), '\nNo participant found with guid: 444\n') finally: shutil.rmtree(temp_dir)
def test_run_succeeds_no_ftp(self): temp_dir = tempfile.mkdtemp() try: script = self.create_gen_challenge_script(temp_dir) params = D3RParameters() params.genchallenge = script params.pdbdb = '/foo' params.version = '1' blastnfilter = BlastNFilterTask(temp_dir, params) blastnfilter.create_dir() open(os.path.join(blastnfilter.get_dir(), D3RTask.COMPLETE_FILE), 'a').close() chall = ChallengeDataTask(temp_dir, params) dimport = DataImportTask(temp_dir, params) dimport.create_dir() ctsv = dimport.get_crystalph_tsv() f = open(ctsv, 'w') f.write('crystal') f.flush() f.close() nonpoly = dimport.get_nonpolymer_tsv() f = open(nonpoly, 'w') f.write('nonpoly') f.flush() f.close() seq = dimport.get_sequence_tsv() f = open(seq, 'w') f.write('seq') f.flush() f.close() chall.run() self.assertEqual(chall.get_error(), None) # verify test files get created errfile = os.path.join(chall.get_dir(), D3RTask.ERROR_FILE) self.assertEqual(os.path.isfile(errfile), False) compfile = os.path.join(chall.get_dir(), D3RTask.COMPLETE_FILE) self.assertEqual(os.path.isfile(compfile), True) stderr = os.path.join(chall.get_dir(), 'genchallenge.py.stderr') self.assertEqual(os.path.isfile(stderr), True) stdout = os.path.join(chall.get_dir(), 'genchallenge.py.stdout') self.assertEqual(os.path.isfile(stdout), True) # verify challenge directory is created and # filled with valid files chall_dir = os.path.join(chall.get_dir(), chall.get_celpp_challenge_data_dir_name()) self.assertEqual(os.path.isdir(chall_dir), True) readme = os.path.join(chall_dir, ChallengeDataTask.README_TXT_FILE) self.assertEqual(os.path.isfile(readme), True) crystal = os.path.join(chall_dir, DataImportTask.CRYSTALPH_TSV) self.assertEqual(os.path.isfile(crystal), True) seq = os.path.join(chall_dir, DataImportTask.SEQUENCE_TSV) self.assertEqual(os.path.isfile(seq), True) nonpoly = os.path.join(chall_dir, DataImportTask.NONPOLYMER_TSV) self.assertEqual(os.path.isfile(nonpoly), True) fivehibdir = os.path.join(chall_dir, '5hib') fivehibtxt = os.path.join(fivehibdir, '5hib.txt') self.assertEqual(os.path.isfile(fivehibtxt), True) fivehibfas = os.path.join(fivehibdir, '5hib.fasta') self.assertEqual(os.path.isfile(fivehibfas), True) fivehicdir = os.path.join(chall_dir, '5hic') fivehictxt = os.path.join(fivehicdir, '5hic.txt') self.assertEqual(os.path.isfile(fivehictxt), True) fivehicfas = os.path.join(fivehicdir, '5hic.fasta') self.assertEqual(os.path.isfile(fivehicfas), True) # verify tarball is created tfile = chall.get_celpp_challenge_data_tar_file() self.assertEqual(os.path.isfile(tfile), True) foodir = os.path.join(temp_dir, 'foo') os.mkdir(foodir) tar = tarfile.open(tfile, 'r:*') tar.extractall(path=foodir) tar.close() name = chall.get_celpp_challenge_data_dir_name() cdir = os.path.join(foodir, name) readme = os.path.join(cdir, ChallengeDataTask.README_TXT_FILE) self.assertEqual(os.path.isfile(readme), True) final = os.path.join(foodir, name, 'final.log') self.assertEqual(os.path.isfile(final), False) e_con = os.path.join(foodir, name, 'error_container') self.assertEqual(os.path.isdir(e_con), False) finally: shutil.rmtree(temp_dir)
def test_can_run(self): tempDir = tempfile.mkdtemp() try: # try where makeblastdb is not complete params = D3RParameters() blastTask = BlastNFilterTask(tempDir, params) self.assertEqual(blastTask.can_run(), False) # try where makeblastdb failed blastDb = MakeBlastDBTask(tempDir, params) blastDb.create_dir() errorFile = os.path.join(blastDb.get_path(), blastDb.get_dir_name(), D3RTask.ERROR_FILE) open(errorFile, 'a').close() self.assertEqual(blastTask.can_run(), False) self.assertEqual(blastTask.get_error(), 'makeblastdb task has error status') # try where data import is not complete completeFile = os.path.join(blastDb.get_path(), blastDb.get_dir_name(), D3RTask.COMPLETE_FILE) open(completeFile, 'a').close() self.assertEqual(blastTask.can_run(), False) self.assertEqual(blastTask.get_error(), 'dataimport task has ' + 'notfound status') # try where data import failed dataImport = DataImportTask(tempDir, params) dataImport.create_dir() errorFile = os.path.join(dataImport.get_path(), dataImport.get_dir_name(), D3RTask.ERROR_FILE) open(errorFile, 'a').close() self.assertEqual(blastTask.can_run(), False) self.assertEqual(blastTask.get_error(), 'dataimport task has error status') # try where blast can run os.remove(errorFile) completeFile = os.path.join(dataImport.get_dir(), D3RTask.COMPLETE_FILE) open(completeFile, 'a').close() self.assertEqual(blastTask.can_run(), True) self.assertEqual(blastTask.get_error(), None) # try where blast exists blastTask.create_dir() self.assertEqual(blastTask.can_run(), False) self.assertEqual( blastTask.get_error(), blastTask.get_dir_name() + ' already exists and' + ' status is unknown') # try where blast is complete completeFile = os.path.join(blastTask.get_path(), blastTask.get_dir_name(), D3RTask.COMPLETE_FILE) open(completeFile, 'a').close() self.assertEqual(blastTask.can_run(), False) self.assertEqual(blastTask.get_error(), None) finally: shutil.rmtree(tempDir)
def test_run_with_blast_success_usenewsequencetsv(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() params.blastnfilter = '/bin/echo' params.postanalysis = os.path.join(temp_dir, 'foo.py') params.pdbdb = '/pdbdb' blasttask = BlastNFilterTask(temp_dir, params) blasttask._can_run = True txt_file = os.path.join(blasttask.get_dir(), 'summary.txt') txt_contents = ('INPUT SUMMARY\\n' + ' sequences: 177\\n' + ' complexes: 149\\n') # create fake blastnfilter script that makes csv files f = open(params.postanalysis, 'w') f.write('#! /usr/bin/env python\n\n') f.write('f = open(\'' + txt_file + '\', \'w\')\n') f.write('f.write(\'' + txt_contents + '\\n\')\n') f.write('f.flush()\nf.close()\n') f.flush() f.close() os.chmod(params.postanalysis, stat.S_IRWXU) dtask = DataImportTask(temp_dir, params) dtask.create_dir() open(dtask.get_sequence_tsv(), 'a').close() blasttask.run() self.assertEqual(blasttask.get_status(), D3RTask.COMPLETE_STATUS) self.assertEqual(blasttask.get_error(), None) complete_file = os.path.join(blasttask.get_dir(), D3RTask.COMPLETE_FILE) self.assertEqual(os.path.isfile(complete_file), True) std_err_file = os.path.join(blasttask.get_dir(), 'echo.stderr') self.assertEqual(os.path.isfile(std_err_file), True) std_out_file = os.path.join(blasttask.get_dir(), 'echo.stdout') dataimport = DataImportTask(temp_dir, params) makeblast = MakeBlastDBTask(temp_dir, params) f = open(std_out_file, 'r') echo_out = f.read().replace('\n', '') echo_out.index('--nonpolymertsv ' + os.path.join(temp_dir, dataimport.get_dir_name(), DataImportTask.NONPOLYMER_TSV)) echo_out.index(' --sequencetsv ' + os.path.join(temp_dir, dataimport.get_dir_name(), DataImportTask.SEQUENCE_TSV)) echo_out.index(' --pdbblastdb ' + os.path.join(temp_dir, makeblast.get_dir_name())) echo_out.index(' --compinchi ' + os.path.join(temp_dir, dataimport.get_dir_name(), DataImportTask.COMPINCHI_ICH)) echo_out.index(' --outdir ' + os.path.join(temp_dir, blasttask.get_dir_name())) echo_out.index(' --crystalpH ' + os.path.join(temp_dir, dataimport.get_dir_name(), DataImportTask.CRYSTALPH_TSV)) echo_out.index(' --pdbdb /pdbdb ') f.close() self.assertEqual(os.path.isfile(std_out_file), True) self.assertEquals(blasttask.get_status(), D3RTask.COMPLETE_STATUS) self.assertEquals( os.path.exists( os.path.join(blasttask.get_dir(), 'foo.py.stderr')), True) self.assertEquals( os.path.exists( os.path.join(blasttask.get_dir(), 'foo.py.stdout')), True) res = blasttask.get_email_log().rstrip('\n') res.index('/bin/echo') res.index('# txt files found: 0') res.index('Output from summary.txt') res.index(' sequences: 177') res.index(' complexes: 149') self.assertEqual( res.find(dataimport.get_sequence_tsv() + ' file not found falling back to ' + dataimport.get_oldsequence_tsv()), -1) finally: shutil.rmtree(temp_dir)