From dd9de4c93fbfde871a690dd17af8494d738c7290 Mon Sep 17 00:00:00 2001 From: Diane Trout Date: Wed, 1 Feb 2012 17:10:11 -0800 Subject: [PATCH] Make report prettier. Down side is its now by geneome. Upside is it more strongly shows how a library has multiple submissions. --- encode_submission/submission_report.py | 105 ++++++++++++++++--------- 1 file changed, 70 insertions(+), 35 deletions(-) diff --git a/encode_submission/submission_report.py b/encode_submission/submission_report.py index ede5181..3f55479 100644 --- a/encode_submission/submission_report.py +++ b/encode_submission/submission_report.py @@ -1,6 +1,7 @@ import argparse import RDF import jinja2 +from pprint import pprint from htsworkflow.util.rdfhelp import \ dafTermOntology, \ @@ -19,18 +20,23 @@ CREATION_DATE = libraryOntology['date'] from encode_find import DBDIR +DEFAULT_GENOME='hg19' +DEFAULT_OUTPUT='/tmp/submission_report.html' + def main(cmdline=None): parser = make_parser() args = parser.parse_args(cmdline) model = get_model('encode', DBDIR) report = what_have_we_done(model, genome=args.genome) - print report - + with open(DEFAULT_OUTPUT,'w') as stream: + stream.write(report) def make_parser(): parser = argparse.ArgumentParser() - parser.add_argument('--genome', default=None, + parser.add_argument('--genome', default=DEFAULT_GENOME, help='limit to one genome') + parser.add_argument('--output', default='/tmp/submission_report.html', + help="specify where to write to write report") return parser SUBMISSION_QUERY = """ @@ -41,10 +47,11 @@ PREFIX libraryOntology: PREFIX daf: PREFIX ddf: -SELECT distinct ?assembly ?experiment ?library_urn ?library_name ?submission ?submission_status ?date +SELECT distinct ?assembly ?experiment ?library_urn ?library_name ?submission ?submission_status ?submission_name ?date WHERE {{ ?submission ucscSubmission:library_urn ?library_urn ; ucscSubmission:has_status ?status ; + ucscSubmission:name ?submission_name ; libraryOntology:date ?date . ?status daf:assembly ?assembly ; ucscSubmission:status ?submission_status . @@ -56,64 +63,92 @@ WHERE {{ ORDER BY ?assembly ?experiment ?library_urn ?submission """ -SUBMISSION_TEMPLATE = """ +SUBMISSION_TEMPLATE = ''' + Submission report for {{ genome }} - - - - - - - - - - - - -{% for record in submissions %} - - - - - - - - - +

Genome: {{ genome }}

+{% for experiment in libraries %} +

{{ experiment }}

+
AssemblyExperimentLibrary IDSubmission IDLast UpdatedStatusLibrary Name
{{record.assembly}}{{record.experiment}}{{ record.library_urn | trim_rdf}}{{record.submission|trim_rdf}}{{ record.date|timestamp_to_date }}{{ record.submission_status }}{{ record.library_name }}
+ + + + + + + + + + + + + + {% for liburn, records in libraries[experiment]|dictsort %} + + + + + + {% for record in records|sort %} + + + + + + + {% endfor %} + {% endfor %} + +
Library IDLibrary Name
Submission IDLast UpdatedStatusSubmission name
+ + {{ libraries[experiment][liburn].0.library_urn | trim_rdf}} + + {{ libraries[experiment][liburn].0.library_name }}
{{record.submission|trim_rdf}}{{ record.date|timestamp_to_date }}{{ record.submission_status }}{{ record.submission_name }}
{% endfor %} - - - + -""" +''' -def what_have_we_done(model, genome=None): +def what_have_we_done(model, genome): assembly_filter = '' - if genome is not None: - assembly_filter = 'FILTER(regex(?assembly, "{0}", "i"))'.format(genome) + assembly_filter = 'FILTER(regex(?assembly, "{0}", "i"))'.format(genome) query = SUBMISSION_QUERY.format( assembly_filter=assembly_filter ) compiled_query = RDF.SPARQLQuery(query) submissions = compiled_query.execute(model) + libraries = group_by_library(submissions) environment = jinja2.Environment() environment.filters['trim_rdf'] = trim_rdf environment.filters['timestamp_to_date'] = timestamp_to_date template = environment.from_string(SUBMISSION_TEMPLATE) - return template.render(submissions = submissions) + return template.render(libraries=libraries, + genome=genome) + +def group_by_library(submissions): + libraries = {} + for record in submissions: + urn = str(record['library_urn'].uri) + experiment = str(record['experiment']) + libraries.setdefault(experiment, {}).setdefault(urn, []).append(record) + return libraries def trim_rdf(value): if value is None: return value = str(value) + if len(value) == 0: + return value if value[-1] == '/': value = value[:-1] split_value = value.split('/') -- 2.30.2