a
    þd—  ã                   @   s`   d dl mZmZ d dlmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZ	dS )é    )ÚHeadInstanceErrorÚSchemaError)Ú	JSONValuec                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú	Descenderz»Base class for descender classes.

    Descenders are similar to merge strategies, except that they only handle
    recursion into deeper schema structures and don't touch instances.
    c                 C   s   d S ©N© ©ÚselfÚwalkÚschemaÚbaseÚheadr   r   ú]/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/jsonmerge/descenders.pyÚdescend_instance   s    zDescender.descend_instancec                 C   s   d S r   r   ©r	   r
   r   r   r   r   Údescend_schema   s    zDescender.descend_schemaN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r      s   r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚRefc                 C   s   t dƒ| _d S )Nú#)ÚsetÚrefs_descended)r	   r   r   r   Ú__init__   s    zRef.__init__c                 C   s\   |j  d¡}|d u rd S |j |¡$}| t||ƒ||¡W  d   ƒ S 1 sN0    Y  d S )Nú$ref)ÚvalÚgetÚresolverÚ	resolvingÚdescendr   )r	   r
   r   r   r   ÚrefÚresolvedr   r   r   r      s
    zRef.descend_instancec                 C   s°   |j  d¡}|d u rd S || jv r&|S |j |¡r6|S | j |¡ |j |¡N}t||ƒ}| |d¡spt	d|ƒ‚| 
|¡}| ¡  | |j ¡ W d   ƒ n1 s¢0    Y  |S )Nr   Úobjectz"'$ref' does not point to an object)r   r   r   r   Zis_remote_refÚaddr   r   Zis_typer   r    ÚclearÚupdate)r	   r
   r   r!   r"   Z	rinstanceÚresultr   r   r   r      s     



*zRef.descend_schemaN)r   r   r   r   r   r   r   r   r   r   r      s   r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚOneOfc                 C   s,   |  d¡}| ¡ rdS |  d¡ ¡ s(dS dS )NÚoneOfFÚmergeStrategyT)r   Úis_undef)r	   r   Úone_ofr   r   r   Ú
do_descend8   s    
zOneOf.do_descendc                    s¨   |   |¡sd S | d¡}g }‡ fdd„}t|jƒD ].\}}	|||	ƒ}
|||	ƒ}|
r2|r2| |¡ q2t|ƒdkrxtd|ƒ‚t|ƒdkrŽtd|ƒ‚|d }ˆ  || ||¡S )Nr)   c                    s(   |   ¡ rdS tˆ jj | j|¡ƒ S d S )NT)r+   ÚlistZmergerZ	validatorZiter_errorsr   )Úvr   ©r
   r   r   Úis_validL   s    z(OneOf.descend_instance.<locals>.is_validr   z2No element of 'oneOf' validates both base and headé   z%Multiple elements of 'oneOf' validate)r-   r   Ú	enumerater   ÚappendÚlenr   r    )r	   r
   r   r   r   r,   Zvalidr1   ÚiZ	subschemaZ
base_validZ
head_validr   r0   r   r   D   s     





zOneOf.descend_instancec                 C   sB   |   |¡sd S | d¡}tt|jƒƒD ]}| || ¡||< q&|S )Nr)   )r-   r   Úranger5   r   r    )r	   r
   r   r,   r6   r   r   r   r   b   s    

zOneOf.descend_schemaN)r   r   r   r-   r   r   r   r   r   r   r(   7   s   r(   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
AnyOfAllOfc                 C   sH   |  d¡}|  d¡}| ¡ r(| ¡ r(d S |  d¡ ¡ s:d S td|ƒ‚d S )NÚallOfÚanyOfr*   z-Can't descend to 'allOf' and 'anyOf' keywords)r   r+   r   )r	   r   r9   r:   r   r   r   r    n   s    

zAnyOfAllOf.descendc                 C   s
   |   |¡S r   ©r    r   r   r   r   r   {   s    zAnyOfAllOf.descend_instancec                 C   s
   |   |¡S r   r;   r   r   r   r   r   ~   s    zAnyOfAllOf.descend_schemaN)r   r   r   r    r   r   r   r   r   r   r8   m   s   r8   N)
Zjsonmerge.exceptionsr   r   Zjsonmerge.jsonvaluer   r#   r   r   r(   r8   r   r   r   r   Ú<module>   s
   &6