File: validation.py

package info (click to toggle)
python-a38 0.1.8-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 440 kB
  • sloc: python: 4,065; xml: 174; makefile: 80; sh: 14
file content (56 lines) | stat: -rw-r--r-- 1,942 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from typing import List, Optional, Sequence, Union

from . import fields
from .traversal import Annotation, Traversal


class ValidationError(Annotation):
    def __init__(self, prefix: Optional[str], field: "fields.Field", msg: str, code: str = None):
        self.prefix = prefix
        self.field = field
        self.msg = msg
        self.code = code

    def __str__(self):
        if self.code is not None:
            return "{}: [{}] {}".format(self.qualified_field, self.code, self.msg)
        else:
            return "{}: {}".format(self.qualified_field, self.msg)


Fields = Union["fields.Field", Sequence["fields.Field"]]


class Validation(Traversal):
    def __init__(self,
                 prefix: Optional[str] = None,
                 warnings: Optional[List[ValidationError]] = None,
                 errors: Optional[List[ValidationError]] = None):
        super().__init__(prefix)
        self.warnings: List[ValidationError]
        self.errors: List[ValidationError]
        if warnings is None:
            self.warnings = []
        else:
            self.warnings = warnings
        if errors is None:
            self.errors = []
        else:
            self.errors = errors

    def with_prefix(self, prefix: str):
        return Validation(prefix, self.warnings, self.errors)

    def add_warning(self, field: Fields, msg: str, code: str = None):
        if isinstance(field, fields.Field):
            self.warnings.append(ValidationError(self.prefix, field, msg, code))
        else:
            for f in field:
                self.warnings.append(ValidationError(self.prefix, f, msg, code))

    def add_error(self, field: Fields, msg: str, code: str = None):
        if isinstance(field, fields.Field):
            self.errors.append(ValidationError(self.prefix, field, msg, code))
        else:
            for f in field:
                self.errors.append(ValidationError(self.prefix, f, msg, code))