#-----------------------------------------------------------------------------
# :author: Pete R. Jemian
# :email: prjemian@gmail.com
# :copyright: (c) 2017-2018, Pete R. Jemian
#
# Distributed under the terms of the Creative Commons Attribution 4.0 International Public License.
#
# The full license is in the file LICENSE.txt, distributed with this software.
#-----------------------------------------------------------------------------
"""
document each item during validation
.. autosummary::
~Finding
~VALID_STATUS_DICT
"""
import hashlib
[docs]class ValidationResultStatus(object):
"""
summary result of a Finding
:param str key: short name
:param str color: suggested color for GUI
:param str description: one-line summary
"""
def __init__(self, key, value, color, description):
self.key = key
self.value = value
self.color = color
self.description = description
def __str__(self, *args, **kwargs):
return self.key
VERY_BAD = -10000000
OK = ValidationResultStatus('OK', 100, 'green', 'meets NeXus specification')
NOTE = ValidationResultStatus('NOTE', 75, 'palegreen', 'does not meet NeXus specification, but acceptable')
WARN = ValidationResultStatus('WARN', 25, 'yellow', 'does not meet NeXus specification, not generally acceptable')
ERROR = ValidationResultStatus('ERROR', VERY_BAD, 'red', 'violates NeXus specification')
TODO = ValidationResultStatus('TODO', 0, 'blue', 'validation not implemented yet')
UNUSED = ValidationResultStatus('UNUSED', 0, 'grey', 'optional NeXus item not used in data file')
COMMENT = ValidationResultStatus('COMMENT', 0, 'grey', 'comment from the punx source code')
OPTIONAL = ValidationResultStatus('OPTIONAL', 99, 'grey', 'allowed by NeXus specification, not identified')
VALID_STATUS_LIST = (OK, NOTE, WARN, ERROR, TODO, UNUSED, COMMENT, OPTIONAL)
VALID_STATUS_DICT = {str(f): f for f in VALID_STATUS_LIST}
"""dictionary (by names) of all available validations"""
TF_RESULT = {True: OK, False: ERROR}
# SHOW_ALL = VALID_STATUS_LIST
# SHOW_ERRORS = (ERROR, WARN)
# SHOW_NOT_OK = (WARN, ERROR, TODO, UNUSED)
[docs]class Finding(object):
"""
a single reported observation while validating
:param str h5_address: address of h5py item
:param str test_name: short description of the test
:param obj status: one of: OK NOTE WARN ERROR TODO COMMENT OPTIONAL UNUSED
:param str comment: description
"""
def __init__(self, h5_address, test_name, status, comment):
if status not in VALID_STATUS_LIST:
msg = 'unknown status value: ' + status
raise ValueError(msg)
self.test_name = str(test_name)
self.h5_address = h5_address
self.status = status
self.comment = comment
self.key = self.make_md5
def __str__(self, *args, **kwargs):
try:
s = str(self.status)
s += ' ' + self.h5_address
s += ': ' + self.test_name
s += ': ' + self.comment
return s
except Exception:
return object.__str__(self, *args, **kwargs)
[docs] def make_md5(self):
"""make a unique hash for this finding"""
h = hashlib.md5()
h.update(bytes(self.h5_address))
h.update(b"\n")
h.update(bytes(self.test_name))
return h.hexdigest()