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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
from strictyaml.ruamel.error import MarkedYAMLError
from strictyaml.ruamel.dumper import RoundTripDumper
from strictyaml.ruamel import dump
try:
from strictyaml.ruamel.error import Mark as StringMark
except ImportError:
from strictyaml.ruamel.error import StringMark
class StrictYAMLError(MarkedYAMLError):
pass
class InvalidValidatorError(StrictYAMLError):
pass
class CannotBuildDocumentFromInvalidData(StrictYAMLError):
pass
class CannotBuildDocumentsFromEmptyDictOrList(StrictYAMLError):
pass
class YAMLSerializationError(StrictYAMLError):
pass
class InvalidOptionalDefault(YAMLSerializationError):
pass
class YAMLValidationError(StrictYAMLError):
def __init__(self, context, problem, chunk):
self.context = context
self.problem = problem
self._chunk = chunk
self.note = None
@property
def context_mark(self):
context_line = self._chunk.start_line() - 1
str_document = dump(self._chunk.whole_document, Dumper=RoundTripDumper)
context_index = len("\n".join(str_document.split("\n")[:context_line]))
return StringMark(
self._chunk.label,
context_index,
context_line,
0,
str_document,
context_index + 1,
)
@property
def problem_mark(self):
problem_line = self._chunk.end_line() - 1
str_document = dump(self._chunk.whole_document, Dumper=RoundTripDumper)
problem_index = len("\n".join(str_document.split("\n")[:problem_line]))
return StringMark(
self._chunk.label,
problem_index,
problem_line,
0,
str_document,
problem_index + 1,
)
class DisallowedToken(StrictYAMLError):
MESSAGE = "Disallowed token"
class TagTokenDisallowed(DisallowedToken):
MESSAGE = "Tag tokens not allowed"
class FlowMappingDisallowed(DisallowedToken):
MESSAGE = "Flow mapping tokens not allowed"
class AnchorTokenDisallowed(DisallowedToken):
MESSAGE = "Anchor tokens not allowed"
class DuplicateKeysDisallowed(DisallowedToken):
MESSAGE = "Duplicate keys not allowed"
class InconsistentIndentationDisallowed(DisallowedToken):
MESSAGE = "Inconsistent indentation not allowed"
def raise_type_error(yaml_object, to_type, alternatives):
raise TypeError(
("Cannot cast {0} to {1}.\n" "Use {2} instead.").format(
repr(yaml_object), to_type, alternatives
)
)
|