a
    0hW$                     @  s   d Z ddlmZ 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 ddlmZ e ZedZeeZdZd	Zd
ddddZefd
ddddZG dd dZe Zdd
dddddZd!ddddddddZG dd  d ZdS )"zObject representations for debugging purposes. Unlike the default
repr, these expose more information and produce HTML instead of ASCII.

Together with the CSS and JavaScript of the debugger this gives a
colorful and more compact output.
    )annotationsN)deque)format_exception_only)escapez(?:\r\n|\r|\n){2,}zL<div class=box>
  <h3>%(title)s</h3>
  <pre class=help>%(text)s</pre>
</div>zQ<div class=box>
  <h3>%(title)s</h3>
  %(repr)s
  <table>%(items)s</table>
</div>objectstrobjreturnc                 C  s   t  | S )z1Creates a debug repr of an object as HTML string.)DebugReprGeneratorrepr)r	    r   A/var/www/auris/lib/python3.9/site-packages/werkzeug/debug/repr.py
debug_repr&   s    r   Nonec                 C  s<   t  }| tu r"|tdj}n
|| }tj| dS )zdPrint the object details to stdout._write (for the interactive
    console of the web debugger.
       N)	r   missingdump_localssys	_getframef_localsdump_objectstdout_write)r	   genrvr   r   r   dump+   s
    
r   c                   @  s0   e Zd ZdZddddZdddd	d
dZdS )_HelperzDisplays an HTML version of the normal help, for the interactive
    debugger only because it requires a patched sys.stdout.
    r   r
   c                 C  s   dS )Nz(Type help(object) for help about object.r   selfr   r   r   __repr__<   s    z_Helper.__repr__Nzt.Any | Noner   )topicr
   c                 C  s   |d u r t jd| d d S dd l}|| t j }t|}t|dkrn|d }d	|dd  }nd}|d }t jt
||d  d S )Nz<span class=help></span>r   r   z

ZHelp)titletext)r   r   r   pydochelpreset_paragraph_resplitlenjoin	HELP_HTML)r    r"   r&   r   Z
paragraphsr$   r%   r   r   r   __call__?   s    


z_Helper.__call__)N)__name__
__module____qualname____doc__r!   r.   r   r   r   r   r   7   s   r   ztype | tuple[type, ...])innerr	   baser
   c                 C  st   t |tr*|D ]}t||u r|   S qnt||u r:| S d}|jjdvrZd|jj d}| t|j d|  dS )N )__builtin__
exceptionsz<span class="module">z.</span>())
isinstancetupletype	__class__r0   r/   )r3   r	   r4   clsmoduler   r   r   _add_subclass_infoT   s    
r@      r<   intz>t.Callable[[DebugReprGenerator, t.Iterable[t.Any], bool], str])leftrightr4   limitr
   c                   s"   ddddd fdd}|S )Nr   zt.Iterable[t.Any]boolr   )r    r	   	recursiver
   c                   s   |rt  d | S g}d}t|D ]<\}}|rB|d |krX|d d}|| | q,|rx|d | t d|| S )Nz...F, <span class="extended">Tr#   r5   )r@   	enumerateappendr   r,   )r    r	   rG   bufhave_extended_sectionidxitemr4   rC   rE   rD   r   r   proxyd   s    



z#_sequence_repr_maker.<locals>.proxyr   )rC   rD   r4   rE   rQ   r   rP   r   _sequence_repr_makera   s    rR   c                   @  s  e Zd ZddddZeddeZeddeZed	d
e	Z
edd
eZedd
eZdddddZd5ddddddZd6dddddddZddddd Zdddd!d"d#Zddd$d%Zd&ddd'd(Zd&ddd)d*Zd+dd,d-d.Zd7d0dd1dd2d3d4Zd/S )8r   r   r   c                 C  s
   g | _ d S )N)_stackr   r   r   r   __init__y   s    zDebugReprGenerator.__init__[]r8   r9   zset([z])zfrozenset([z/<span class="module">collections.</span>deque([zt.Pattern[t.AnyStr]r   r   c                 C  s.   t |j}t|dd}d| }d| dS )Nzunicode-escapeignorerz&re.compile(<span class="string regex">z</span>))r   patterncodecsdecode)r    r	   rY   r   r   r   
regex_repr   s    

zDebugReprGenerator.regex_reprF   zstr | bytesrB   )r	   rE   r
   c                 C  s   dg}t |}t|| dkrJ|t|d | dt||d  df n|t| |d d|}|d dv s|d dkr|d	 dv rt||ttfS |S )
Nz<span class="string">   rI   r#   r5   r   z'"br   )	r   r+   extendr   rK   r,   r@   bytesr   )r    r	   rE   rL   rX   outr   r   r   string_repr   s     	

$zDebugReprGenerator.string_repr   z7dict[int, None] | dict[str, int] | dict[str | int, int]rF   )drG   rE   r
   c           	   	   C  s   |rt d|tS dg}d}t| D ]X\}\}}|r@|d ||d krZ|d d}|d| | d	| | d
 q&|r|d |d t d||tS )Nz{...}{FrH   r   rI   Tz%<span class="pair"><span class="key">z</span>: <span class="value">z</span></span>r#   }r5   )r@   dictrJ   itemsrK   r   r,   )	r    re   rG   rE   rL   rM   rN   keyvaluer   r   r   	dict_repr   s&    



zDebugReprGenerator.dict_reprzt.Anyc                 C  s   t |}dt| dS )Nz<span class="object">r#   )r   r   )r    r	   rX   r   r   r   object_repr   s    zDebugReprGenerator.object_repr)r	   rG   r
   c                 C  s   |t u rdt dS t|tttfr0d|dS t|tsDt|trN| |S t|trb| 	|S t|t
rx| ||S t|tr| ||S t|tr| ||S t|tr| ||S t|tr| ||S t|tr| ||S | |S )Nz<span class="help">r#   z<span class="number">)helperr:   rB   floatcomplexr   ra   rc   	RegexTyper\   list	list_reprr;   
tuple_reprsetset_repr	frozensetfrozenset_reprrh   rl   r   
deque_reprrm   )r    r	   rG   r   r   r   dispatch_repr   s*    








z DebugReprGenerator.dispatch_reprc                 C  sJ   zd tt d d  }W n ty4   d}Y n0 dt|  dS )Nr5   r^   ?z*<span class="brokenrepr">&lt;broken repr (z)&gt;</span>)r,   r   r   exc_info	Exceptionr   strip)r    infor   r   r   fallback_repr   s    

z DebugReprGenerator.fallback_reprr   c                 C  s   d}| j D ]}||u r
d} q q
| j | zPz| ||W W | j   S  tyn   |   Y W | j   S 0 W | j   n| j   0 d S )NFT)rS   rK   rz   popr}   r   )r    r	   rG   rO   r   r   r   r      s     


zDebugReprGenerator.reprc              	   C  s   d }d }t |trRd}g }| D ].\}}t |ts<d } qR||| |f q"|d u rg }| |}t|D ]6}z||| t||f W qp ty   Y qp0 qpd}|dt	
|dd  7 }| |||S )NzContents ofzDetails for r   )r:   rh   ri   r   rK   r   dirgetattrr}   r   r!   render_object_dump)r    r	   r   ri   r$   rj   rk   r   r   r   r      s*    


zDebugReprGenerator.dump_objectzdict[str, t.Any])re   r
   c                   s"    fdd|  D } |dS )Nc                   s   g | ]\}}|  |fqS r   )r   ).0rj   rk   r   r   r   
<listcomp>      z2DebugReprGenerator.dump_locals.<locals>.<listcomp>zLocal variables in frame)ri   r   )r    re   ri   r   r   r   r   
  s    zDebugReprGenerator.dump_localsNzlist[tuple[str, str]]z
str | None)ri   r$   r   r
   c                 C  sf   g }|D ]$\}}| dt| d| d q|s<| d tt|d|rN|nd dd|d S )	Nz<tr><th>z<td><pre class=repr>z</pre>z<tr><td><em>Nothing</em>z<pre class=repr>r5   
)r$   r   ri   )rK   r   OBJECT_DUMP_HTMLr,   )r    ri   r$   r   Z
html_itemsrj   rk   r   r   r   r     s    
z%DebugReprGenerator.render_object_dump)r]   )rd   )N)r/   r0   r1   rT   rR   rr   rs   r;   rt   ru   rv   rw   rx   r   ry   r\   rc   rl   rm   rz   r   r   r   r   r   r   r   r   r   r   x   s(    
 r   )rA   )r2   
__future__r   rZ   rer   typingtcollectionsr   	tracebackr   Z
markupsafer   r   r   compiler)   r<   rq   r-   r   r   r   r   rn   r@   rR   r   r   r   r   r   <module>   s*   
	 