Example #1
0
 def test_repr(self):
     jq = JobQuery('y', script='z', prestaged=[123],
                   status_callback_url='foo', restricted=True)
     s = "JobQuery('y', script='z', prestaged=[123], "
     s += "status_callback_url='foo',"
     s += "restricted=True, ncpus=1)"
     self.assertEqual(jq.__repr__(), s)
Example #2
0
    def test_with_structure_database_exclude_halo(self):
        params = {'ms_intensity_cutoff': 200000,
                  'msms_intensity_cutoff': 10,
                  'max_broken_bonds': 4,
                  'max_water_losses': 1,
                  'structure_database': 'pubchem',
                  'min_refscore': 1,
                  'max_mz': 1200,
                  'excl_halo': True,
                  }

        query = self.jobquery.annotate(params, False)

        script = "{magma} annotate -c '200000.0' -d '10.0'"
        script += " -b '4'"
        script += " --max_water_losses '1' --ncpus '1' --call_back_url '/'"
        script += " --structure_database 'pubchem'"
        script += " --db_options ',1200,False,False,1'"
        script += " --fast {db}\n"
        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=[],
                                  script=script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
Example #3
0
    def test_resticted(self):
        self.jobquery.restricted = True
        params = {'ms_data_format': 'mzxml',
                  'ms_data': 'foo',
                  'max_ms_level': 3,
                  'abs_peak_cutoff': 1000,
                  'scan': 5,
                  'precursor_mz_precision': 0.005,
                  'mz_precision': 5.0,
                  'mz_precision_abs': 0.001,
                  'ionisation_mode': 1,
                  }

        query = self.jobquery.add_ms_data(params)

        script = "{magma} read_ms_data --ms_data_format 'mzxml'"
        script += " -i '1' -m '3' -a '1000.0'"
        script += " -p '5.0' -q '0.001' --precursor_mz_precision '0.005'"
        script += " --scan '5'"
        script += " --time_limit 1 --call_back_url '/' ms_data.dat {db}\n"
        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=['ms_data.dat'],
                                  script=script,
                                  status_callback_url='/',
                                  restricted=True,
                                  )
        self.assertEqual(query, expected_query)
        self.assertMultiLineEqual('foo', self.fetch_file('ms_data.dat'))
Example #4
0
    def test_ms_data_as_file(self):
        import tempfile
        from cgi import FieldStorage
        msfile = tempfile.TemporaryFile()
        msfile.write('foo')
        msfile.flush()
        msfield = FieldStorage()
        msfield.file = msfile
        params = {'ms_data_format': 'mzxml',
                  'ms_data_file': msfield,
                  'max_ms_level': 3,
                  'abs_peak_cutoff': 1000,
                  'precursor_mz_precision': 0.005,
                  'mz_precision': 5.0,
                  'mz_precision_abs': 0.001,
                  'ionisation_mode': 1,
                  }

        query = self.jobquery.add_ms_data(params)

        script = "{magma} read_ms_data --ms_data_format 'mzxml'"
        script += " -i '1' -m '3' -a '1000.0'"
        script += " -p '5.0' -q '0.001' --precursor_mz_precision '0.005'"
        script += " --call_back_url '/' ms_data.dat {db}\n"
        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=['ms_data.dat'],
                                  script=script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
        self.assertMultiLineEqual('foo', self.fetch_file('ms_data.dat'))
Example #5
0
    def test_submitQuery_with_tarball(self):
        self.factory.tarball = 'Magma-1.1.tar.gz'
        self.factory.submitJob2Launcher = Mock()
        job = self.factory.fromScratch(u'bob')
        jobquery = JobQuery(job.dir, "", [])
        status_cb_url = 'http://example.com/status/{}.json'.format(job.id)
        jobquery.status_callback_url = status_cb_url

        self.factory.submitQuery(jobquery, job)

        jobmanager_query = {'jobdir': jobquery.dir + '/',
                            'executable': "/bin/sh",
                            'prestaged': [self.factory.script_fn,
                                          'results.db',
                                          # tarball is staged as well
                                          'Magma-1.1.tar.gz'
                                          ],
                            "poststaged": ['results.db'],
                            "stderr": "stderr.txt",
                            "stdout": "stdout.txt",
                            'arguments': [self.factory.script_fn],
                            'status_callback_url': status_cb_url
                            }
        self.factory.submitJob2Launcher.assert_called_with(jobmanager_query)
        self.assertEqual(job.state, u'PENDING')
Example #6
0
    def test_with_metabolize_and_annotate(self):

        params = MultiDict(structure_format='smiles',
                           structures='CCO Ethanol',
                           metabolize='on',
                           scenario=[{'type': 'phase1', 'steps': '2'},
                                     {'type': 'phase2', 'steps': '1'}],
                           ms_intensity_cutoff=200000,
                           msms_intensity_cutoff=10,
                           max_broken_bonds=4,
                           max_water_losses=1,
                           )
        query = self.jobquery.add_structures(params, True)

        sf = 'structures.dat'
        script = "{magma} add_structures -g -t 'smiles'"
        script += " structures.dat {db} |"
        script += "{magma} metabolize -g --scenario scenario.csv"
        script += " --call_back_url '/' -j - {db} |"
        script += "{magma} annotate -c '200000.0'"
        script += " -d '10.0' -b '4'"
        script += " --max_water_losses '1' --ncpus '1' --call_back_url '/'"
        script += " -j - --fast {db}\n"
        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=[sf, 'scenario.csv'],
                                  script=script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
        self.assertMultiLineEqual(
            'CCO Ethanol', self.fetch_file('structures.dat'))
        self.assertMultiLineEqual(
            'phase1,2\nphase2,1\n', self.fetch_file('scenario.csv'))
Example #7
0
    def test_with_annotate(self):

        params = MultiDict(molid=123,
                           scenario=[{'type': 'phase1', 'steps': '2'},
                                     {'type': 'phase2', 'steps': '1'}],
                           ms_intensity_cutoff=200000,
                           msms_intensity_cutoff=10,
                           max_broken_bonds=4,
                           max_water_losses=1,
                           )

        query = self.jobquery.metabolize_one(params, True)

        script = "echo '123' | {magma} metabolize -g -j - --scenario scenario.csv"
        script += " --call_back_url '/' {db} |"
        script += "{magma} annotate"
        script += " -c '200000.0' -d '10.0'"
        script += " -b '4'"
        script += " --max_water_losses '1' --ncpus '1' --call_back_url '/' -j -"
        script += " --fast {db}\n"
        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=['scenario.csv'],
                                  script=script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
        self.assertMultiLineEqual(
            'phase1,2\nphase2,1\n', self.fetch_file('scenario.csv'))
Example #8
0
    def test_with_metabolize(self):

        params = MultiDict(structure_format='smiles',
                           structures='CCO Ethanol',
                           metabolize='on',
                           scenario=[
                               {'type': 'phase1', 'steps': '2'},
                               {'type': 'phase2', 'steps': '1'}
                           ],
                           )

        query = self.jobquery.add_structures(params)

        sf = 'structures.dat'
        scen = 'scenario.csv'
        script = "{magma} add_structures -g -t 'smiles' structures.dat {db} |"
        script += "{magma} metabolize -g --scenario scenario.csv"
        script += " --call_back_url '/' -j - {db}\n"
        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=[sf, scen],
                                  script=script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
        self.assertMultiLineEqual(
            'CCO Ethanol', self.fetch_file('structures.dat'))
        self.assertMultiLineEqual(
            'phase1,2\nphase2,1\n', self.fetch_file('scenario.csv'))
Example #9
0
    def test_without_metabolize(self):
        self.maxDiff = 100000
        import tempfile
        from cgi import FieldStorage
        ms_data_file = tempfile.NamedTemporaryFile()
        ms_data_file.write('foo')
        ms_data_file.flush()
        msfield = FieldStorage()
        msfield.file = ms_data_file

        params = MultiDict(ionisation_mode=1,
                           ms_intensity_cutoff=200000,
                           msms_intensity_cutoff=10,
                           abs_peak_cutoff=1000,
                           precursor_mz_precision=0.005,
                           max_broken_bonds=4,
                           max_water_losses=1,
                           mz_precision=5.0,
                           mz_precision_abs=0.001,
                           scenario=[{'type': 'phase1', 'steps': '2'},
                                     {'type': 'phase2', 'steps': '1'}],
                           max_ms_level=3,
                           structures='C1CCCC1 comp1',
                           ms_data_file=msfield,
                           structure_format='smiles',
                           ms_data_format='mzxml',
                           structure_database='',
                           min_refscore=1,
                           max_mz=9999,
                           )

        query = self.jobquery.allinone(params)

        expected_script = "{magma} read_ms_data --ms_data_format 'mzxml'"
        expected_script += " -i '1' -m '3' -a '1000.0'"
        expected_script += " -p '5.0' -q '0.001'"
        expected_script += " --precursor_mz_precision '0.005'"
        expected_script += " --call_back_url '/'"
        expected_script += " ms_data.dat {db}\n"

        expected_script += "{magma} add_structures -g -t 'smiles'"
        expected_script += " structures.dat {db}\n"

        expected_script += "{magma} annotate -c '200000.0'"
        expected_script += " -d '10.0'"
        expected_script += " -b '4'"
        expected_script += " --max_water_losses '1' --ncpus '1' --call_back_url '/'"
        expected_script += " --fast {db}\n"

        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=['ms_data.dat', 'structures.dat'],
                                  script=expected_script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
        self.assertMultiLineEqual(params['structures'],
                                  self.fetch_file('structures.dat'))
        self.assertMultiLineEqual('foo', self.fetch_file('ms_data.dat'))
Example #10
0
    def test_jobquery_restricted(self):
        status_cb_url = 'http://example/status/{}.json'.format(self.job.id)
        jobquery = self.job.jobquery(status_cb_url, True, 1)

        ejobquery = JobQuery(self.jobdir,
                             status_callback_url=status_cb_url,
                             restricted=True,
                             )

        self.assertEqual(jobquery, ejobquery)
Example #11
0
    def test_structures_as_string(self):
        params = {'structure_format': 'smiles', 'structures': 'CCO Ethanol'}
        query = self.jobquery.add_structures(params)

        sf = 'structures.dat'
        script = "{magma} add_structures -g -t 'smiles' structures.dat {db}\n"
        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=[sf],
                                  script=script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
        self.assertMultiLineEqual(params['structures'], self.fetch_file(sf))
Example #12
0
    def test_submitQuery_invalid_joblauncher(self):
        from requests.exceptions import HTTPError
        from magmaweb.job import JobSubmissionError
        exc = HTTPError('422 Client Error: Unprocessable Entity')
        self.factory.submitJob2Launcher = Mock(side_effect=exc)
        job = self.factory.fromScratch(u'bob')
        jobquery = JobQuery(job.dir, "", [])
        status_cb_url = 'http://example.com/status/{}.json'.format(job.id)
        jobquery.status_callback_url = status_cb_url

        with self.assertRaises(JobSubmissionError):
            self.factory.submitQuery(jobquery, job)

        self.assertEqual(job.state, 'SUBMISSION_ERROR')
Example #13
0
    def test_submitQuery_no_joblauncher(self):
        from requests.exceptions import ConnectionError
        from magmaweb.job import JobSubmissionError
        exc = ConnectionError('[Errno 111] Connection refused')
        self.factory.submitJob2Launcher = Mock(side_effect=exc)
        job = self.factory.fromScratch(u'bob')
        jobquery = JobQuery(job.dir, "", [])
        status_cb_url = 'http://example.com/status/{}.json'.format(job.id)
        jobquery.status_callback_url = status_cb_url

        with self.assertRaises(JobSubmissionError):
            self.factory.submitQuery(jobquery, job)

        self.assertEqual(job.state, 'SUBMISSION_ERROR')
Example #14
0
    def test_missing_params(self):
        params = {'max_broken_bonds': 4,
                  'max_water_losses': 1,
                  }

        query = self.jobquery.annotate(params)

        script = "{magma} annotate -c '0.0' -d '0.0'"
        script += " -b '4'"
        script += " --max_water_losses '1' --ncpus '1' --call_back_url '/' --fast {db}\n"
        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=[],
                                  script=script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
Example #15
0
    def test_with_jsonified_scenario(self):
        scenario = '[{"steps": "2", "type": "phase1"}, '
        scenario += '{"steps": "1", "type": "phase2"}]'
        params = dict(scenario=scenario)

        query = self.jobquery.metabolize(params)

        script = "{magma} metabolize -g --scenario scenario.csv"
        script += " --call_back_url '/' {db}\n"
        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=['scenario.csv'],
                                  script=script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
        self.assertMultiLineEqual(
            'phase1,2\nphase2,1\n', self.fetch_file('scenario.csv'))
Example #16
0
    def test_without_molecule_and_with_structure_database(self):
        params = dict(ionisation_mode=1,
                      ms_intensity_cutoff=200000,
                      msms_intensity_cutoff=10,
                      abs_peak_cutoff=1000,
                      precursor_mz_precision=0.005,
                      max_broken_bonds=4,
                      max_water_losses=1,
                      mz_precision=5.0,
                      mz_precision_abs=0.001,
                      scenario=[{'type': 'phase1', 'steps': '2'},
                                {'type': 'phase2', 'steps': '1'}],
                      max_ms_level=3,
                      structures='',
                      ms_data='bla',
                      structure_format='smiles',
                      ms_data_format='mzxml',
                      structure_database='pubchem',
                      min_refscore=1,
                      max_mz=1200,
                      )

        query = self.jobquery.allinone(params)

        expected_script = "{magma} read_ms_data --ms_data_format 'mzxml'"
        expected_script += " -i '1' -m '3' -a '1000.0'"
        expected_script += " -p '5.0' -q '0.001'"
        expected_script += " --precursor_mz_precision '0.005'"
        expected_script += " --call_back_url '/'"
        expected_script += " ms_data.dat {db}\n"

        expected_script += "{magma} annotate -c '200000.0'"
        expected_script += " -d '10.0'"
        expected_script += " -b '4'"
        expected_script += " --max_water_losses '1' --ncpus '1' --call_back_url '/'"
        expected_script += " --structure_database 'pubchem'"
        expected_script += " --db_options ',1200,False,True,1'"
        expected_script += " --fast {db}\n"

        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=['ms_data.dat'],
                                  script=expected_script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
Example #17
0
    def test_it(self):

        params = MultiDict(scenario=[{'type': 'phase1', 'steps': '2'},
                                     {'type': 'phase2', 'steps': '1'}]
                           )

        query = self.jobquery.metabolize(params)

        script = "{magma} metabolize -g --scenario scenario.csv"
        script += " --call_back_url '/' {db}\n"
        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=['scenario.csv'],
                                  script=script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
        self.assertMultiLineEqual(
            'phase1,2\nphase2,1\n', self.fetch_file('scenario.csv'))
Example #18
0
    def test_structures_as_file(self):
        import tempfile
        from cgi import FieldStorage
        sfile = tempfile.TemporaryFile()
        sfile.write('foo')
        sfile.flush()
        sfield = FieldStorage()
        sfield.file = sfile
        params = {'structure_format': 'smiles', 'structures_file': sfield}

        query = self.jobquery.add_structures(params)

        script = "{magma} add_structures -g -t 'smiles' structures.dat {db}\n"
        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=['structures.dat'],
                                  script=script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
        self.assertMultiLineEqual('foo', self.fetch_file('structures.dat'))
Example #19
0
    def test_with_form_tree_neg_format(self):
        params = {'ms_data_format': 'form_tree',
                  'ionisation_mode': "-1",
                  'ms_data': 'foo',
                  'precursor_mz_precision': 0.005,
                  'mz_precision': 5.0,
                  'mz_precision_abs': 0.001,
                  }

        query = self.jobquery.add_ms_data(params)

        script = "{magma} read_ms_data --ms_data_format 'form_tree_neg'"
        script += " -i '-1' -m '0' -a '0.0'"
        script += " -p '5.0' -q '0.001' --precursor_mz_precision '0.005'"
        script += " --call_back_url '/' ms_data.dat {db}\n"
        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=['ms_data.dat'],
                                  script=script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
Example #20
0
    def test_submitQuery(self):
        self.factory.init_script = "# make magma available"
        job = self.factory.fromScratch(u'bob')

        self.factory.script_fn = 'script.sh'
        cmd = "magma add_structures -t smiles structures.dat results.db\n"
        jobquery = JobQuery(job.dir, cmd, ['structures.dat'])
        status_cb_url = 'http://example.com/status/{}.json'.format(job.id)
        jobquery.status_callback_url = status_cb_url

        launcher_url = 'http://localhost:9998/job/'
        launcher_url += '70a00fe2-f698-41ed-b28c-b37c22f10440'
        self.factory.submitJob2Launcher = Mock(return_value=launcher_url)

        self.factory.submitQuery(jobquery, job)

        job_script_fn = os.path.join(jobquery.dir, self.factory.script_fn)
        job_script = open(job_script_fn).read()
        exp_script = "# make magma available\n"
        exp_script += "magma add_structures -t smiles "
        exp_script += "structures.dat results.db\n"
        self.assertMultiLineEqual(job_script, exp_script)
        jobmanager_query = {'jobdir': jobquery.dir + '/',
                            'executable': "/bin/sh",
                            'prestaged': [self.factory.script_fn,
                                          'results.db',
                                          'structures.dat'
                                          ],
                            "poststaged": ['results.db'],
                            "stderr": "stderr.txt",
                            "stdout": "stdout.txt",
                            'arguments': [self.factory.script_fn],
                            'status_callback_url': status_cb_url
                            }
        self.factory.submitJob2Launcher.assert_called_with(jobmanager_query)
        self.assertEqual(job.state, u'PENDING')
        self.assertEqual(job.launcher_url, launcher_url)
Example #21
0
    def test_with_annotate(self):
        params = {'structure_format': 'smiles',
                  'structures': 'CCO Ethanol',
                  'ms_intensity_cutoff': 200000,
                  'msms_intensity_cutoff': 10,
                  'max_broken_bonds': 4,
                  'max_water_losses': 1,
                  }
        query = self.jobquery.add_structures(params, True)

        sf = 'structures.dat'
        script = "{magma} add_structures -g -t 'smiles' structures.dat {db} |"
        script += "{magma} annotate -c '200000.0'"
        script += " -d '10.0' -b '4'"
        script += " --max_water_losses '1' --ncpus '1' --call_back_url '/'"
        script += " -j - --fast {db}\n"
        expected_query = JobQuery(directory=self.jobdir,
                                  prestaged=[sf],
                                  script=script,
                                  status_callback_url='/',
                                  )
        self.assertEqual(query, expected_query)
        self.assertMultiLineEqual(
            'CCO Ethanol', self.fetch_file('structures.dat'))
Example #22
0
 def test_eq(self):
     job1 = JobQuery(self.jobdir)
     self.assertEqual(job1, self.jobquery)
Example #23
0
 def setUp(self):
     self.jobdir = '/somedir'
     self.jobquery = JobQuery(self.jobdir)
Example #24
0
 def setUp(self):
     self.jobdir = tempfile.mkdtemp()
     self.jobquery = JobQuery(directory=self.jobdir,
                              script='',
                              status_callback_url='/',
                              )
Example #25
0
 def test_eq_dir(self):
     job1 = JobQuery('/otherdir')
     self.assertNotEqual(job1, self.jobquery)
Example #26
0
 def test_eq_script(self):
     job1 = JobQuery(self.jobdir,
                     script='b',
                     )
     self.assertNotEqual(job1, self.jobquery)
Example #27
0
 def test_eq_prestaged(self):
     job1 = JobQuery(self.jobdir,
                     prestaged=[1],
                     )
     self.assertNotEqual(job1, self.jobquery)
Example #28
0
 def test_escape_single_quote(self):
     jq = JobQuery('/y')
     self.assertEquals(jq.escape("'"), ''')
Example #29
0
 def test_eq_status_callback_url(self):
     job1 = JobQuery(self.jobdir,
                     status_callback_url='/somewhere',
                     )
     self.assertNotEqual(job1, self.jobquery)
Example #30
0
 def test_eq_restricted(self):
     job1 = JobQuery(self.jobdir,
                     restricted=True,
                     )
     self.assertNotEqual(job1, self.jobquery)