o
    "i                  	   @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZ ejdkr:d dlmZmZmZmZ nd dlmZmZmZmZ ejdkrRd dlmZ nd dlmZ eded	ef d
ZG dd dZe Zd-dededdfddZd-dededdfddZd.ddZe jdd Zejdddd Zdedede fddZ!d-deded edefd!d"Z"deded#edefd$d%Z#d-de
e fd&d'Z$d(d) Z%d*edefd+d,Z&dS )/    N)defaultdict)AnyCallableDefaultDictListOptionalTupleTypeVar)      )FinalLiteral	TypedDict_TypedDictMeta)r
   
   )	TypeGuardF.)boundc                   @   s   e Zd ZU eeZeeef ed< eeZ	eeef ed< g Z
eeee ee ef  ed< dZdZdZdZdZdd Zdd	 Zejd
d ZdddZdddZdddZdeee ef fddZdededdfddZdddZdS )GeneratorStats_warn_cache_error_cache_tracesF c                 C   sB   d| j vrddlm} |j| _z| j | W S  ty    t|w )Nsilentr   )spectacular_settings)__dict__drf_spectacular.settingsr   DISABLE_ERRORS_AND_WARNINGSr   KeyErrorAttributeError)selfnamer    r"   ]/var/www/html/crm_dreinet/venv_linux/lib/python3.10/site-packages/drf_spectacular/drainage.py__getattr__"   s   
zGeneratorStats.__getattr__c                 C   s   t | jp| jS N)boolr   r   r    r"   r"   r#   __bool__+   s   zGeneratorStats.__bool__c                 c   s,    d| j | _ }z	d V  W || _ d S || _ w NT)r   )r    tmpr"   r"   r#   silence.   s
   zGeneratorStats.silencereturnNc                 C   s   | j   | j  d S r%   )r   clearr   r'   r"   r"   r#   reset6   s   
zGeneratorStats.resetc                 C   s   d| _ d| _d| _d| _d S )Nz[0;34mz[0;31mz[0;33mz[0m)_blue_red_yellow_clearr'   r"   r"   r#   enable_color:   s   
zGeneratorStats.enable_colorc                 C   s
   d| _ d S r)   )_trace_linenor'   r"   r"   r#   enable_trace_lineno@   s   
z"GeneratorStats.enable_trace_linenoc                 C   s\   dd | j D }|r|d \}}}|r| d| n|}nd}ddd | j D }||fS )	Nc                 S   s   g | ]}|d  r|qS )r   r"   .0tr"   r"   r#   
<listcomp>D   s    z5GeneratorStats._get_current_trace.<locals>.<listcomp>:r   z > c                 s   s    | ]}|d  V  qdS )   Nr"   r6   r"   r"   r#   	<genexpr>J   s    z4GeneratorStats._get_current_trace.<locals>.<genexpr>)r   join)r    source_locations
sourcefilelineno_source_locationbreadcrumbsr"   r"   r#   _get_current_traceC   s   z!GeneratorStats._get_current_tracemsgseverityc                 C   s   |dv sJ |dkr| j n| j}|  \}}|r | j | dnd}||dkr*| jn| j7 }||  7 }||r>d| dnd7 }|| j t| }| j	sX||vrXt
|tjd ||  d7  < d S )	N)warningerrorrH   z: r   z [z]: file   )r   r   rE   r/   r1   r0   
capitalizer2   strr   printsysstderr)r    rF   rG   cacherC   rD   prefixr"   r"   r#   emitM   s   zGeneratorStats.emitc              
   C   sf   | j s/| js	| jr1tdt| j  dt| j dt| j  dt| j d	tjd d S d S d S )Nz&
Schema generation summary:
Warnings: z (z unique)
Errors:   z	 unique)
rJ   )	r   r   r   rO   sumvalueslenrP   rQ   r'   r"   r"   r#   emit_summary\   s   
zGeneratorStats.emit_summaryr,   N)__name__
__module____qualname__r   intr   r   rN   __annotations__r   r   r   r   r   r4   r/   r0   r1   r2   r$   r(   
contextlibcontextmanagerr+   r.   r3   r5   rE   rT   rX   r"   r"   r"   r#   r      s&   
 "	




r   rF   delayedr,   c                 C   :   |rt |dg }||  t|d| d S t| d d S )NwarningsrH   get_overrideappendset_overrideGENERATOR_STATSrT   )rF   ra   rc   r"   r"   r#   warni   
   
ri   c                 C   rb   )NerrorsrI   rd   )rF   ra   rk   r"   r"   r#   rI   r   rj   rI   c                   C   s   t   d S r%   )rh   r.   r"   r"   r"   r#   reset_generator_stats{   s   rl   c                 c   s6    t | \}}tj||| jf dV  tj  dS )zR
    Adds a message to be used as a prefix when emitting warnings and errors.
    N)_get_source_locationrh   r   rf   rZ   popobjr@   rA   r"   r"   r#   add_trace_message   s
   rq   i  maxsizec                 C   sT   zt | }W n   d }Y ztjrt | d nd }W ||fS    d }Y ||fS )NrL   )inspectgetsourcefilerh   r4   getsourcelinesro   r"   r"   r#   rm      s   rm   rp   propc                 C   s2   t | tjr	| j} t| dsdS || jvrdS dS )N_spectacular_annotationFT)
isinstance	functoolspartialfunchasattrrx   )rp   rw   r"   r"   r#   has_override   s   

r~   defaultc                 C   s*   t | tjr	| j} t| |s|S | j| S r%   )ry   rz   r{   r|   r~   rx   )rp   rw   r   r"   r"   r#   re      s
   

re   valuec                 C   s6   t | ds	i | _nd| jvr| j | _|| j|< | S )Nrx   )r}   rx   r   copy)rp   rw   r   r"   r"   r#   rg      s   


rg   c                    s"    pj   fddtD S )Nc                    sR   g | ]%}t t|d r'|jv s%| j v s%|dks%tt|d dr|qS )Nlistmapping)callablegetattrhttp_method_namesmethod_mappingrV   r}   )r7   itemschemaviewr"   r#   r9      s    
z)get_view_method_names.<locals>.<listcomp>)r   dir)r   r   r"   r   r#   get_view_method_names   s   
r   c                    s^   t | | || jv r jdkr S t  fdd}t dr' j |_t| || |S )z
    Prevent modifying a view method which is derived from other views. Changes to
    a derived method would leak into the view where the method originated from.
    Break derivation by wrapping the method and explicitly setting it on the view.
    handlerc                    s    | |g|R i |S r%   r"   )r    requestargskwargsmethodr"   r#   wrapped_method   s   z+isolate_view_method.<locals>.wrapped_methodr   )	r   r   rZ   rz   wrapsr}   r   r   setattr)r   method_namer   r"   r   r#   isolate_view_method   s   

r   user_functionc                 C   s   t jdd| S )z" simple polyfill for python < 3.9 Nrr   )rz   	lru_cache)r   r"   r"   r#   rR      s   rR   r%   rY   )'r_   rz   rt   rP   collectionsr   typingr   r   r   r   r   r   r	   version_infor   r   r   r   typing_extensionsr   r   r   rh   rN   ri   rI   rl   r`   rq   r   rm   r&   r~   re   rg   r   r   rR   r"   r"   r"   r#   <module>   s8    $

O	
	




	