6 from htsworkflow.submission.submission import Submission
8 from htsworkflow.util.rdfhelp import \
14 from django.conf import settings
15 from django.template import Context, loader
17 LOGGER = logging.getLogger(__name__)
19 class GEOSubmission(Submission):
20 def __init__(self, name, model):
21 super(GEOSubmission, self).__init__(name, model)
23 def make_soft(self, result_map):
25 platform = self.get_platform_metadata()
26 platform_attribs = dict(platform)
27 platform_id = platform_attribs['^platform']
28 series = self.get_series_metadata()
29 series_attribs = dict(series)
30 series_id = series_attribs['^series']
31 for lib_id, result_dir in result_map.items():
32 an_analysis = self.get_submission_node(result_dir)
33 metadata = self.get_sample_metadata(an_analysis)
35 errmsg = 'Confused there are more than one samples for %s'
36 LOGGER.debug(errmsg % (str(an_analysis,)))
37 metadata = metadata[0]
38 metadata['raw'] = self.get_sample_files(an_analysis,
40 metadata['supplimental'] = self.get_sample_files(
42 geoSoftNS['supplemental'])
43 samples.append(metadata)
45 soft_template = loader.get_template('geo_submission.soft')
50 'platform_id': platform_id,
51 'series_id': series_id,
53 print str(soft_template.render(context))
55 def check_for_name(self, analysis_node):
57 self.model.get_target(analysis_node,
58 submissionOntology['name']))
60 logger.error("Need name for %s" % (str(analysis_node)))
65 def get_platform_metadata(self):
66 """Gather information for filling out sample section of a SOFT file
68 query_template = loader.get_template('geo_platform.sparql')
69 submission = str(self.submissionSetNS[''].uri)
71 'submission': submission,
74 results = self.execute_query(query_template, context)
75 return self.query_to_soft_dictionary(results, 'platform')
77 def get_series_metadata(self):
78 """Gather information for filling out sample section of a SOFT file
80 query_template = loader.get_template('geo_series.sparql')
81 submission = str(self.submissionSetNS[''].uri)
83 'submission': submission,
86 results = self.execute_query(query_template, context)
87 return self.query_to_soft_dictionary(results, 'series')
89 def get_sample_metadata(self, analysis_node):
90 """Gather information for filling out sample section of a SOFT file
92 query_template = loader.get_template('geo_samples.sparql')
95 'submission': str(analysis_node.uri),
96 'submissionSet': str(self.submissionSetNS[''].uri),
99 results = self.execute_query(query_template, context)
102 r['dataProtocol'] = str(r['dataProtocol']).replace('\n', ' ')
105 def get_sample_files(self, analysis_node, file_class):
108 query_template = loader.get_template('geo_files.sparql')
111 'submission': str(analysis_node.uri),
112 'file_class': str(file_class)
115 return self.execute_query(query_template, context)
117 def query_to_soft_dictionary(self, results, heading):
120 name = simplifyUri(geoSoftNS, r['name'])
122 if name.lower() == heading.lower():
126 for v in fromTypedNode(r['value']).split(os.linesep):
129 attributes.append((name, v))