Source code for ocrd_models.report
"""
Validation report with messages of different levels of severity.
"""
__all__ = ['ValidationReport']
#
# -------------------------------------------------
#
[docs]
class ValidationReport(object):
"""
Container of notices, warnings and errors about a workspace.
"""
def __init__(self):
"""
Create a new ValidationReport.
"""
self.notices = []
self.warnings = []
self.errors = []
def __str__(self):
"""
Serialize to string.
"""
ret = 'OK' if self.is_valid else 'INVALID'
if not self.is_valid or self.notices:
ret += '['
if self.warnings:
ret += ' %s warnings' % len(self.warnings)
if self.errors:
ret += ' %s errors' % len(self.errors)
if self.notices:
ret += ' %s notices' % len(self.notices)
ret += ' ]'
return ret
@property
def is_valid(self):
"""
Whether the report contains neither errors nor warnings.
"""
return not self.warnings and not self.errors
[docs]
def to_xml(self):
"""
Serialize to XML.
"""
body = ''
for k in ['warning', 'error', 'notice']:
for msg in self.__dict__[k + 's']:
body += '\n <%s>%s</%s>' % (k, msg, k)
return '<report valid="%s">%s\n</report>' % ("true" if self.is_valid else "false", body)
[docs]
def add_warning(self, msg):
"""
Add a warning.
"""
self.warnings.append(msg)
[docs]
def add_error(self, msg):
"""
Add an error
"""
self.errors.append(msg)
[docs]
def add_notice(self, msg):
"""
Add a notice
"""
self.notices.append(msg)
[docs]
def merge_report(self, otherself):
"""
Merge another report into this one.
"""
self.notices += otherself.notices
self.warnings += otherself.warnings
self.errors += otherself.errors