
    gl-                        d dl mZ d dlZd dl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
      Z ed      Z ed       Zy)    )annotationsN)	timedelta)partial)AnyCallablecast   )ArraySchemaDataType
JSONSchema)	safe_reprc                     e Zd ZdZddZdddddZ	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZdd	Z	 	 	 	 	 	 	 	 	 	 	 	 dd
Z		 	 	 	 	 	 	 	 	 	 	 	 ddZ
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZddZy)JsonArgsValueFormatterzFormat values recursively based on the information provided in value dict.

    When a custom format is identified, the `$__datatype__` key is always present.
    c          
        || _         |dk7  | _        i 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t        | j                  ddd      d t        | j                  d!dd      d"t        | j                  d#dd      d$| j                  d%t        | j                  ddd      d&t        | j                  d'dd      i 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      dAt        | j                  ddd      dBt        | j                  dCd      dD| j                  dEt        | j                  dddd      dFt        | j                  dddd      dGt        | j                  d=d=d      i| _
        y )HNr   PydanticModel(=)F	dataclassMappingz({: z})TtupleSequencez([z])set{}	frozensetzfrozenset({dequezdeque([	generatorzgenerator((z))bytesDecimalzDecimal(datezdate(datetimez	datetime(timeztime(r   EnumIPv4AddresszIPv4Address(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')	Exceptionndarrayzarray([	DataFrameattrs
sqlalchemyunknown)_indent_step	_newlinesr   _format_items_format_list_like_format_sequence_format_bytes_write_format_timedelta_format_data_frame_data_type_map)selfindents     U/var/www/openai/venv/lib/python3.12/site-packages/logfire/_internal/json_formatter.py__init__zJsonArgsValueFormatter.__init__   s   "1$^
WT%7%7c3N$^
!3!3S#sEJ$^
 wt114tTJ$^
 WT33S#>	$^

  5 5tTB$^
 74113<$^
 !7!7M$^
 WT33YE$^
 !7!7M$^
 T''$^
 wt{{JTB$^
 GDKK#t<$^
 [#tD$^
 GDKK#t<$^
 //$^
  GDKKc48!$^
" 74;;TJ#$^
$ 74;;T:%$^
& WT[[2BCN'$^
( 74;;TJ)$^
* 74;;TJ+$^
, WT[[2BCN-$^
. 74;;TJ/$^
0 lCF1$^
2 wt{{M3E3$^
4 74;;UK5$^
6 lCF7$^
8 b"e<9$^
: GDKK4?;$^
< c3==$^
> wt55y$G?$^
@ 00A$^
B WT//c3FC$^
D '$"4"4c3UKE$^
F wt{{BE:G$^
    Nr   )schemaindent_currentc                   t        j                         | _        | j                  |d||       | j                  j	                         S )NT)ioStringIO_stream_formatgetvalue)rD   valuerI   rJ   s       rF   __call__zJsonArgsValueFormatter.__call__;   s4    {{}^T5&9||$$&&rH   c           	        |d|v r{|j                  d      x}6|d   dk(  r| j                  dddd||d        y | j                  dd	|||       y | j                  j                  |      }|
J d
|         ||||       y | j	                  ddddt        |      d        y |rt        |      }| j	                  dddd|d        y )Ntypezx-python-datatypeobjectr   r   r   T[]zUnknown data type r2   Fr   )getr<   r=   rC   r@   r   )rD   rJ   use_reprrQ   rI   	data_typefuncs          rF   rO   zJsonArgsValueFormatter._format@   s     !',?!@@IIf~1**3c4QVX\]..sCPVW..229=D+M/A)-MM+7BE1i.>E!%(KKBq%6rH   c                    ||j                  d      x}r| | }|rt        |      }| j                  j                  | | |        y )Ntitle)rX   r   rN   write)rD   open_after_rY   _indent_currentrQ   rI   clss           rF   r@   zJsonArgsValueFormatter._writeU   sV     &**W*=#=3#=eE7OEe$EeWUGF845rH   c           	     D    | j                  ddddt        |      d        y )Nr2   Tr   )seconds)r@   r   )rD   ra   rQ   _schemas       rF   rA   z(JsonArgsValueFormatter._format_timedeltaf   s    BD!Yu%=tDrH   c           
         |xs i }|j                  d      x}dk(  r%| j                  dddd|d    d|d   d	z    |       y | j                  | | |||d        y )
Nr]   ranger   r   Fr   , r	   )rX   r@   r=   )rD   r_   close_rJ   rQ   rI   rb   s          rF   r>   z'JsonArgsValueFormatter._format_sequencei   so     2::g&&C72KKS%uQxj59q=/,JFS""cU5'?FNESWXrH   c                0   t        t        |xs i       }|| j                  z   }|dz  }| j                  rdnd}| j                  j                  |       d}	|xs i j                  d      }
|xs i j                  d      }|xs i j                  d      x}rt        |      dkD  r|dd  d	d
}
t        |      D ]  \  }}|	r*d}	| j                  r7| j                  j                  d       n| j                  j                  |       | j                  j                  |       |rt        |      |kD  r||   n|
}| j                  |d||        | j                  r|	s| j                  j                  |       | j                  j                  |dz  |z          y )N ,
rh   TitemsprefixItemsx-shaper	   array)rp   rT   F
)
r   r
   r:   r;   rN   r^   rX   len	enumeraterO   )rD   r_   rj   rJ   rQ   rI   
indent_newbeforecommafirstitems_schemaprefix_itemsshapeivitem_schemas                   rF   r=   z(JsonArgsValueFormatter._format_list_liker   sq    k6<R0#d&7&77
c!T5!"))'2"))-8\r&&y11515zA~ ,19gFe$DAq>>LL&&t, ""5)LLv&-9c,>ORS>S,q/YeKLLT1k: % >>%LLu%>C/&89rH   c           
        || j                   z   }|dz  }	| j                  rdnd}
|xs i }|j                  d      x}r| | }| j                  j	                  |       d}|j                  di       }|j                         D ]  \  }}|r*| j                  r| j                  j	                  d       d}n| j                  j	                  |
       | j                  j	                  |	       | j                  |||d        | j                  j	                  |       | j                  |d||j                  |d               | j                  r|s| j                  j	                  d       | j                  j	                  |dz  |z          y )	Nrl   rm   rh   r]   T
propertiesrr   F)r:   r;   rX   rN   r^   rn   rO   )rD   r_   split_rj   repr_keyrJ   rQ   rI   ru   before_rw   rb   rx   r   kr}   s                   rF   r<   z$JsonArgsValueFormatter._format_items   sQ    $d&7&77
s"T2**W%%3%eE7OE5!ZZb1
KKMDAq>>LL&&t, ""5)LLw'LLXq$7LLv&LLT1jnnQ.EF " >>%LLu%>C/&89rH   c                |    |xr |j                  d      }|r| d| dn|}| j                  j                  |       y)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")
        r]   r   r   N)rX   rN   r^   )rD   ra   rQ   rI   rb   outputs         rF   r?   z$JsonArgsValueFormatter._format_bytes   s?     ,G,&)C5%"u6"rH   c           
        dd}t        |      }||k  r	 ||d      }dg|D cg c]  }t        |       c}z   }g }	t        |      D ]D  \  }
}||k  r	 ||d      }||
   g|D cg c]  }t        |       c}z   }|	j                  |       F t        |      |k  r ||	dgt        |      z        }	t	        |g|	z    D cg c]  }t        t        |t                      }}| j                  j                  dj                  d t	        ||      D              dz          | j                  j                  dj                  d	 |D              dz          |	D ]@  }| j                  j                  dj                  d
 t	        ||      D              dz          B | j                  j                  d| d| d       yc c}w c c}w c c}w )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]
        c                <    t        |       dz  }| d| |gz   | |d  z   S )N   r   )rs   )rn   itemmidpoints      rF   insert_into_list_middlezEJsonArgsValueFormatter._format_table.<locals>.insert_into_list_middle   s/    5zQH8$v-hi0@@@rH   z...r2   )keyz | c              3  0   K   | ]  \  }}|| d   ywsN ).0widthr]   s      rF   	<genexpr>z7JsonArgsValueFormatter._format_table.<locals>.<genexpr>   s%     %cNbleUwai(8&9Nb   rr   z-+-c              3  &   K   | ]	  }d |z    yw)-Nr   )r   r   s     rF   r   z7JsonArgsValueFormatter._format_table.<locals>.<genexpr>   s     %FvecEkvs   c              3  0   K   | ]  \  }}|| d   ywr   r   )r   r   cdatas      rF   r   z7JsonArgsValueFormatter._format_table.<locals>.<genexpr>  s%     )cRb,%UE7!),<*=Rbr   z
[z rows x z	 columns]N)rn   	list[Any]r   zstr | list[str]returnr   )	rs   strrt   appendzipmaxrN   r^   join)rD   columnsindicesrowsreal_column_countreal_row_countr   column_countxconverted_rowsr|   rowcolswidthss                 rF   _format_tablez$JsonArgsValueFormatter._format_table   s   .	A
 7|++-gu=G$'2'Q#a&'22$&oFAs//-c591:,#!6#Q#a&#!66C!!#& & t9~%4^eWsSZ|E[\N 7:WI<V6XY6Xd#c$C()6XY 	5::%ccRXZaNb%ccfjjk 	5::%Fv%FFMN "CLLuzz)cRUV\^aRb)ccfjjk " 	S 09J8K9UV7 3 "7 Zs   F>%G!Gc           
         |xs i }| j                  |j                  dg       |j                  dg       ||j                  dd      |j                  dd             y )Nz	x-columnsz	x-indiceszx-column-countr   zx-row-count)r   r   r   r   r   )r   rX   )rD   ra   rQ   rI   s       rF   rB   z)JsonArgsValueFormatter._format_data_frame  sZ    2JJ{B/JJ{B/$jj)91=!::mQ7 	 	
rH   )rE   int)rQ   r   rI   JSONSchema | NonerJ   r   )
rJ   r   rY   boolrQ   z dict[str, Any] | list[Any] | AnyrI   r   r   None)r_   r   r`   r   rY   r   ra   r   rQ   r   rI   r   r   r   )ra   r   rQ   r   re   r   r   r   )r_   r   rj   r   rJ   r   rQ   r   rI   r   r   r   )r_   r   r   r   rj   r   r   r   rJ   r   rQ   r   rI   r   r   r   )ra   r   rQ   r   rI   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )ra   r   rQ   r   rI   r   r   r   )__name__
__module____qualname____doc__rG   rR   rO   r@   rA   r>   r=   r<   r?   r   rB   r   rH   rF   r   r      s   
'
R CG^_ '
7!7-17:Z7du7	7*66 6 	6
 6 6 "6 
6"EYY"%Y7:YCFYPaY	Y!:!:"%!:7:!:CF!:Pa!:	!:F#:#: #: 	#:
 #: #: #: "#: 
#:J# :W :W+4:W<E:WZ]:Wor:W	:Wx
rH   r      )rE   )
__future__r   rL   r#   r   	functoolsr   typingr   r   r   
json_typesr
   r   r   utilsr   r   json_args_value_formatter!json_args_value_formatter_compactr   rH   rF   <module>r      sE    " 	   & & 9 9 B
 B
J 3!< $:!$D !rH   