Beispiel #1
0
    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)
Beispiel #2
0
 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)
Beispiel #3
0
 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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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)
Beispiel #7
0
 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)
Beispiel #8
0
    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)
Beispiel #9
0
 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)
Beispiel #10
0
 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)
Beispiel #11
0
    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)
Beispiel #12
0
 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)
Beispiel #13
0
 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)
Beispiel #14
0
    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)
Beispiel #15
0
 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)
Beispiel #16
0
    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)
Beispiel #17
0
 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)
Beispiel #18
0
    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)
Beispiel #19
0
    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)
Beispiel #20
0
    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)
Beispiel #21
0
    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)
Beispiel #22
0
 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)
Beispiel #23
0
    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)
Beispiel #24
0
    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)
Beispiel #25
0
    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)