Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 6 additions & 55 deletions hed/errors/exceptions.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from hed.errors.error_types import ErrorContext


class HedExceptions:
Expand Down Expand Up @@ -34,60 +35,10 @@ def __init__(self, error_type, message, filename, issues=None):
self.error_type = error_type
self.message = message
self.filename = filename
# only filled in when this lists multiple errors, such as the HED_WIKI_DELIMITERS_INVALID or BAD_COLUMN_NAMES
self.issues = issues
if self.issues is None:
self.issues = []

def format_error_message(self, include_tabbing=True, return_string_only=False,
name=None):
"""This takes a HedFileError exception and translates it to human readable

Parameters
----------
include_tabbing : bool
Prefixes string with a tab if True
return_string_only : bool
If True, returns a string rather than an "error object"
name : str or None
Overrides the filename from the error if present.
This is useful on the web code and similar that deals with temporary filenames.
Returns
-------
error_list: [{}]
A list(of one) error formatted into a human readable dictionary.
"""
error_prefix = "ERROR: "
if include_tabbing:
error_prefix = "\t" + error_prefix

error_type, message, filename = self.error_type, self.message, self.filename
if name:
filename = name
error_types = {
HedExceptions.FILE_NOT_FOUND: f"{error_prefix}{message}. '{filename}'",
HedExceptions.INVALID_EXTENSION: f"{error_prefix}Invalid extension. '{filename}'",
HedExceptions.CANNOT_PARSE_XML: f"{error_prefix}Cannot parse schema XML: "
f"{message}. '{filename}'",
HedExceptions.CANNOT_PARSE_JSON: f"{error_prefix}Cannot parse json: {message}. '{filename}'",
HedExceptions.SCHEMA_HEADER_MISSING: f"{error_prefix}{self.message}. '{filename}'",
HedExceptions.HED_SCHEMA_HEADER_INVALID: f"{error_prefix}{self.message}. '{filename}'",
HedExceptions.BAD_HED_LIBRARY_NAME: f"{error_prefix}{self.message}. '{filename}'",
HedExceptions.HED_SCHEMA_VERSION_INVALID: f"{error_prefix}{self.message}. '{filename}'",
HedExceptions.SCHEMA_START_MISSING: f"{error_prefix}{self.message}. '{filename}'",
HedExceptions.SCHEMA_END_INVALID: f"{error_prefix}{self.message}. '{filename}'",
HedExceptions.HED_END_INVALID: f"{error_prefix}{self.message}. '{filename}'",
HedExceptions.INVALID_SECTION_SEPARATOR: f"{error_prefix}{self.message}. '{filename}'",
HedExceptions.HED_SCHEMA_NODE_NAME_INVALID: f"{error_prefix}{self.message}. '{filename}'",
HedExceptions.HED_WIKI_DELIMITERS_INVALID: f"{error_prefix}{self.message}. '{filename}'",
}
default_error_message = f'{error_prefix}Internal Error'
error_message = error_types.get(error_type, default_error_message)

error_object = {'code': error_type,
'message': error_message}

if return_string_only:
return error_object['message']

return [error_object]
self.issues = [
{'message': message,
ErrorContext.FILE_NAME: filename,
'error_code': error_type}
]
5 changes: 2 additions & 3 deletions tests/schema/test_hed_schema.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import unittest
import os

from hed.errors import HedFileError
from hed.errors import HedFileError, get_printable_issue_string
from hed.models import HedString, HedTag
from hed.schema import HedKey, HedSectionKey, get_hed_xml_version, load_schema, HedSchemaGroup, load_schema_version, HedSchema

Expand All @@ -25,13 +25,12 @@ def setUpClass(cls):

def test_name(self):
invalid_xml_file = "invalidxmlfile.xml"
name = "PrettyDisplayName.xml"
try:
load_schema(invalid_xml_file)
# We should have an error before we reach here.
self.assertTrue(False)
except HedFileError as e:
self.assertTrue(name in e.format_error_message(return_string_only=True, name=name))
self.assertTrue(invalid_xml_file in get_printable_issue_string(e.issues, skip_filename=False))

def test_tag_attribute(self):
test_strings = {
Expand Down