7
7
import datetime
8
8
import json
9
9
import sys
10
+ import warnings
10
11
11
12
from os .path import basename
12
13
@@ -61,11 +62,18 @@ def write_file(self, odml_document, filename):
61
62
msg = ""
62
63
for err in validation .errors :
63
64
if err .is_error :
64
- msg += "\n \t - %s %s: %s" % (err .obj , err .rank , err .msg )
65
+ # msg += "\n\t- %s %s: %s" % (err.obj, err.rank, err.msg)
66
+ msg += "\n - %s" % err
65
67
if msg != "" :
66
68
msg = "Resolve document validation errors before saving %s" % msg
67
69
raise ParserException (msg )
68
70
71
+ report = validation .report ()
72
+ if report :
73
+ msg += "The saved Document contains unresolved issues."
74
+ msg += " Run the Documents 'validate' method to access them.\n %s" % report
75
+ warnings .warn (msg )
76
+
69
77
with open (filename , 'w' ) as file :
70
78
# Add XML header to support odML stylesheets.
71
79
if self .parser == 'XML' :
@@ -153,6 +161,13 @@ def __init__(self, parser='XML', show_warnings=True):
153
161
self .show_warnings = show_warnings
154
162
self .warnings = []
155
163
164
+ def _validation_warning (self ):
165
+ report = Validation (self .doc ).report ()
166
+ if report :
167
+ msg = "The loaded Document contains unresolved issues."
168
+ msg += " Run the Documents 'validate' method to access them.\n %s" % report
169
+ warnings .warn (msg )
170
+
156
171
def from_file (self , file , doc_format = None ):
157
172
"""
158
173
Loads an odML document from a file. The ODMLReader.parser specifies the
@@ -171,6 +186,11 @@ def from_file(self, file, doc_format=None):
171
186
show_warnings = self .show_warnings )
172
187
self .warnings = par .warnings
173
188
self .doc = par .from_file (file )
189
+
190
+ # Print validation warnings after parsing
191
+ if self .show_warnings :
192
+ self ._validation_warning ()
193
+
174
194
return self .doc
175
195
176
196
if self .parser == 'YAML' :
@@ -188,6 +208,11 @@ def from_file(self, file, doc_format=None):
188
208
self .doc = par .to_odml (self .parsed_doc )
189
209
# Provide original file name via the in memory document
190
210
self .doc .origin_file_name = basename (file )
211
+
212
+ # Print validation warnings after parsing
213
+ if self .show_warnings :
214
+ self ._validation_warning ()
215
+
191
216
return self .doc
192
217
193
218
if self .parser == 'JSON' :
@@ -202,13 +227,27 @@ def from_file(self, file, doc_format=None):
202
227
self .doc = par .to_odml (self .parsed_doc )
203
228
# Provide original file name via the in memory document
204
229
self .doc .origin_file_name = basename (file )
230
+
231
+ # Print validation warnings after parsing
232
+ if self .show_warnings :
233
+ self ._validation_warning ()
234
+
205
235
return self .doc
206
236
207
237
if self .parser == 'RDF' :
208
238
if not doc_format :
209
239
raise ValueError ("Format of the rdf file was not specified" )
210
240
241
+ # Importing from an RDF graph can return multiple documents
211
242
self .doc = RDFReader ().from_file (file , doc_format )
243
+
244
+ for doc in self .doc :
245
+ report = Validation (doc ).report ()
246
+ if report :
247
+ msg = "The loaded Document contains unresolved issues."
248
+ msg += " Run the Documents 'validate' method to access them.\n %s" % report
249
+ warnings .warn (msg )
250
+
212
251
return self .doc
213
252
214
253
def from_string (self , string , doc_format = None ):
@@ -227,6 +266,11 @@ def from_string(self, string, doc_format=None):
227
266
228
267
if self .parser == 'XML' :
229
268
self .doc = xmlparser .XMLReader ().from_string (string )
269
+
270
+ # Print validation warnings after parsing
271
+ if self .show_warnings :
272
+ self ._validation_warning ()
273
+
230
274
return self .doc
231
275
232
276
if self .parser == 'YAML' :
@@ -237,6 +281,11 @@ def from_string(self, string, doc_format=None):
237
281
return
238
282
239
283
self .doc = DictReader ().to_odml (self .parsed_doc )
284
+
285
+ # Print validation warnings after parsing
286
+ if self .show_warnings :
287
+ self ._validation_warning ()
288
+
240
289
return self .doc
241
290
242
291
if self .parser == 'JSON' :
@@ -247,13 +296,27 @@ def from_string(self, string, doc_format=None):
247
296
return
248
297
249
298
self .doc = DictReader ().to_odml (self .parsed_doc )
299
+
300
+ # Print validation warnings after parsing
301
+ if self .show_warnings :
302
+ self ._validation_warning ()
303
+
250
304
return self .doc
251
305
252
306
if self .parser == 'RDF' :
253
307
if not doc_format :
254
308
raise ValueError ("Format of the rdf file was not specified" )
255
309
310
+ # Importing from an RDF graph can return multiple documents
256
311
self .doc = RDFReader ().from_string (string , doc_format )
312
+
313
+ for doc in self .doc :
314
+ report = Validation (doc ).report ()
315
+ if report :
316
+ msg = "The loaded Document contains unresolved issues."
317
+ msg += " Run the Documents 'validate' method to access them.\n %s" % report
318
+ warnings .warn (msg )
319
+
257
320
return self .doc
258
321
259
322
0 commit comments