509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    !ó’`#  ã                   @   s�   d dl mZ d dlmZ d dlmZmZmZmZm	Z	 eddƒZ
dd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZdi fdd„ZdS )é    )Úabsolute_import)Ú
namedtuple)Ú
_int_typesÚ	_str_typeÚMappingÚSequenceÚSetÚTypeDefinitionz"name,included_types,excluded_typesc                 C   s°   t t| ƒt|ƒƒ}| d |… |d |… kr6t| ƒ|kS t|ƒD ]h}| | ||  }}tttfD ]&}t||ƒr^t||ƒr| q†q^  dS q^||kr’q>q>||k r  dS  dS q>t‚d S )NTF)ÚminÚlenÚranger   r   ÚtupleÚ
isinstanceÚRuntimeError)ÚxÚyZ
min_lengthÚiÚaÚbZ_type© r   ú?/opt/alt/python38/lib/python3.8/site-packages/cerberus/utils.pyÚcompare_paths_lt   s     


r   c                 C   s   | d |… | |d d …  S )Né   r   )Útr   r   r   r   Údrop_item_from_tuple.   s    r   c                   C   s   dt ƒ krddlma tS )NÚ	Validatorr   )r   )ÚglobalsZcerberus.validatorr   r   r   r   r   Úget_Validator_class2   s    
r   c                 C   s   t t| ƒƒS ©N)ÚhashÚmapping_to_frozenset)Zschemar   r   r   Úmapping_hash9   s    r!   c                 C   s¢   i }|   ¡ D ]ˆ\}}t|tƒr,t|ƒ||< qt|tƒrtt|ƒ}t|ƒD ]\}}t|tƒrFt|ƒ||< qFt|ƒ||< qt|tƒrŒt	|ƒ||< q|||< qt	|  ¡ ƒS )zî
    Be aware that this treats any sequence type with the equal members as equal. As it
    is used to identify equality of schemas, this can be considered okay as definitions
    are semantically equal regardless the container type.
    )
Úitemsr   r   r    r   ÚlistÚ	enumerater   r   Ú	frozenset)ÚmappingZaggregationÚkeyÚvaluer   Úitemr   r   r   r    =   s    




r    c                 C   s   t | tƒrd|  S | S d S )Nz"%s")r   r   )r(   r   r   r   Úquote_stringW   s    
r*   c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )Úreadonly_classpropertyc                    s   t t| ƒ |¡S r   )Úsuperr+   Ú__get__)ÚselfÚinstanceÚowner©Ú	__class__r   r   r-   _   s    zreadonly_classproperty.__get__c                 C   s   t dƒ‚d S ©Nz"This is a readonly class property.©r   )r.   r/   r(   r   r   r   Ú__set__b   s    zreadonly_classproperty.__set__c                 C   s   t dƒ‚d S r3   r4   )r.   r/   r   r   r   Ú
__delete__e   s    z!readonly_classproperty.__delete__)Ú__name__Ú
__module__Ú__qualname__r-   r5   r6   Ú__classcell__r   r   r1   r   r+   ^   s   r+   Nc                 C   sv   t ƒ }|dkr|f}nt|tƒr,||f7 }n||f}dd„ |D ƒ}t|ƒdkrjd|krj| dd |¡i¡ t| ||ƒS )a  
    Dynamically create a :class:`~cerberus.Validator` subclass.
    Docstrings of mixin-classes will be added to the resulting class' one if ``__doc__``
    is not in :obj:`namespace`.

    :param name: The name of the new class.
    :type name: :class:`str`
    :param bases: Class(es) with additional and overriding attributes.
    :type bases: :class:`tuple` of or a single :term:`class`
    :param namespace: Attributes for the new class.
    :type namespace: :class:`dict`
    :return: The created class.
    Nc                 S   s   g | ]}|j r|j ‘qS r   )Ú__doc__)Ú.0r   r   r   r   Ú
<listcomp>€   s      z%validator_factory.<locals>.<listcomp>r   r;   Ú
)r   r   r   r   ÚupdateÚjoinÚtype)ÚnameÚbasesÚ	namespacer   Z
docstringsr   r   r   Úvalidator_factoryi   s    
rE   )Z
__future__r   Úcollectionsr   Zcerberus.platformr   r   r   r   r   r	   r   r   r   r!   r    r*   Úpropertyr+   rE   r   r   r   r   Ú<module>   s   
