o
    i6                     @  s   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 d dl	m
Z
mZmZ ddlmZmZmZ ddlmZ G d	d
 d
ZeddZed dZdS )    )annotationsN)datedatetimetime	timedelta)partial)AnyCallablecast   )ArraySchemaDataType
JSONSchema)	safe_reprc                   @  s   e Zd ZdZd?ddZdddd@ddZdAddZdBddZdCddZdDd!d"Z	dDd#d$Z
dEd'd(ZdFd)d*ZdFd+d,ZdFd-d.ZdGd5d6ZdHd7d8ZdFd9d:ZdFd;d<ZdFd=d>ZdS )IJsonArgsValueFormatterzFormat values recursively based on the information provided in value dict.

    When a custom format is identified, the `$__datatype__` key is always present.
    indentintc             
   C  sp  || _ |dk| _i d| jd| jd| jdt| jdddd	d
t| jdddd	dt| jdddddt| jdddt| jdddt| jdddt| jdddt| jdddt| jddd| jdt| j	d ddd!| j
d"| jd#| ji d$| jd%t| j	dddd&t| j	d'ddd(t| j	d)ddd*t| j	d+ddd,t| j	d-ddd.t| j	d/ddd0t| j	d1ddd2t| j	d3ddd4t| j	d5ddd6t| j	d7ddd8t| j	d9ddd:t| j	d;dd	d<t| j	d=ddd>t| j	d?d?d	d@t| j	dAdBd	dCt| j	dddt| jdDd| jt| jdddd	t| jdddd	t| j	d?d?d	dE| _d S )FNr   strr   floatPydanticModel(=)F	dataclassMappingz({: z})TtupleSequencez([z])set{}	frozensetzfrozenset({dequezdeque([	generatorzgenerator((z))bytesDecimalzDecimal(r   r   r   r   EnumIPv4AddresszIPv4Address(AnyUrlzAnyUrl(UrlzUrl(IPv4InterfacezIPv4Interface(IPv4NetworkzIPv4Network(IPv6AddresszIPv6Address(IPv6InterfacezIPv6Interface(IPv6NetworkzIPv6Network(	PosixPathz
PosixPath(Patternzre.compile(SecretByteszSecretBytes(	SecretStrz
SecretStr(	NameEmail UUIDzUUID('z')	Exceptionzarray([)ndarray	DataFrameattrs
sqlalchemyunknown)_indent_step	_newlines_format_string_format_numberr   _format_items_format_list_like_format_sequence_format_bytes_write_format_date_format_datetime_format_time_format_timedelta_format_data_frame_data_type_map)selfr    rL   f/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/logfire/_internal/json_formatter.py__init__   s   
	
 !"#zJsonArgsValueFormatter.__init__Nr   )schemaindent_currentvaluer   rO   JSONSchema | NonerP   c                C  s$   t  | _| |d|| | j S )NT)ioStringIO_stream_formatgetvalue)rK   rQ   rO   rP   rL   rL   rM   __call__?   s   

zJsonArgsValueFormatter.__call__use_reprbool dict[str, Any] | list[Any] | AnyreturnNonec              	   C  s  |d urrd|v rd| d }d u rK|d dkr)t|tr)| dddd||d  d S |d dkr?t|tr?| d	d
||| d S | dddd|d  d S | j |}|d us\J d| |||| d S | ddddt|d  d S |rxt|}| dddd|d  d S )Ntypezx-python-datatypeobjectr   r   r    Tarray[]r4   Fr   zUnknown data type )	get
isinstancedictr@   listrA   rD   rJ   r   )rK   rP   rY   rQ   rO   	data_typefuncrL   rL   rM   rV   D   s   zJsonArgsValueFormatter._formatopen_r   after__indent_currentc                 C  sJ   |d ur| d }r| | }|rt|}| j| | |  d S )Ntitle)rc   r   rU   write)rK   ri   rj   rY   rk   rQ   rO   clsrL   rL   rM   rD   ]   s
   	zJsonArgsValueFormatter._write_schemac              	   C  s   |  ddddt|dd  d S )Nr4   Tr   )seconds)rD   r   )rK   rk   rQ   ro   rL   rL   rM   rH   n   s   z(JsonArgsValueFormatter._format_timedeltaclose_c              
   C  sf   |pi }| d }dkr$| dddd|d  d|d d	  | d S | | | |||d  d S )
Nrl   ranger   r   Fr   , r   )rc   rD   rA   )rK   ri   rq   rP   rQ   rO   rn   rL   rL   rM   rB   q   s   .z'JsonArgsValueFormatter._format_sequencec                 C  s*  t t|pi }|| j }|d }| jrdnd}| j| d}	|p"i d}
|p)i d}|p0i d }rEt|dkrE|dd  d	d
}
t|D ]4\}}|	r[d}	| jrZ| jd n| j| | j| |rst||krs|| n|
}| 	|d|| qI| jr|	s| j| | j|d |  d S )N ,
rs   TitemsprefixItemsx-shaper   r`   )ry   r^   F
)
r
   r   r<   r=   rU   rm   rc   len	enumeraterV   )rK   ri   rq   rP   rQ   rO   
indent_newbeforecommafirstitems_schemaprefix_itemsshapeivitem_schemarL   rL   rM   rA   z   s0   

z(JsonArgsValueFormatter._format_list_likesplit_repr_keyc              
   C  s  || j  }|d }	| jrdnd}
|pi }|d }r!| | }| j| d}|di }| D ]8\}}|rE| jrB| jd d}n| j|
 | j|	 | |||d  | j| | |d|||d  q3| jrw|sw| jd | j|d |  d S )	Nru   rv   rs   rl   T
propertiesrz   F)r<   r=   rc   rU   rm   rw   rV   )rK   ri   r   rq   r   rP   rQ   rO   r}   before_r   rn   r   r   kr   rL   rL   rM   r@      s,   


z$JsonArgsValueFormatter._format_itemsc                 C  s6   |o| d}|r| d| dn|}| j| dS )a  Format bytes value.

        Examples:
            >>> value = b'hello'
            >>> schema = {'type': 'string', 'x-python-datatype': 'bytes'}
            >>> _format_bytes(0, value, schema)
            "hello"
            >>> schema = {'type': 'string', 'x-python-datatype': 'bytes', 'title': 'MyBytes'}
            >>> _format_bytes(0, value, schema)
            MyBytes("hello")
        rl   r   r   N)rc   rU   rm   rK   rk   rQ   rO   rn   outputrL   rL   rM   rC      s   z$JsonArgsValueFormatter._format_bytesc                 C  s>   |o| d}|r| dt| dnt|}| j| dS )a  Format string value.

        Examples:
            >>> value = 'hello'
            >>> schema = {'type': 'string', 'x-python-datatype': 'str'}
            >>> _format_string(0, value, schema)
            "hello"
            >>> schema = {'type': 'string', 'x-python-datatype': 'str', 'title': 'MyString'}
            >>> _format_string(0, value, schema)
            MyString("hello")
        rl   r   r   N)rc   reprrU   rm   r   rL   rL   rM   r>      s    z%JsonArgsValueFormatter._format_stringc                 C  s:   |o| d}|r| d| dnt|}| j| dS )a  Format number value. Supports both integer and float types.

        Examples:
            >>> value = 42
            >>> schema = {'type': 'integer', 'x-python-datatype': 'int'}
            >>> _format_number(0, value, schema)
            42
            >>> schema = {'type': 'number', 'x-python-datatype': 'float', 'title': 'MyNumber'}
            >>> _format_number(0, value, schema)
            MyNumber(42)
        rl   r   r   N)rc   r   rU   rm   r   rL   rL   rM   r?      s   z%JsonArgsValueFormatter._format_numbercolumns	list[Any]indicesrowsreal_column_countreal_row_countc              	   C  sN  ddd}t |}||k r||d}d	gd
d |D  }g }t|D ]\}	}
||k r/||
d}
||	 gdd |
D  }
||
 q"t ||k rQ||dgt | }dd t|g|  D }| jddd t||D d  | jddd |D d  |D ]}
| jddd t||
D d  q| jd| d| d dS )a  Inspired by https://gist.github.com/lonetwin/4721748.

        >>> columns = ['col1', 'col2', 'col4', 'col5']
        >>> indices = ['a', 'b', 'd', 'e']
        >>> rows = [[1, 2, 4, 5], [2, 4, 8, 10], [4, 8, 16, 20], [5, 10, 20, 25]]
        >>> real_column_count = 5
        >>> real_rows_count = 5
        >>> _format_table(columns, indices, rows, real_column_count, real_rows_count)

            | col1 | col2 | ... | col4 | col5
        ----+------+------+-----+------+-----
        a   | 1    | 2    | ... | 4    | 5
        b   | 2    | 4    | ... | 8    | 10
        ... | ...  | ...  | ... | ...  | ...
        d   | 4    | 8    | ... | 16   | 20
        e   | 5    | 10   | ... | 20   | 25

        [5 rows x 5 columns]
        rw   r   itemstr | list[str]r\   c                 S  s*   t | d }| d| |g | |d   S )N   r   )r{   )rw   r   midpointrL   rL   rM   insert_into_list_middle	  s   zEJsonArgsValueFormatter._format_table.<locals>.insert_into_list_middlez...r4   c                 S     g | ]}t |qS rL   r   .0xrL   rL   rM   
<listcomp>      z8JsonArgsValueFormatter._format_table.<locals>.<listcomp>c                 S  r   rL   r   r   rL   rL   rM   r     r   c                 S  s   g | ]
}t t|t d qS ))key)r{   max)r   colsrL   rL   rM   r     s    z | c                 s  "    | ]\}}|| d V  qdS sNrL   )r   widthrl   rL   rL   rM   	<genexpr>"       z7JsonArgsValueFormatter._format_table.<locals>.<genexpr>rz   z-+-c                 s  s    | ]}d | V  qdS )-NrL   )r   r   rL   rL   rM   r   %  s    c                 s  r   r   rL   )r   r   cdatarL   rL   rM   r   )  r   z
[z rows x z	 columns]N)rw   r   r   r   r\   r   )r{   r|   appendziprU   rm   join)rK   r   r   r   r   r   r   column_countconverted_rowsr   rowwidthsrL   rL   rM   _format_table   s&   


& (z$JsonArgsValueFormatter._format_tablec              	   C  s@   |pi }| j |dg |dg ||dd|ddd d S )Nz	x-columnsz	x-indiceszx-column-countr   zx-row-count)r   r   r   r   r   )r   rc   rK   rk   rQ   rO   rL   rL   rM   rI   .  s   




z)JsonArgsValueFormatter._format_data_framec              	   C  ,   |  ddddt|trt|n|| d S Nr4   Tr   )rD   rd   r   r   fromisoformatr   rL   rL   rM   rE   8     ,z#JsonArgsValueFormatter._format_datec              	   C  r   r   )rD   rd   r   r   r   r   rL   rL   rM   rF   ;  r   z'JsonArgsValueFormatter._format_datetimec              	   C  r   r   )rD   rd   r   r   r   r   rL   rL   rM   rG   >  r   z#JsonArgsValueFormatter._format_time)r   r   )rQ   r   rO   rR   rP   r   )
rP   r   rY   rZ   rQ   r[   rO   rR   r\   r]   )ri   r   rj   r   rY   rZ   rk   r   rQ   r   rO   rR   r\   r]   )rk   r   rQ   r   ro   rR   r\   r]   )ri   r   rq   r   rP   r   rQ   r   rO   rR   r\   r]   )ri   r   r   r   rq   r   r   rZ   rP   r   rQ   r   rO   rR   r\   r]   )rk   r   rQ   r   rO   rR   r\   r]   )r   r   r   r   r   r   r   r   r   r   r\   r]   )rk   r   rQ   r   rO   rR   r\   r]   )__name__
__module____qualname____doc__rN   rX   rV   rD   rH   rB   rA   r@   rC   r>   r?   r   rI   rE   rF   rG   rL   rL   rL   rM   r      s$    
-




	
#
%



<


r      )r   )
__future__r   rS   r   r   r   r   	functoolsr   typingr   r	   r
   
json_typesr   r   r   utilsr   r   json_args_value_formatter!json_args_value_formatter_compactrL   rL   rL   rM   <module>   s      
8