Files
galaxy/scripts/others/incorrect_gops_jobs.py
T
Nicola Soranzo a353b2e88f Fix E127 errors introduced by previous commit
using:
```
autopep8 -i -r --exclude $(sed -e 's|^|./|' -e 's|/$||' .ci/flake8_blacklist.txt | paste -sd,) --select E127 .
```
2017-08-17 11:35:39 +01:00

110 lines
5.7 KiB
Python
Executable File

#!/usr/bin/env python
"""
Fetch jobs using gops_intersect, gops_merge, gops_subtract, gops_complement, gops_coverage
wherein the second dataset doesn't have chr, start and end in standard columns 1, 2 and 3.
"""
import ConfigParser
import os
import sys
import tempfile
import sqlalchemy as sa
import galaxy.app
import galaxy.model.mapping
assert sys.version_info[:2] >= (2, 4)
class TestApplication(object):
"""Encapsulates the state of a Universe application"""
def __init__(self, database_connection=None, file_path=None):
print >> sys.stderr, "python path is: " + ", ".join(sys.path)
if database_connection is None:
raise Exception("CleanupDatasetsApplication requires a database_connection value")
if file_path is None:
raise Exception("CleanupDatasetsApplication requires a file_path value")
self.database_connection = database_connection
self.file_path = file_path
# Setup the database engine and ORM
self.model = galaxy.model.mapping.init(self.file_path, self.database_connection, engine_options={}, create_tables=False)
def main():
ini_file = sys.argv[1]
conf_parser = ConfigParser.ConfigParser({'here': os.getcwd()})
conf_parser.read(ini_file)
configuration = {}
for key, value in conf_parser.items("app:main"):
configuration[key] = value
database_connection = configuration['database_connection']
file_path = configuration['file_path']
app = TestApplication(database_connection=database_connection, file_path=file_path)
jobs = {}
try:
for job in app.model.Job.filter(sa.and_(app.model.Job.table.c.create_time.between('2008-05-23', '2008-11-29'),
app.model.Job.table.c.state == 'ok',
sa.or_(sa.and_(sa.or_(app.model.Job.table.c.tool_id == 'gops_intersect_1',
app.model.Job.table.c.tool_id == 'gops_subtract_1',
app.model.Job.table.c.tool_id == 'gops_coverage_1'),
sa.not_(app.model.Job.table.c.command_line.like('%-2 1,2,3%'))),
sa.and_(sa.or_(app.model.Job.table.c.tool_id == 'gops_complement_1',
app.model.Job.table.c.tool_id == 'gops_merge_1'),
sa.not_(app.model.Job.table.c.command_line.like('%-1 1,2,3%')))))).all():
print "# processing job id %s" % str(job.id)
for jtoda in job.output_datasets:
print "# --> processing JobToOutputDatasetAssociation id %s" % str(jtoda.id)
hda = app.model.HistoryDatasetAssociation.get(jtoda.dataset_id)
print "# ----> processing HistoryDatasetAssociation id %s" % str(hda.id)
if not hda.deleted:
# Probably don't need this check, since the job state should suffice, but...
if hda.dataset.state == 'ok':
history = app.model.History.get(hda.history_id)
print "# ------> processing history id %s" % str(history.id)
if history.user_id:
cmd_line = str(job.command_line)
new_output = tempfile.NamedTemporaryFile('w')
if job.tool_id in ['gops_intersect_1', 'gops_subtract_1', 'gops_coverage_1']:
new_cmd_line = " ".join(map(str, cmd_line.split()[:4])) + " " + new_output.name + " " + " ".join(map(str, cmd_line.split()[5:]))
job_output = cmd_line.split()[4]
else:
new_cmd_line = " ".join(map(str, cmd_line.split()[:3])) + " " + new_output.name + " " + " ".join(map(str, cmd_line.split()[4:]))
job_output = cmd_line.split()[3]
try:
os.system(new_cmd_line)
except:
pass
diff_status = os.system('diff %s %s >> /dev/null' % (new_output.name, job_output))
if diff_status == 0:
continue
print "# --------> Outputs differ"
user = app.model.User.get(history.user_id)
jobs[job.id] = {}
jobs[job.id]['hda_id'] = hda.id
jobs[job.id]['hda_name'] = hda.name
jobs[job.id]['hda_info'] = hda.info
jobs[job.id]['history_id'] = history.id
jobs[job.id]['history_name'] = history.name
jobs[job.id]['history_update_time'] = history.update_time
jobs[job.id]['user_email'] = user.email
except Exception as e:
print "# caught exception: %s" % str(e)
print "\n\n# Number of incorrect Jobs: %d\n\n" % (len(jobs))
print "#job_id\thda_id\thda_name\thda_info\thistory_id\thistory_name\thistory_update_time\tuser_email"
for jid in jobs:
print '%s\t%s\t"%s"\t"%s"\t%s\t"%s"\t"%s"\t%s' % \
(str(jid),
str(jobs[jid]['hda_id']),
jobs[jid]['hda_name'],
jobs[jid]['hda_info'],
str(jobs[jid]['history_id']),
jobs[jid]['history_name'],
jobs[jid]['history_update_time'],
jobs[jid]['user_email'])
sys.exit(0)
if __name__ == "__main__":
main()