Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/prov/tests/test_extras.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:32:28 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:d30785e31577 | 1:56ad4e20f292 |
---|---|
1 from __future__ import (absolute_import, division, print_function, | |
2 unicode_literals) | |
3 | |
4 import io | |
5 import unittest | |
6 | |
7 from prov.model import * | |
8 from prov.dot import prov_to_dot | |
9 from prov.serializers import Registry | |
10 from prov.tests.examples import primer_example, primer_example_alternate | |
11 | |
12 | |
13 EX_NS = Namespace('ex', 'http://example.org/') | |
14 EX2_NS = Namespace('ex2', 'http://example2.org/') | |
15 EX_OTHER_NS = Namespace('other', 'http://exceptions.example.org/') | |
16 | |
17 | |
18 def add_label(record): | |
19 record.add_attributes( | |
20 [('prov:label', Literal("hello"))] | |
21 ) | |
22 | |
23 | |
24 def add_labels(record): | |
25 record.add_attributes([ | |
26 ('prov:label', Literal("hello")), | |
27 ('prov:label', Literal("bye", langtag="en")), | |
28 ('prov:label', Literal("bonjour", langtag="fr")) | |
29 ]) | |
30 | |
31 | |
32 def add_types(record): | |
33 record.add_attributes([ | |
34 ('prov:type', 'a'), | |
35 ('prov:type', 1), | |
36 ('prov:type', 1.0), | |
37 ('prov:type', True), | |
38 ('prov:type', EX_NS['abc']), | |
39 ('prov:type', datetime.datetime.now()), | |
40 ('prov:type', Literal('http://boiled-egg.example.com', | |
41 datatype=XSD_ANYURI)), | |
42 ]) | |
43 | |
44 | |
45 def add_locations(record): | |
46 record.add_attributes([ | |
47 ('prov:Location', "Southampton"), | |
48 ('prov:Location', 1), | |
49 ('prov:Location', 1.0), | |
50 ('prov:Location', True), | |
51 ('prov:Location', EX_NS['london']), | |
52 ('prov:Location', datetime.datetime.now()), | |
53 ('prov:Location', EX_NS.uri + "london"), | |
54 ('prov:Location', Literal(2002, datatype=XSD['gYear'])), | |
55 ]) | |
56 | |
57 | |
58 def add_value(record): | |
59 record.add_attributes([ | |
60 ('prov:value', EX_NS['avalue']) | |
61 ]) | |
62 | |
63 | |
64 def add_further_attributes(record): | |
65 record.add_attributes([ | |
66 (EX_NS['tag1'], "hello"), | |
67 (EX_NS['tag2'], "bye"), | |
68 (EX2_NS['tag3'], "hi"), | |
69 (EX_NS['tag1'], "hello\nover\nmore\nlines"), | |
70 ]) | |
71 | |
72 | |
73 def add_further_attributes0(record): | |
74 record.add_attributes([ | |
75 (EX_NS['tag1'], "hello"), | |
76 (EX_NS['tag2'], "bye"), | |
77 (EX_NS['tag2'], Literal("hola", langtag="es")), | |
78 (EX2_NS['tag3'], "hi"), | |
79 (EX_NS['tag'], 1), | |
80 # long on python 2, int on python 3 | |
81 (EX_NS['tag'], six.integer_types[-1](1)), | |
82 (EX_NS['tag'], Literal(1, datatype=XSD_SHORT)), | |
83 (EX_NS['tag'], Literal(1, datatype=XSD_DOUBLE)), | |
84 (EX_NS['tag'], 1.0), | |
85 (EX_NS['tag'], True), | |
86 (EX_NS['tag'], EX_NS.uri + "southampton"), | |
87 ]) | |
88 | |
89 add_further_attributes_with_qnames(record) | |
90 | |
91 | |
92 def add_further_attributes_with_qnames(record): | |
93 record.add_attributes([ | |
94 (EX_NS['tag'], EX2_NS['newyork']), | |
95 (EX_NS['tag'], EX_NS['london']), | |
96 ]) | |
97 | |
98 | |
99 class TestExtras(unittest.TestCase): | |
100 def test_dot(self): | |
101 # This is naive, since we can't programatically check the output is | |
102 # correct | |
103 document = ProvDocument() | |
104 | |
105 bundle1 = ProvBundle(identifier=EX_NS['bundle1']) | |
106 bundle1.usage( | |
107 activity=EX_NS['a1'], entity=EX_NS['e1'], identifier=EX_NS['use1'] | |
108 ) | |
109 bundle1.entity( | |
110 identifier=EX_NS['e1'], other_attributes={PROV_ROLE: "sausage"} | |
111 ) | |
112 bundle1.activity(identifier=EX_NS['a1']) | |
113 document.activity(EX_NS['a2']) | |
114 | |
115 bundle2 = ProvBundle(identifier=EX_NS['bundle2']) | |
116 bundle2.usage( | |
117 activity=EX_NS['aa1'], entity=EX_NS['ee1'], | |
118 identifier=EX_NS['use2'] | |
119 ) | |
120 bundle2.entity(identifier=EX_NS['ee1']) | |
121 bundle2.activity(identifier=EX_NS['aa1']) | |
122 | |
123 document.add_bundle(bundle1) | |
124 document.add_bundle(bundle2) | |
125 prov_to_dot(document) | |
126 | |
127 def test_extra_attributes(self): | |
128 | |
129 document = ProvDocument() | |
130 | |
131 inf = document.influence( | |
132 EX_NS['a2'], EX_NS['a1'], identifier=EX_NS['inf7'] | |
133 ) | |
134 add_labels(inf) | |
135 add_types(inf) | |
136 add_further_attributes(inf) | |
137 | |
138 self.assertEqual( | |
139 len(inf.attributes), | |
140 len(list(inf.formal_attributes) + inf.extra_attributes) | |
141 ) | |
142 | |
143 def test_serialize_to_path(self): | |
144 document = ProvDocument() | |
145 document.serialize("output.json") | |
146 os.remove('output.json') | |
147 | |
148 document.serialize("http://netloc/outputmyprov/submit.php") | |
149 | |
150 def test_bundle_no_id(self): | |
151 document = ProvDocument() | |
152 | |
153 def test(): | |
154 bundle = ProvBundle() | |
155 document.add_bundle(bundle) | |
156 | |
157 self.assertRaises(ProvException, test) | |
158 | |
159 def test_use_set_time_helpers(self): | |
160 dt = datetime.datetime.now() | |
161 document1 = ProvDocument() | |
162 document1.activity(EX_NS['a8'], startTime=dt, endTime=dt) | |
163 | |
164 document2 = ProvDocument() | |
165 a = document2.activity(EX_NS['a8']) | |
166 a.set_time(startTime=dt, endTime=dt) | |
167 | |
168 self.assertEqual(document1, document2) | |
169 self.assertEqual(a.get_startTime(), dt) | |
170 self.assertEqual(a.get_endTime(), dt) | |
171 | |
172 def test_bundle_add_garbage(self): | |
173 document = ProvDocument() | |
174 | |
175 def test(): | |
176 document.add_bundle( | |
177 document.entity(EX_NS['entity_trying_to_be_a_bundle']) | |
178 ) | |
179 | |
180 self.assertRaises(ProvException, test) | |
181 | |
182 def test(): | |
183 bundle = ProvBundle() | |
184 document.add_bundle(bundle) | |
185 | |
186 self.assertRaises(ProvException, test) | |
187 | |
188 def test_bundle_equality_garbage(self): | |
189 document = ProvBundle() | |
190 self.assertNotEqual(document, 1) | |
191 | |
192 def test_bundle_is_bundle(self): | |
193 document = ProvBundle() | |
194 self.assertTrue(document.is_bundle()) | |
195 | |
196 def test_bundle_get_record_by_id(self): | |
197 document = ProvDocument() | |
198 self.assertEqual(document.get_record(None), None) | |
199 | |
200 # record = document.entity(identifier=EX_NS['e1']) | |
201 # self.assertEqual(document.get_record(EX_NS['e1']), record) | |
202 # | |
203 # bundle = document.bundle(EX_NS['b']) | |
204 # self.assertEqual(bundle.get_record(EX_NS['e1']), record) | |
205 | |
206 def test_bundle_get_records(self): | |
207 document = ProvDocument() | |
208 | |
209 document.entity(identifier=EX_NS['e1']) | |
210 document.agent(identifier=EX_NS['e1']) | |
211 self.assertEqual(len(list(document.get_records(ProvAgent))), 1) | |
212 self.assertEqual(len(document.get_records()), 2) | |
213 | |
214 def test_bundle_name_clash(self): | |
215 document = ProvDocument() | |
216 | |
217 def test(): | |
218 document.bundle(EX_NS['indistinct']) | |
219 document.bundle(EX_NS['indistinct']) | |
220 | |
221 self.assertRaises(ProvException, test) | |
222 | |
223 document = ProvDocument() | |
224 | |
225 def test(): | |
226 document.bundle(EX_NS['indistinct']) | |
227 bundle = ProvBundle(identifier=EX_NS['indistinct']) | |
228 document.add_bundle(bundle) | |
229 | |
230 self.assertRaises(ProvException, test) | |
231 | |
232 def test_document_helper_methods(self): | |
233 document = ProvDocument() | |
234 self.assertFalse(document.is_bundle()) | |
235 self.assertFalse(document.has_bundles()) | |
236 document.bundle(EX_NS['b']) | |
237 self.assertTrue(document.has_bundles()) | |
238 self.assertEqual(u'<ProvDocument>', str(document)) | |
239 | |
240 def test_reading_and_writing_to_file_like_objects(self): | |
241 """ | |
242 Tests reading and writing to and from file like objects. | |
243 """ | |
244 # Create some random document. | |
245 document = ProvDocument() | |
246 document.entity(EX2_NS["test"]) | |
247 | |
248 objects = [io.BytesIO, io.StringIO] | |
249 | |
250 Registry.load_serializers() | |
251 formats = Registry.serializers.keys() | |
252 | |
253 for obj in objects: | |
254 for format in formats: | |
255 try: | |
256 buf = obj() | |
257 document.serialize(destination=buf, format=format) | |
258 buf.seek(0, 0) | |
259 new_document = ProvDocument.deserialize(source=buf, | |
260 format=format) | |
261 self.assertEqual(document, new_document) | |
262 except NotImplementedError: | |
263 # Some serializers might not implement serialize or | |
264 # deserialize method | |
265 pass # and this is fine in the context of this test | |
266 finally: | |
267 buf.close() | |
268 | |
269 # def test_document_unification(self): | |
270 # # TODO: Improve testing of this... | |
271 # document = ProvDocument() | |
272 # bundle = document.bundle(identifier=EX_NS['b']) | |
273 # e1 = bundle.entity(EX_NS['e']) | |
274 # e2 = bundle.entity(EX_NS['e']) | |
275 # unified = document.unified() | |
276 # | |
277 # self.assertEqual(len(unified._bundles[0]._records), 1) | |
278 | |
279 def test_primer_alternate(self): | |
280 g1 = primer_example() | |
281 g2 = primer_example_alternate() | |
282 self.assertEqual(g1, g2) | |
283 | |
284 | |
285 if __name__ == '__main__': | |
286 unittest.main() |