o
    3h4                     @  s   U d Z ddlmZ ddlZddlmZmZmZm	Z	 ddl
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 d	d
lmZ erje	eedB ef  Zded< e	eee B eeef B eeeef B  Zded< G dd deZG dd dZdddZdS )z:Tools to provide pretty/human-readable display of objects.    )annotationsN)Callable
Collection	GeneratorIterable)TYPE_CHECKINGAny
ForwardRefcast)	TypeAlias)typing_objects)is_union_origin   )_typing_extrar   ReprArgsRichReprResultc                   @  s   e Zd ZdZdddZdS )	PlainReprzString class where repr doesn't include quotes. Useful with Representation when you want to return a string
    representation of something that is valid (or pseudo-valid) python.
    returnstrc                 C  s   t | S N)r   self r   S/var/www/html/chatgem/venv/lib/python3.10/site-packages/pydantic/_internal/_repr.py__repr__   s   zPlainRepr.__repr__Nr   r   )__name__
__module____qualname____doc__r   r   r   r   r   r      s    r   c                   @  s`   e Zd ZdZdddZdddZd ddZd!ddZd"ddZd#ddZ	dddZ
dddZdS )$Representationr   r   r   c                   sL   t tt  j}|st dr j } fdd|D } fdd|D S )a-  Returns the attributes to show in __str__, __repr__, and __pretty__ this is generally overridden.

        Can either return:
        * name - value pairs, e.g.: `[('foo_name', 'foo'), ('bar_name', ['b', 'a', 'r'])]`
        * or, just values, e.g.: `[(None, 'foo'), (None, ['b', 'a', 'r'])]`
        __dict__c                 3  s    | ]
}|t  |fV  qd S r   )getattr).0sr   r   r   	<genexpr>1   s    z/Representation.__repr_args__.<locals>.<genexpr>c                   s2   g | ]\}}|d ur|| ur|n  |fqS r   )__repr_recursion__r#   avr   r   r   
<listcomp>2   s   2 z0Representation.__repr_args__.<locals>.<listcomp>)r
   r   r   	__slots__hasattrr!   keys)r   attrs_namesattrsr   r   r   __repr_args__'   s
   
zRepresentation.__repr_args__r   c                 C  s   | j jS )z/Name of the instance's class, used in __repr__.)	__class__r   r   r   r   r   __repr_name__4   s   zRepresentation.__repr_name__objectr   c                 C  s   dt |j dt| dS )z8Returns the string representation of a recursive object.z<Recursion on z	 with id=>)typer   id)r   r3   r   r   r   r&   8   s   z!Representation.__repr_recursion__join_strc                 C  s   | dd |  D S )Nc                 s  s2    | ]\}}|d u rt |n| d|V  qd S )N=)reprr'   r   r   r   r%   >   s   0 z.Representation.__repr_str__.<locals>.<genexpr>)joinr0   )r   r7   r   r   r   __repr_str__=   s   zRepresentation.__repr_str__fmtCallable[[Any], Any]kwargsGenerator[Any]c                 k  s`    |   d V  dV  |  D ]\}}|dur|d V  ||V  dV  dV  qdV  dV  dS )	zRUsed by devtools (https://python-devtools.helpmanual.io/) to pretty print objects.(r   Nr8   ,r   ))r2   r0   )r   r<   r>   namevaluer   r   r   
__pretty__@   s   


zRepresentation.__pretty__r   c                 c  s2    |   D ]\}}|du r|V  q||fV  qdS )zYUsed by Rich (https://rich.readthedocs.io/en/stable/pretty.html) to pretty print objects.N)r0   )r   rD   
field_reprr   r   r   __rich_repr__M   s   zRepresentation.__rich_repr__c                 C  s
   |  dS )N )r;   r   r   r   r   __str__U   s   
zRepresentation.__str__c                 C  s   |    d| d dS )Nr@   , rC   )r2   r;   r   r   r   r   r   X   s   zRepresentation.__repr__N)r   r   r   )r3   r   r   r   )r7   r   r   r   )r<   r=   r>   r   r   r?   )r   r   )r   r   r   r+   r0   r2   r&   r;   rF   rH   rJ   r   r   r   r   r   r       s    






r    objr   r   r   c                 C  sN  t | tjtjfr| jS | du rdS t | trt| S t | ts%t	| r)t
| S t | tjtjtfs6| j} tt| rNdttt| }d| dS t | tjrtt| rhdttt| }ndttt| }z
| j d| dW S  ty   t
| ddd	d Y S w t | tr| jS t| ddd	dS )
zPretty representation of a type, should be as close as possible to the original type definition string.

    Takes some logic from `typing._type_repr`.
    .z...rK   zUnion[][ztyping. ztyping_extensions.)
isinstancetypesFunctionTypeBuiltinFunctionTyper   r    r9   r	   r   is_typealiastyper   r   typing_baseWithArgsTypesr5   r1   r   typing_extensions
get_originr:   mapdisplay_as_typeget_args
is_literalr   AttributeErrorreplace)rL   argsr   r   r   rZ   \   s2   

rZ   )rL   r   r   r   )r   
__future__r   _annotationsrQ   collections.abcr   r   r   r   typingr   r   r	   r
   rW   r   typing_inspectionr   typing_inspection.introspectionr   rO   r   tupler   r   __annotations__r   r   r    rZ   r   r   r   r   <module>   s     2	=