a
    iji8                     @  s~  U 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Zddl	Z	ddl
mZmZmZmZmZmZmZ ddlZddlmZ ddlmZ ddlmZ edZi Zd	ed
< ejG dd dZejG dd deZejG dd deZejG dd deZ ejG dd deee Z!ejG dd de!ee"e#e$e%e&df  Z'ejG dd de!ej(j) Z*ejG dd de!ej(j+ Z,ejG dd de!ee-e.f  Z/ejG dd de!edef  Z0ejG d d! d!e!ej
j1 Z2ejG d"d# d#e!ee  Z3ejG d$d% d%e!ej4 Z5d&d'd(d)d*d+d,d-Z6d&d.d*d)d*d/d0d1Z7d2d3d4d5d6Z8d2d*d4d7d8Z9d2d*d4d9d:Z:dS );z HTML builder for Python objects.    )annotationsN)AnyCallableClassVarGenericTypeTypeVarUnion)enp)attrs)html_helper_Tzdict[str, Node]
_ALL_NODESc                   @  s   e Zd ZU dZejddZded< dd Ze	dd dd	d
Z
e	ddddddddZeddddZeddddZdddddddZdS )NodezNode base class.

  Each node correspond to a `<li>` element in the nested tree. When the node
  is expanded, `inner_html` is add the child nodes.

  Attributes:
    id: HTML id used to identify the node.
  F)initstridc                 C  s   t t | _| t| j< d S N)r   uuiduuid1r   r   self r   Y/home/ghrups/robot-bench/.venv/lib/python3.9/site-packages/etils/ecolab/inspects/nodes.py__post_init__7   s    zNode.__post_init__)id_returnc                 C  s   t | S )z)Returns the cached node from the HTML id.)r   )clsr   r   r   r   from_id<   s    zNode.from_id nameobject
ObjectNode)objr!   r   c             	   C  sH   t ttttttttf	D ]}t	||j
r q<qtd|d|||dS )z"Factory of a node from any object.zUnexpected object .)r$   r!   )BuiltinNodeFnNodeMappingNodeSequenceNodeSetNodeClsNode	ArrayNodeExceptionNoder#   
isinstanceMATCH_TYPES	TypeError)r   r$   r!   Zsub_clsr   r   r   from_objA   s    zNode.from_objr   c                 C  s   t dS )z`<li>` one-line content.NNotImplementedErrorr   r   r   r   header_htmlV   s    zNode.header_htmlc                 C  s   t dS )z(Inner content when the item is expanded.Nr3   r   r   r   r   
inner_html[   s    zNode.inner_htmlT	clickableboolzCallable[..., str])r8   r   c                  s    |r
d nd  fdd}|S )z,`<li>` section, called inside `header_html`.zregister-onclick-expandzcaret-invisiblec                    s"   t jjdt jd gd|  S )N)r   caretclass_)HZlir   span)contentr<   r   r   r   applyg   s    zNode._li.<locals>.applyr   )r   r8   rA   r   r@   r   _li`   s
    zNode._liN)__name__
__module____qualname____doc__dataclassesfieldr   __annotations__r   classmethodr   r1   propertyr5   r6   rB   r   r   r   r   r   *   s   
	r   c                   @  sF   e Zd ZU dZded< ded< eddddZeddd	d
ZdS )SubsectionNodezExpandable subsection of an object (to group object attributes).

  Example: `[[Methods]]`,...

  ```
  > obj:
    > ...
    > [[Methods]]
      > ...
    > [[Special attributes]]
      > ...
  ```
  r   r!   
list[Node]childrenr2   c                 C  s$   |   tjdgdd| j dS )Npreviewr;   z[[z]])rB   r=   r>   r!   r   r   r   r   r5      s    zSubsectionNode.header_htmlc                 C  s"   dd | j D }tjdgd| S )Nc                 S  s   g | ]
}|j qS r   r5   .0cr   r   r   
<listcomp>       z-SubsectionNode.inner_html.<locals>.<listcomp>collapsibler;   rN   r=   Zulr   rN   r   r   r   r6      s    zSubsectionNode.inner_htmlNrC   rD   rE   rF   rI   rK   r5   r6   r   r   r   r   rL   n   s   
rL   c                   @  s,   e Zd ZU dZded< eddddZdS )HtmlNodez4Simple non clickable node that only displaying HTML.r   htmlr2   c                 C  s   | j dd| jS )NFr7   )rB   r[   r   r   r   r   r5      s    zHtmlNode.header_htmlN)rC   rD   rE   rF   rI   rK   r5   r   r   r   r   rZ      s   
rZ   c                   @  sF   e Zd ZU dZded< ded< eddddZeddd	d
ZdS )
KeyValNodez$The (k, v) items for `list`, `dict`.r"   keyvaluer   r2   c                 C  s0   t | jtj}| j| dt| jdt| jS )Nr7   : )r.   r^   r&   r/   rB   _obj_html_reprr]   )r   
is_builtinr   r   r   r5      s    zKeyValNode.header_htmlc                 C  s   t | jjS r   )r   r1   r^   r6   r   r   r   r   r6      s    zKeyValNode.inner_htmlNrY   r   r   r   r   r\      s   
r\   c                   @  s   e Zd ZU dZded< ded< eZded< eddd	d
ZeddddZ	eddddZ
eddddZeddddZeddddZdS )r#   zAny Python objects.r   r$   r   r!   z+ClassVar[type[Any] | tuple[type[Any], ...]]r/   r2   c                 C  sD   | j rd}n| j d}| j| j dtjdgd| | j S )Nr   r_   r7   zkey-mainr;   )is_rootr!   rB   is_leafr=   r>   header_repr)r   prefixr   r   r   r5      s    zObjectNode.header_htmlc                 C  s"   dd | j D }tjdgd| S )Nc                 S  s   g | ]
}|j qS r   rP   rQ   r   r   r   rT      rU   z)ObjectNode.inner_html.<locals>.<listcomp>rV   r;   rW   rX   r   r   r   r6      s    zObjectNode.inner_htmlrM   c                 C  s   dd t | j D }g }g }g }g }|D ]`}|jdrV|jdrV|| q.|jdrn|| q.t|t	r|| q.|| q.|}|r|t
|dd |r|t
|dd |r|t
|dd |S )	zExtract all attributes.c                 S  s   g | ]\}}t j||d qS )r    r   r1   rR   kvr   r   r   rT      s   z'ObjectNode.children.<locals>.<listcomp>___ZMethodsrN   r!   ZPrivatezSpecial attributes)r   Z	get_attrsr$   itemsr!   
startswithendswithappendr.   r'   rL   )r   rN   Zmagic_attrsZfn_attrsZprivate_attrsZ	val_attrsrS   r   r   r   rN      s2    

zObjectNode.childrenc                 C  s
   t | jS r   )r`   r$   r   r   r   r   rd      s    zObjectNode.header_reprr9   c                 C  s   t | j S )z(Returns `True` if the node is top-level.)r9   r!   r   r   r   r   rb      s    zObjectNode.is_rootc                 C  s   dS )z3Returns `True` if the node cannot be recursed into.Fr   r   r   r   r   rc      s    zObjectNode.is_leafN)rC   rD   rE   rF   rI   r"   r/   rK   r5   r6   rN   rd   rb   rc   r   r   r   r   r#      s    
	!r#   c                   @  s<   e Zd ZdZedeeeee	edfZ
eddddZdS )r&   z"`int`, `float`, `bytes`, `str`,...N.r9   r2   c                 C  s   | j  S r   )rb   r   r   r   r   rc      s    zBuiltinNode.is_leaf)rC   rD   rE   rF   typeintfloatr9   r   bytesr/   rK   rc   r   r   r   r   r&      s   r&   c                      s6   e Zd ZdZeejjfZe	dd fddZ
  ZS )r(   z`dict` like.rM   r2   c                   s   dd | j  D t j S )Nc                 S  s   g | ]\}}t ||d qS )r]   r^   r\   rg   r   r   r   rT     s   z(MappingNode.children.<locals>.<listcomp>)r$   rm   superrN   r   	__class__r   r   rN     s
    zMappingNode.children)rC   rD   rE   rF   dictcollectionsabcMappingr/   rK   rN   __classcell__r   r   rx   r   r(     s   r(   c                      s8   e Zd ZdZeeejjfZ	e
dd fddZ  ZS )r*   z`set` like.rM   r2   c                   s   dd | j D t j S )Nc                 S  s   g | ]}t t||d qS ru   )r\   r   )rR   ri   r   r   r   rT     rU   z$SetNode.children.<locals>.<listcomp>)r$   rw   rN   r   rx   r   r   rN     s    zSetNode.children)rC   rD   rE   rF   set	frozensetr{   r|   Setr/   rK   rN   r~   r   r   rx   r   r*     s   r*   c                      s2   e Zd ZdZeefZedd fddZ  Z	S )r)   z`list` like.rM   r2   c                   s   dd t | jD t j S )Nc                 S  s   g | ]\}}t ||d qS ru   rv   )rR   iri   r   r   r   rT   &  s   z)SequenceNode.children.<locals>.<listcomp>)	enumerater$   rw   rN   r   rx   r   r   rN   $  s
    zSequenceNode.children)
rC   rD   rE   rF   listtupler/   rK   rN   r~   r   r   rx   r   r)     s   r)   c                
      sh   e Zd ZdZejejejejej	ej
ejejejejf
ZeddddZedd fddZ  ZS )	r'   z	Function.r   r2   c                 C  s
   t | jS r   )_fn_html_reprr$   r   r   r   r   rd   <  s    zFnNode.header_reprrM   c                   s   t | jt j S r   )_fn_childrenr$   rw   rN   r   rx   r   r   rN   @  s    zFnNode.children)rC   rD   rE   rF   typesFunctionTypeBuiltinFunctionTypeBuiltinMethodType
MethodTypeMethodDescriptorTypeClassMethodDescriptorTypeMemberDescriptorTypeWrapperDescriptorTypeMethodWrapperType	functoolspartialr/   rK   rd   rN   r~   r   r   rx   r   r'   +  s    r'   .c                      s2   e Zd ZdZejjZedd fddZ	  Z
S )r,   zArray.rM   r2   c                   s   t t| jddgt j S )NTarray_values)rZ   r`   r$   rw   rN   r   rx   r   r   rN   P  s    zArrayNode.children)rC   rD   rE   rF   r
   lazy	LazyArrayr/   rK   rN   r~   r   r   rx   r   r,   H  s   r,   c                      s.   e Zd ZdZeZedd fddZ  ZS )r+   zType.rM   r2   c                   sT   t | jtr*| jjtju r*| j| j}n
| j }t jtdd |D ddg S )Nc                 S  s   g | ]}t |qS r   rf   )rR   r   r   r   r   rT   i  rU   z$ClsNode.children.<locals>.<listcomp>mrorl   )r.   r$   rq   r   rw   rN   rL   )r   r   rx   r   r   rN   `  s    
zClsNode.children)	rC   rD   rE   rF   rq   r/   rK   rN   r~   r   r   rx   r   r+   X  s   r+   c                   @  s(   e Zd ZdZejZeddddZdS )r-   z
Exception.r9   r2   c                 C  s   dS )NTr   r   r   r   r   rc   w  s    zExceptionNode.is_leafN)	rC   rD   rE   rF   r   ExceptionWrapperr/   rK   rc   r   r   r   r   r-   o  s   r-   Fr   r"   r9   r   )r$   r   r   c             
   C  s@  t | tdrd} nt | tdr*d}nt | ttfr>d}nt | trNd}nt | trjd}t| dd} nt | trd}tt| } n|st | t	j
jrd}t	j| } nft | tjrd	}| j} nNd
}zt| } W n4 ty } ztt|W  Y d}~S d}~0 0 t| } t | ts.t| } t| } tj|gd| S )z"Returns the object representation.Nnull.numberbooleanstringTexpand_new_lineserrorrO   r;   )r.   rq   rr   rs   r9   r   _truncate_long_strrt   reprr
   r   r   Z	ArraySpecZ
from_arrayr   r   e	Exceptionr`   r[   escaper=   r>   )r$   r   type_r   r   r   r   r`   |  s<    


$
r`   r   )r^   r   r   c                C  s   t | } |rt| }n| }t|dkr|rB|d |  |d  }n| }tjdgdtjdgd|dd tjdd	gdd
 tjdd	gd|S |S dS )zTruncate long strings.P   r   zcontent-switchr;   zcontent-version-shortNzcontent-switch-expandzregister-onclick-switch...zcontent-version-long)r[   r   r   lenr=   r>   )r^   r   Zshort_valueZ
long_valuer   r   r   r     s.    


r   zCallable[..., Any]rM   )fnr   c           	      C  s  g }z
| j }W n ty    Y n0 |r8|tt| ztj| }W n tyZ   Y n0 |j	 D ]}|j
}|jtjjkrd| }n|jtjjkrd| }tjdgd|}|jtjju rd}ndt|j }|jtjju rd}ndt|j }t|| | }|| qf|S )zBuild the fn children.***rO   r;   r   r_   z = )rF   r   rp   rZ   r`   inspect	Signaturefrom_callable
parametersvaluesr!   kind	ParameterVAR_POSITIONALVAR_KEYWORDr=   r>   
annotationemptydefault)	r   rN   docsigparamr!   r   r   noder   r   r   r     s6    

r   c                 C  s   zt j| }W n ty$   Y dS 0 g }d}d}|j D ]~}|sN|d d}|jt jj	krp|d d}n>|jt jj
kr|d d}n |jt jjkr|sd}|d ||j q<d|S )	6Constructs the signature representation of a function.r   TFz, r   r   z*, r   )r   r   r   r   r   r   rp   r   r   r   r   KEYWORD_ONLYr!   join)r   r   partsZis_firstZis_kwarg_onlyr   r   r   r   _fn_signature_repr  s,    



r   c                 C  s|   t | tjrt| S z
| j}W n ty8   t|  Y S 0 | dt|  d}t|}tj	dddd tj	dgd| S )r   ()r   r;   u   ƒ rO   )
r.   r   r   r`   rE   r   r   r   r=   r>   )r   fn_nameZsig_strr   r   r   r     s    
r   );rF   
__future__r   collections.abcr{   rG   r   r[   r   r   typingr   r   r   r   r   r   r	   r   Zetilsr
   Zetils.ecolab.inspectsr   r   r=   r   r   rI   	dataclassr   rL   rZ   r\   r#   rr   rs   r9   r   rt   r&   r|   r}   r(   r   r*   r   r   r)   r'   ZArrayr,   r+   r   r-   r`   r   r   r   r   r   r   r   r   <module>   sZ   $C
H&
$"(