Skip to content

Commit 9280d6e

Browse files
authored
Merge pull request #280 from mpsonntag/testnfix
ODMLParser tests
2 parents e36d568 + 2084033 commit 9280d6e

8 files changed

Lines changed: 539 additions & 86 deletions

File tree

odml/section.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,10 @@ def include(self, new_value):
134134
if self._include is not None:
135135
self.clean()
136136
self._include = new_value
137-
self.merge(new_section)
137+
138+
# strict needs to be False, otherwise finalizing a document will
139+
# basically always fail.
140+
self.merge(new_section, strict=False)
138141

139142
@property
140143
def link(self):
@@ -172,7 +175,10 @@ def link(self, new_value):
172175
if self._link is not None:
173176
self.clean()
174177
self._link = new_value
175-
self.merge(new_section)
178+
179+
# strict needs to be False, otherwise finalizing a document will
180+
# basically always fail.
181+
self.merge(new_section, strict=False)
176182

177183
@property
178184
def definition(self):

odml/tools/odmlparser.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from ..info import FORMAT_VERSION
1515
from .parser_utils import ParserException
1616
from .parser_utils import SUPPORTED_PARSERS
17-
from .rdf_converter import RDFReader
17+
from .rdf_converter import RDFReader, RDFWriter
1818
from ..validation import Validation
1919

2020

@@ -34,10 +34,6 @@ def __init__(self, parser='XML'):
3434
if parser not in SUPPORTED_PARSERS:
3535
raise NotImplementedError("'%s' odML parser does not exist!" % parser)
3636

37-
if parser == 'RDF':
38-
msg = "The odML writer for RDF is currently not supported"
39-
raise NotImplementedError(msg)
40-
4137
self.parser = parser
4238

4339
def write_file(self, odml_document, filename):
@@ -59,6 +55,9 @@ def to_string(self, odml_document):
5955

6056
if self.parser == 'XML':
6157
string_doc = str(xmlparser.XMLWriter(odml_document))
58+
elif self.parser == "RDF":
59+
# Use turtle as default output format for now.
60+
string_doc = RDFWriter(odml_document).get_rdf_str("turtle")
6261
else:
6362
self.parsed_doc = DictWriter().to_dict(odml_document)
6463

@@ -134,7 +133,7 @@ def from_file(self, file, doc_format=None):
134133

135134
elif self.parser == 'RDF':
136135
if not doc_format:
137-
raise KeyError("Format of the rdf file was not specified")
136+
raise ValueError("Format of the rdf file was not specified")
138137

139138
self.doc = RDFReader().from_file(file, doc_format)
140139
return self.doc
@@ -167,7 +166,7 @@ def from_string(self, string, doc_format=None):
167166

168167
elif self.parser == 'RDF':
169168
if not doc_format:
170-
raise KeyError("Format of the rdf file was not specified")
169+
raise ValueError("Format of the rdf file was not specified")
171170

172171
self.doc = RDFReader().from_string(string, doc_format)
173172
return self.doc

test/resources/example.odml

Lines changed: 311 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,311 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<?xml-stylesheet type="text/xsl" href="odmlTerms.xsl"?>
3+
<?xml-stylesheet type="text/xsl" href="odml.xsl"?>
4+
<odML version="1.1">
5+
<version>42</version>
6+
<section>
7+
<name>TheCrew</name>
8+
<property>
9+
<type>person</type>
10+
<name>NameCrewMembers</name>
11+
<value>[Arthur Philip Dent,Zaphod Beeblebrox,Tricia Marie McMillan,Ford Prefect]</value>
12+
<id>77cdad5c-5d74-4e9f-9d74-c1ce8e79e951</id>
13+
<definition>List of crew members names</definition>
14+
</property>
15+
<property>
16+
<type>int</type>
17+
<uncertainty>1</uncertainty>
18+
<name>NoCrewMembers</name>
19+
<reference>The Hitchhiker's guide to the Galaxy (novel)</reference>
20+
<value>[4]</value>
21+
<id>05e14adf-1ca2-4b2d-984d-6c84814a84de</id>
22+
<definition>Number of crew members</definition>
23+
</property>
24+
<section>
25+
<name>Arthur Philip Dent</name>
26+
<property>
27+
<type>string</type>
28+
<name>Species</name>
29+
<value>[Human]</value>
30+
<id>f64e9d6a-e38d-499e-a03f-fe59b91ad6ba</id>
31+
<definition>Species to which subject belongs to</definition>
32+
</property>
33+
<property>
34+
<type>string</type>
35+
<name>Nickname</name>
36+
<value>[The sandwich-maker]</value>
37+
<id>c9dd7ae6-66a1-49f0-9853-80f2cdf6b574</id>
38+
<definition>Nickname(s) of the subject</definition>
39+
</property>
40+
<property>
41+
<type>string</type>
42+
<name>Occupation</name>
43+
<value>[]</value>
44+
<id>76941971-132a-4b3a-94db-e3cf356ea429</id>
45+
<definition>Occupation of the subject</definition>
46+
</property>
47+
<property>
48+
<type>string</type>
49+
<name>Gender</name>
50+
<value>[male]</value>
51+
<id>5f1a5e56-d893-47bd-989a-9d3a596bc29e</id>
52+
<definition>Sex of the subject</definition>
53+
</property>
54+
<property>
55+
<type>string</type>
56+
<name>HomePlanet</name>
57+
<value>[Earth]</value>
58+
<id>6470acca-5457-4a43-a61c-6744372dff3b</id>
59+
<definition>Home planet of the subject</definition>
60+
</property>
61+
<definition>Information on Arthur Dent</definition>
62+
<id>e547c987-4beb-4250-bcb3-1991c535e7e8</id>
63+
<type>crew/person</type>
64+
</section>
65+
<section>
66+
<name>Zaphod Beeblebrox</name>
67+
<property>
68+
<type>string</type>
69+
<name>Species</name>
70+
<value>[Betelgeusian]</value>
71+
<id>861a8469-708e-4950-be71-12c640d7e7d6</id>
72+
<definition>Species to which subject belongs to</definition>
73+
</property>
74+
<property>
75+
<type>string</type>
76+
<name>Nickname</name>
77+
<value>[]</value>
78+
<id>ba06784b-d323-45c8-bb52-918b727f2ef1</id>
79+
<definition>Nickname(s) of the subject</definition>
80+
</property>
81+
<property>
82+
<type>string</type>
83+
<name>Occupation</name>
84+
<value>[Ex-Galactic President]</value>
85+
<id>09b96b49-7bf3-4449-9e43-62d87bb23f16</id>
86+
<definition>Occupation of the subject</definition>
87+
</property>
88+
<property>
89+
<type>string</type>
90+
<name>Gender</name>
91+
<value>[male]</value>
92+
<id>41f4ab65-afda-43c9-aa08-a384c9fba585</id>
93+
<definition>Sex of the subject</definition>
94+
</property>
95+
<property>
96+
<type>string</type>
97+
<name>HomePlanet</name>
98+
<value>[A planet in the vicinity of Betelgeuse]</value>
99+
<id>c81063a1-4727-4d51-bdfd-574923f387ab</id>
100+
<definition>Home planet of the subject</definition>
101+
</property>
102+
<definition>Information on Zaphod Beeblebrox</definition>
103+
<id>5d22732f-ebfd-494d-9fb0-0e938fc83291</id>
104+
<type>crew/person</type>
105+
</section>
106+
<section>
107+
<name>Tricia Marie McMillan</name>
108+
<property>
109+
<type>string</type>
110+
<name>Species</name>
111+
<value>[Human]</value>
112+
<id>087d4862-50a5-4764-a2b5-01dded29ccab</id>
113+
<definition>Species to which subject belongs to</definition>
114+
</property>
115+
<property>
116+
<type>string</type>
117+
<name>Nickname</name>
118+
<value>[Trillian Astra]</value>
119+
<id>15fef4d3-a9ed-4fc2-95db-7f7c90d85a8c</id>
120+
<definition>Nickname(s) of the subject</definition>
121+
</property>
122+
<property>
123+
<type>string</type>
124+
<name>Occupation</name>
125+
<value>[]</value>
126+
<id>4ab85d8a-f884-4ef7-bf33-0d42044d95bb</id>
127+
<definition>Occupation of the subject</definition>
128+
</property>
129+
<property>
130+
<type>string</type>
131+
<name>Gender</name>
132+
<value>[female]</value>
133+
<id>dd553e39-b3b1-4ef2-9b21-6145a3222d15</id>
134+
<definition>Sex of the subject</definition>
135+
</property>
136+
<property>
137+
<type>string</type>
138+
<name>HomePlanet</name>
139+
<value>[Earth]</value>
140+
<id>fe2abddf-f2e7-43f3-b3db-0932f94e17e9</id>
141+
<definition>Home planet of the subject</definition>
142+
</property>
143+
<definition>Information on Trillian Astra</definition>
144+
<id>b85c4c2d-4722-48fa-a118-5c2f553d7282</id>
145+
<type>crew/person</type>
146+
</section>
147+
<section>
148+
<name>Ford Prefect</name>
149+
<property>
150+
<type>string</type>
151+
<name>Species</name>
152+
<value>[Betelgeusian]</value>
153+
<id>1493fb9b-6fb2-479e-923c-61242567ffd7</id>
154+
<definition>Species to which subject belongs to</definition>
155+
</property>
156+
<property>
157+
<type>string</type>
158+
<name>Nickname</name>
159+
<value>[Ix]</value>
160+
<id>4b6eb605-dbfb-40e0-83c4-acca43e4fdbb</id>
161+
<definition>Nickname(s) of the subject</definition>
162+
</property>
163+
<property>
164+
<type>string</type>
165+
<name>Occupation</name>
166+
<value>[Researcher/Reporter]</value>
167+
<id>3a69dba5-c780-447a-b9d9-e8da3cbbd4f4</id>
168+
<definition>Occupation of the subject</definition>
169+
</property>
170+
<property>
171+
<type>string</type>
172+
<name>Gender</name>
173+
<value>[male]</value>
174+
<id>01b8b16c-c80b-4432-93a9-0fab8de74e22</id>
175+
<definition>Sex of the subject</definition>
176+
</property>
177+
<property>
178+
<type>string</type>
179+
<name>HomePlanet</name>
180+
<value>[A planet in the vicinity of Betelgeuse]</value>
181+
<id>f47c0d5e-e2b8-425b-83f3-57bcbe44164d</id>
182+
<definition>Home planet of the subject</definition>
183+
</property>
184+
<definition>Information on Ford Prefect</definition>
185+
<id>97cbf33c-5aa8-41af-b158-13247e7481dd</id>
186+
<type>crew/person</type>
187+
</section>
188+
<definition>Information on the crew</definition>
189+
<id>6df940b5-b502-4749-8ad9-33d7432064f3</id>
190+
<type>crew</type>
191+
</section>
192+
<section>
193+
<name>TheStarship</name>
194+
<property>
195+
<type>string</type>
196+
<name>Name</name>
197+
<value>[Heart of Gold]</value>
198+
<id>b0f80f23-e976-4a06-b146-b81e5f565d6b</id>
199+
<definition>Name of person/device</definition>
200+
</property>
201+
<property>
202+
<type>string</type>
203+
<name>OwnerStatus</name>
204+
<value>[stolen]</value>
205+
<id>43b26234-6023-4e7f-8bc4-401b0fd0504a</id>
206+
<definition>Owner status of device</definition>
207+
</property>
208+
<property>
209+
<type>string</type>
210+
<name>DriveType</name>
211+
<value>[Infinite Propability Drive]</value>
212+
<id>828d51ea-f5c8-4525-b2ff-757555449190</id>
213+
<definition>Type of drive</definition>
214+
</property>
215+
<property>
216+
<type>string</type>
217+
<name>Technology</name>
218+
<value>[secret]</value>
219+
<id>0117aaa2-fa5d-4623-a63c-4342733205ec</id>
220+
<definition>Technology used to built device</definition>
221+
</property>
222+
<property>
223+
<type>float</type>
224+
<name>Length</name>
225+
<unit>m</unit>
226+
<value>[150.0]</value>
227+
<id>7e2a3940-833c-407b-9047-918d317af204</id>
228+
<definition>Length of device</definition>
229+
</property>
230+
<property>
231+
<type>string</type>
232+
<name>Shape</name>
233+
<value>[various]</value>
234+
<id>f34bfcbb-1a57-4905-bc8b-ef953c0e736e</id>
235+
<definition>Shape of device</definition>
236+
</property>
237+
<property>
238+
<type>string</type>
239+
<name>FactoryPlanet</name>
240+
<value>[Damogran]</value>
241+
<id>c39386b4-2023-4dd3-bf03-57bd3c65d5c0</id>
242+
<definition>Planet where device was constructed</definition>
243+
</property>
244+
<section>
245+
<name>Cybernetics</name>
246+
<property>
247+
<type>int</type>
248+
<name>NoOfCybernetics</name>
249+
<value>[2]</value>
250+
<id>534155a2-8d6a-471d-a7cb-8a950ff5e157</id>
251+
<definition>Number of cybernetic robots on the ship</definition>
252+
</property>
253+
<property>
254+
<type>string</type>
255+
<name>NamesOfCybernetics</name>
256+
<value>[Marvin,Eddie]</value>
257+
<id>7c00d7e3-2822-42b5-b5b3-b5c7dc51f67e</id>
258+
<definition>Names of cybernetic robots on the ship</definition>
259+
</property>
260+
<section>
261+
<name>Marvin</name>
262+
<property>
263+
<type>string</type>
264+
<name>Type</name>
265+
<value>[Genuine People Personality]</value>
266+
<id>7f74bd80-4d08-43b3-aedc-7e3668b48d34</id>
267+
<definition>Type of robot</definition>
268+
</property>
269+
<property>
270+
<type>string</type>
271+
<name>Manufacturer</name>
272+
<value>[Sirius Cybernetics Corporation]</value>
273+
<id>45cb21b1-b0e6-4eb0-a153-2059dd3d3444</id>
274+
<definition>Manufacturer of robots</definition>
275+
</property>
276+
<definition>Information on Marvin</definition>
277+
<id>2d66ac3e-5d25-45cc-89c1-1cc5890daa7b</id>
278+
<type>starship/cybernetics</type>
279+
</section>
280+
<section>
281+
<name>Eddie</name>
282+
<property>
283+
<type>string</type>
284+
<name>Type</name>
285+
<value>[Genuine People Personality]</value>
286+
<id>2899d6df-7f15-48f5-aa11-aa368ba75eeb</id>
287+
<definition>Type of robot</definition>
288+
</property>
289+
<property>
290+
<type>string</type>
291+
<name>Manufacturer</name>
292+
<value>[Sirius Cybernetics Corporation]</value>
293+
<id>dda738bb-47e4-462b-821c-ea900633dbee</id>
294+
<definition>Manufacturer of robots</definition>
295+
</property>
296+
<definition>Information on Eddie</definition>
297+
<id>953852d6-bbca-44d5-bad1-fb9bbca08655</id>
298+
<type>starship/cybernetics</type>
299+
</section>
300+
<definition>Information on cybernetics present on the ship</definition>
301+
<id>4f6f4994-cc0f-4d10-a643-4cdda5aa8248</id>
302+
<type>starship/cybernetics</type>
303+
</section>
304+
<definition>Information on the starship</definition>
305+
<id>38a36e78-ceca-4045-87a5-53a4dac29f10</id>
306+
<type>starship</type>
307+
</section>
308+
<author>D. N. Adams</author>
309+
<date>1979-10-12</date>
310+
<id>cf6d24de-c780-4ad2-91ce-45dd5157d6b8</id>
311+
</odML>

0 commit comments

Comments
 (0)