1 from StringIO import StringIO
4 from htsworkflow.submission import daf
5 from htsworkflow.util.rdfhelp import \
16 test_daf = """# Lab and general info
20 variables cell, antibody,sex,age,strain,control
21 compositeSuffix CaltechHistone
24 validationSettings validateFiles.bam:mismatches=2,bamPercent=99.9;validateFiles.fastq:quick=1000
26 # Track/view definition
28 longLabelPrefix Caltech Fastq Read 1
34 longLabelPrefix Caltech Histone Signal
40 class TestDAF(unittest.TestCase):
43 parsed = daf.fromstring(test_daf)
45 self.failUnlessEqual(parsed['assembly'], 'mm9')
46 self.failUnlessEqual(parsed['grant'], 'Hardison')
47 self.failUnlessEqual(len(parsed['variables']), 6)
48 self.failUnlessEqual(len(parsed['views']), 2)
49 self.failUnlessEqual(len(parsed['views']['FastqRd1']), 5)
50 self.failUnlessEqual(len(parsed['views']['Signal']), 5)
51 signal = parsed['views']['Signal']
52 self.failUnlessEqual(signal['required'], False)
53 self.failUnlessEqual(signal['longLabelPrefix'],
54 'Caltech Histone Signal')
58 parsed = daf.fromstring(test_daf)
59 #mem = RDF.Storage(storage_name='hashes',
60 # options_string='hash-type="memory"'),
61 mem = RDF.MemoryStorage()
62 model = RDF.Model(mem)
65 subNS = RDF.NS(str(submissionLog[name].uri))
66 daf.add_to_model(model, parsed, name)
68 signal_view_node = RDF.Node(subNS['/view/Signal'].uri)
70 writer = get_serializer()
71 turtle = writer.serialize_model_to_string(model)
72 self.failUnless(str(signal_view_node) in turtle)
74 statements = list(model.find_statements(
76 signal_view_node, None, None)))
77 self.failUnlessEqual(len(statements), 6)
78 name = model.get_target(signal_view_node, dafTermOntology['name'])
79 self.failUnlessEqual(fromTypedNode(name), u'Signal')
81 def load_daf_mapper(name, extra_statements=None):
85 if extra_statements is not None:
86 parser = RDF.Parser(name='turtle')
87 parser.parse_string_into_model(model, extra_statements,
90 test_daf_stream = StringIO(test_daf)
91 mapper = daf.DAFMapper(name, daf_file = test_daf_stream, model=model)
94 def dump_model(model):
95 writer = get_serializer()
96 turtle = writer.serialize_model_to_string(model)
99 class TestDAFMapper(unittest.TestCase):
100 def test_create_mapper_add_pattern(self):
102 mapper = load_daf_mapper(name)
103 pattern = '.bam\Z(?ms)'
104 mapper.add_pattern('Signal', pattern)
106 s = RDF.Statement(daf.get_view_namespace(name)['Signal'],
107 dafTermOntology['filename_re'],
109 search = list(mapper.model.find_statements(s))
110 self.failUnlessEqual(len(search), 1)
111 self.failUnlessEqual(str(search[0].subject),
112 str(submissionLog['testsub/view/Signal']))
113 self.failUnlessEqual(str(search[0].predicate),
114 str(dafTermOntology['filename_re']))
115 #self.failUnlessEqual(search[0].object.literal_value['string'], pattern)
117 def test_find_one_view(self):
118 extra = '''@prefix dafTerm:<http://jumpgate.caltech.edu/wiki/UcscDaf#> .
120 <%(submissionLog)s/testfind/view/Signal> dafTerm:filename_re ".*\\\\.bam" .
121 <%(submissionLog)s/testfind/view/FastqRd1> dafTerm:filename_re ".*_r1\\\\.fastq" .
122 ''' % {'submissionLog': 'http://jumpgate.caltech.edu/wiki/SubmissionsLog'}
124 daf_mapper = load_daf_mapper('testfind', extra_statements = extra)
126 view = daf_mapper.find_view('filename_r1.fastq')
127 self.failUnlessEqual(str(view),
128 str(submissionLog['testfind/view/FastqRd1']))
130 #writer = get_serializer()
131 #turtle = writer.serialize_model_to_string(model)
134 def test_find_overlapping_view(self):
135 extra = '''@prefix dafTerm:<http://jumpgate.caltech.edu/wiki/UcscDaf#> .
137 <%(submissionLog)s/testfind/view/fastq> dafTerm:filename_re ".*\\\\.fastq" .
138 <%(submissionLog)s/testfind/view/FastqRd1> dafTerm:filename_re ".*_r1\\\\.fastq" .
139 ''' % {'submissionLog': 'http://jumpgate.caltech.edu/wiki/SubmissionsLog'}
141 daf_mapper = load_daf_mapper('testfind', extra_statements = extra)
143 self.failUnlessRaises(daf.ModelException,
144 daf_mapper.find_view,
147 def test_find_attributes(self):
149 lib_url = 'http://jumpgate.caltech.edu/library/%s' %(lib_id)
150 extra = '''@prefix dafTerm: <http://jumpgate.caltech.edu/wiki/UcscDaf#> .
151 @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
153 <%(submissionLog)s/testfind/view/Signal> dafTerm:filename_re ".*\\\\.bam" .
154 <%(submissionLog)s/testfind/view/FastqRd1> dafTerm:filename_re ".*\\\\.fastq" .
155 <%(libUrl)s> <%(libraryOntology)sgel_cut> "100"^^xsd:decimal .
156 ''' % {'submissionLog': 'http://jumpgate.caltech.edu/wiki/SubmissionsLog',
157 'libraryOntology': 'http://jumpgate.caltech.edu/wiki/LibraryOntology#',
160 daf_mapper = load_daf_mapper('testfind', extra)
161 libNode = RDF.Node(RDF.Uri(lib_url))
162 daf_mapper._add_library_details_to_model(libNode)
163 gel_cut = daf_mapper._get_library_attribute(libNode, 'gel_cut')
164 # make sure we can override attributes, the value in our
165 # server is 500 for this library
166 self.failUnlessEqual(gel_cut, 100)
168 species = daf_mapper._get_library_attribute(libNode, 'species')
169 self.failUnlessEqual(species, "Homo sapiens")
171 daf_mapper.construct_file_attributes('/tmp/analysis1', libNode, 'filename.bam')
172 source = daf_mapper.model.get_source(rdfNS['type'], submissionOntology['submission'])
173 self.failUnlessEqual(str(source), "<http://jumpgate.caltech.edu/wiki/SubmissionsLog/testfind/analysis1>")
174 view = daf_mapper.model.get_target(source, submissionOntology['has_view'])
175 self.failUnlessEqual(str(view), "<http://jumpgate.caltech.edu/wiki/SubmissionsLog/testfind/analysis1/Signal>")
178 def test_library_url(self):
179 daf_mapper = load_daf_mapper('urltest')
181 self.failUnlessEqual(daf_mapper.library_url,
182 'http://jumpgate.caltech.edu/library/')
183 daf_mapper.library_url = 'http://google.com'
184 self.failUnlessEqual(daf_mapper.library_url, 'http://google.com' )
188 suite = unittest.makeSuite(TestDAF, 'test')
189 suite.addTest(unittest.makeSuite(TestDAFMapper, 'test'))
192 if __name__ == "__main__":
193 unittest.main(defaultTest='suite')