U ���`�G � @ s� d dl mZ d dlmZ d dlmZ d dlmZmZm Z m Z mZmZ d dl mZmZmZmZ G dd� de�ZG dd � d e�ZG d d� de�ZG dd � d e�ZG dd� de�ZG dd� de�ZG dd� de�ZG dd� de�ZG dd� de�Ze� e� ZZdS )� )�absolute_import)�warn)�errors)� _str_type�Callable�Hashable�Mapping�MutableMapping�Sequence)�get_Validator_class�validator_factory�mapping_hash�TypeDefinitionc @ s e Zd ZdS )�_AbortN)�__name__� __module__�__qualname__� r r �@/opt/alt/python38/lib/python3.8/site-packages/cerberus/schema.pyr s r c @ s e Zd ZdZdS )�SchemaErrorz_ Raised when the validation schema is missing, has the wrong format or contains errors.N)r r r �__doc__r r r r r s r c s� e Zd ZdZ� fdd�Zdd� Zdd� Zdd � Zd d� Zdd � Z dd� Z dd� Zdd� Zdd� Z edd� �Zedd� �Zedd� �Zd+dd�Zdd � Zd!d"� Zed#d$� �Zd%d&� Zd,d'd(�Zd)d*� Z� ZS )-�DefinitionSchemaz1A dict-subclass for caching of validated schemas.c sX dt � krHtdt�atj�� }|�tdtfd�tdt fd�d�� |t_t t| ��| �S )N�SchemaValidator�callabler �hashable)r r ) �globalsr �SchemaValidatorMixinr � types_mapping�copy�updater r r �superr �__new__)�cls�args�kwargsr �� __class__r r r! % s ��zDefinitionSchema.__new__c C s� t |t� �std��|| _t |t�r2|j�||�}t |t�snzt|�}W n$ t k rl t tj� |���Y nX t|�| _td| jtj||d�| _| �|�}| �|� || _dS )z� :param validator: An instance of Validator-(sub-)class that uses this schema. :param schema: A definition-schema as ``dict``. Defaults to an empty one. z0validator argument must be a Validator-instance.N)� allow_unknownZ error_handler� target_schema�target_validator)� isinstancer �RuntimeError� validatorr �schema_registry�getr �dict� Exceptionr r �SCHEMA_ERROR_DEFINITION_TYPE�format�SchemaValidationSchema�validation_schemar ZSchemaErrorHandler�schema_validator�expand�validate�schema)�selfr, r8 r r r �__init__4 s* � zDefinitionSchema.__init__c C sf | j �� }z ||= W nD tk r4 td| ��Y n. tk rX } z|�W 5 d }~X Y n X | j |= d S )Nz Schema has no field '%s' defined)r8 r � ValueErrorr r0 )r9 �key�_new_schema�er r r �__delitem__U s zDefinitionSchema.__delitem__c C s | j | S �N)r8 )r9 �itemr r r �__getitem__` s zDefinitionSchema.__getitem__c C s t | j�S r@ )�iterr8 �r9 r r r �__iter__c s zDefinitionSchema.__iter__c C s t | j�S r@ )�lenr8 rD r r r �__len__f s zDefinitionSchema.__len__c C s t | �S r@ )�strrD r r r �__repr__i s zDefinitionSchema.__repr__c C s. | � d|i�d }| �||i� || j|<