1import re 
    2 
    3 
    4SPLIT_RE = re.compile(r'[\.\[\]]+') 
    5 
    6 
    7class JsonSchemaException(ValueError): 
    8    """ 
    9    Base exception of ``fastjsonschema`` library. 
    10    """ 
    11 
    12 
    13class JsonSchemaValueException(JsonSchemaException): 
    14    """ 
    15    Exception raised by validation function. Available properties: 
    16 
    17     * ``message`` containing human-readable information what is wrong (e.g. ``data.property[index] must be smaller than or equal to 42``), 
    18     * invalid ``value`` (e.g. ``60``), 
    19     * ``name`` of a path in the data structure (e.g. ``data.property[index]``), 
    20     * ``path`` as an array in the data structure (e.g. ``['data', 'property', 'index']``), 
    21     * the whole ``definition`` which the ``value`` has to fulfil (e.g. ``{'type': 'number', 'maximum': 42}``), 
    22     * ``rule`` which the ``value`` is breaking (e.g. ``maximum``) 
    23     * and ``rule_definition`` (e.g. ``42``). 
    24 
    25    .. versionchanged:: 2.14.0 
    26        Added all extra properties. 
    27    """ 
    28 
    29    def __init__(self, message, value=None, name=None, definition=None, rule=None): 
    30        super().__init__(message) 
    31        self.message = message 
    32        self.value = value 
    33        self.name = name 
    34        self.definition = definition 
    35        self.rule = rule 
    36 
    37    @property 
    38    def path(self): 
    39        return [item for item in SPLIT_RE.split(self.name) if item != ''] 
    40 
    41    @property 
    42    def rule_definition(self): 
    43        if not self.rule or not self.definition: 
    44            return None 
    45        return self.definition.get(self.rule) 
    46 
    47 
    48class JsonSchemaDefinitionException(JsonSchemaException): 
    49    """ 
    50    Exception raised by generator of validation function. 
    51    """