--- /dev/null
+import logging
+import os
+
+import RDF
+
+from htsworkflow.submission.submission import Submission
+
+from htsworkflow.util.rdfhelp import \
+ fromTypedNode, \
+ geoSoftNS, \
+ stripNamespace, \
+ submissionOntology
+
+from django.conf import settings
+from django.template import Context, loader
+
+LOGGER = logging.getLogger(__name__)
+
+class TrackHubSubmission(Submission):
+ def __init__(self, name, model, host):
+ super(TrackHubSubmission, self).__init__(name, model, host)
+
+ def make_hub(self, result_map):
+ samples = []
+ for lib_id, result_dir in result_map.items():
+ an_analysis = self.get_submission_node(result_dir)
+ metadata = self.get_sample_metadata(an_analysis)
+ if len(metadata) == 0:
+ errmsg = 'No metadata found for {0}'
+ LOGGER.error(errmsg.format(str(an_analysis),))
+ continue
+ elif len(metadata) > 1:
+ errmsg = 'Confused there are more than one sample for %s'
+ LOGGER.debug(errmsg % (str(an_analysis),))
+ metadata = metadata[0]
+ samples.append(metadata)
+
+ template = loader.get_template('trackDb.txt')
+ context = Context({
+ 'samples': samples,
+ })
+ return str(template.render(context))
+
+ def make_manifest(self, result_map):
+ files = []
+ for lib_id, result_dir in result_map.items():
+ an_analysis = self.get_submission_node(result_dir)
+ metadata = self.get_manifest_metadata(an_analysis)
+ files.extend(metadata)
+
+ template = loader.get_template('manifest.txt')
+ context = Context({
+ 'files': files
+ })
+ return str(template.render(context))
+
+ def get_sample_metadata(self, analysis_node):
+ """Gather information for filling out sample section of a SOFT file
+ """
+ query_template = loader.get_template('trackhub_samples.sparql')
+
+ context = Context({
+ 'submission': str(analysis_node.uri),
+ 'submissionSet': str(self.submissionSetNS[''].uri),
+ })
+
+ results = self.execute_query(query_template, context)
+ return results
+
+ def get_manifest_metadata(self, analysis_node):
+ query_template = loader.get_template('trackhub_manifest.sparql')
+
+ context = Context({
+ 'submission': str(analysis_node.uri),
+ 'submissionSet': str(self.submissionSetNS[''].uri),
+ })
+ results = self.execute_query(query_template, context)
+ return results