changeset 17:65f937fb8de7

Put the computation of the default problem severity into a new public function
author Franz Glasner <fzglas.hg@dom66.de>
date Fri, 07 Jul 2023 09:15:47 +0200
parents 2a9e7c4b717e
children 94daf3381338
files data_schema/__init__.py
diffstat 1 files changed, 21 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/data_schema/__init__.py	Fri Jul 07 02:33:28 2023 +0200
+++ b/data_schema/__init__.py	Fri Jul 07 09:15:47 2023 +0200
@@ -21,7 +21,7 @@
 __date__ = "|VCSJustDate|"
 
 __all__ = ["SEVERITY", "ERRORS", "WARNINGS",
-           "problem_message",
+           "problem_message", "problem_severity",
            "ValidationProblem", "SchemaError",
            "validate",
            "log_problem_cause"]
@@ -146,6 +146,12 @@
 
 
 def problem_message(pr):
+    """
+
+    :raises KeyError: the code in `pr` does not refer to
+                      :class:`.ERRORS` or `.WARNINGS`
+
+    """
     if isinstance(pr, ValidationProblem):
         code = getattr(pr, "code", None)
     elif isinstance(pr, (ERRORS, WARNINGS)):
@@ -158,6 +164,19 @@
     return code.value
 
 
+def problem_severity(pr):
+    """Get the default severity for error or warning code `pr`
+
+    :raises TypeError: if `pr` is not in :class:`.ERRORS` or :class:`.WARNINGS`
+
+    """
+    if pr in ERRORS:
+        return SEVERITY.ERROR
+    if pr in WARNINGS:
+        return SEVERITY.WARNING
+    raise TypeError("invalid error or warning code: %r" % (pr, ))
+
+
 class ValidationProblem(object):
 
     __slots__ = ("code", "severity", "hint", "context", "cause", "index")
@@ -177,13 +196,7 @@
                 "unknown validation error code: {}".format(code))
         self.code = code
         if severity is None:
-            # autodetermine
-            if code in ERRORS:
-                self.severity = SEVERITY.ERROR
-            elif code in WARNINGS:
-                self.severity = SEVERITY.WARNING
-            else:
-                assert False
+            self.severity = problem_severity(code)
         else:
             if not isinstance(severity, SEVERITY):
                 raise TypeError("invalid type for `severity'")