from htsworkflow.util.rdfhelp import \
blankOrUri, \
- dafTermOntology, \
dump_model, \
+ fromTypedNode, \
get_model, \
- libraryOntology, \
- owlNS, \
- rdfNS, \
- submissionLog, \
- submissionOntology, \
- toTypedNode, \
- fromTypedNode
+ strip_namespace, \
+ toTypedNode
+from htsworkflow.util.rdfns import *
from htsworkflow.util.hashfile import make_md5sum
from htsworkflow.submission.fastqname import FastqName
from htsworkflow.submission.daf import \
ModelException, \
get_submission_uri
+from django.conf import settings
+from django.template import Context, Template, loader
+
LOGGER = logging.getLogger(__name__)
class Submission(object):
pathname = os.path.abspath(os.path.join(analysis_dir, filename))
self.construct_file_attributes(analysis_dir, libNode, pathname)
+ def analysis_nodes(self, result_map):
+ """Return an iterable of analysis nodes
+ """
+ for result_dir in result_map.values():
+ an_analysis = self.get_submission_node(result_dir)
+ yield an_analysis
+
def construct_file_attributes(self, analysis_dir, libNode, pathname):
"""Looking for the best extension
The 'best' is the longest match
fileNode = self.make_file_node(pathname, an_analysis)
self.add_md5s(filename, fileNode, analysis_dir)
self.add_fastq_metadata(filename, fileNode)
+ self.add_label(file_type, fileNode, libNode)
self.model.add_statement(
RDF.Statement(fileNode,
rdfNS['type'],
RDF.Statement(fileNode,
libraryOntology['library'],
libNode))
-
+
LOGGER.debug("Done.")
def make_file_node(self, pathname, submissionNode):
except ValueError:
# currently its just ignore it if the fastq name parser fails
return
-
+
terms = [('flowcell', libraryOntology['flowcell_id']),
('lib_id', libraryOntology['library_id']),
('lane', libraryOntology['lane_number']),
s = RDF.Statement(fileNode, model_term, toTypedNode(value))
self.model.append(s)
+ def add_label(self, file_type, file_node, lib_node):
+ """Add rdfs:label to a file node
+ """
+ #template_term = libraryOntology['label_template']
+ template_term = libraryOntology['label_template']
+ label_template = self.model.get_target(file_type, template_term)
+ if label_template:
+ template = loader.get_template('submission_view_rdfs_label_metadata.sparql')
+ context = Context({
+ 'library': str(lib_node.uri),
+ })
+ for r in self.execute_query(template, context):
+ context = Context(r)
+ label = Template(label_template).render(context)
+ s = RDF.Statement(file_node, rdfsNS['label'], unicode(label))
+ self.model.append(s)
+
def _add_library_details_to_model(self, libNode):
# attributes that can have multiple values
set_attributes = set((libraryOntology['has_lane'],
'Small RNA (non-multiplexed)',]
paired = ['Barcoded Illumina',
'Multiplexing',
+ 'NEBNext Multiplexed',
+ 'NEBNext Small RNA',
'Nextera',
'Paired End (non-multiplexed)',
'Dual Index Illumina',]
d[key] = fromTypedNode(value)
results.append(d)
return results
+
+
+def list_submissions(model):
+ """Return generator of submissions in this model.
+ """
+ query_body = """
+ PREFIX subns: <http://jumpgate.caltech.edu/wiki/UcscSubmissionOntology#>
+
+ select distinct ?submission
+ where { ?submission subns:has_submission ?library_dir }
+ """
+ query = RDF.SPARQLQuery(query_body)
+ rdfstream = query.execute(model)
+ for row in rdfstream:
+ s = strip_namespace(submissionLog, row['submission'])
+ if s[-1] in ['#', '/', '?']:
+ s = s[:-1]
+ yield s