o
    iZ%                     @  s  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mZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZ d dlmZmZ ddlm Z m!Z! G dd deZ"	d'd(ddZ#d)d#d$Z$G d%d& d&eZ%dS )*    )annotationsN)MappingSequence)partial)JSONDecodeError)Path)Anycast)trace)LogData)LogExportResult)InMemoryLogExporter)EventReadableSpan)SpanExporterSpanExportResult   )$ATTRIBUTES_EXCEPTION_FINGERPRINT_KEYATTRIBUTES_SPAN_TYPE_KEYc                   @  sL   e Zd ZdZdZdddZdd
dZdddZ							dd ddZdS )!TestExporterzKA SpanExporter that stores exported spans in a list for asserting in tests.FreturnNonec                 C  s
   g | _ d S Nexported_spansself r   f/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/logfire/_internal/exporters/test.py__init__   s   
zTestExporter.__init__spansSequence[ReadableSpan]r   c                 C  s   | j | tjS )z"Exports a batch of telemetry data.)r   extendr   SUCCESS)r   r    r   r   r   export!   s   zTestExporter.exportc                 C  s
   g | _ dS )zClears the collected spans.Nr   r   r   r   r   clear&   s   
zTestExporter.clear{   Tfixed_line_number
int | Nonestrip_filepathsboolinclude_resourcesinclude_instrumentation_scope_include_pending_spans_strip_function_qualnameparse_json_attributeslist[dict[str, Any]]c           	        s   t t||||d dddd fd
dddddfddd fddfdd| jD }fdd|D S )aS  The exported spans as a list of dicts.

        Args:
            fixed_line_number: The line number to use for all spans.
            strip_filepaths: Whether to strip the filepaths from the exported spans.
            include_resources: Whether to include the resource attributes in the exported spans.
            include_instrumentation_scope: Whether to include the instrumentation scope in the exported spans.
            parse_json_attributes: Whether to parse strings containing JSON arrays/objects.

        Returns:
            A list of dicts representing the exported spans.
        r'   r)   strip_function_qualnamer/   contexttrace.SpanContextr   dict[str, Any]c                 S  s   | j | j| jdS )Ntrace_idspan_id	is_remoter6   )r3   r   r   r   build_contextH   s   z:TestExporter.exported_spans_as_dict.<locals>.build_contextlink
trace.Linkc                   s    | j ptj}| | jdS )N)r3   
attributes)r3   r
   INVALID_SPAN_CONTEXTr=   )r;   r3   )_build_attributesr:   r   r   
build_linkK   s   z7TestExporter.exported_spans_as_dict.<locals>.build_linkeventr   c                 S  sb   | j | jd}| jr/t| j |d< }d|v r/tdd ttt| jd dD }||d< |S )N)name	timestampr=   zexception.stacktracec                 s  s     | ]}|  r|  V  qd S r   )strip).0liner   r   r   	<genexpr>T   s    
zKTestExporter.exported_spans_as_dict.<locals>.build_event.<locals>.<genexpr>
)	rB   rC   r=   dictnextreversedr	   strsplit)rA   resr=   	last_liner   r   r   build_eventO   s   z8TestExporter.exported_spans_as_dict.<locals>.build_eventspanr   c                   s    rd| j o	| j jiS i S )Ninstrumentation_scope)rR   rB   )rQ   )r,   r   r   build_instrumentation_scope\   s   zHTestExporter.exported_spans_as_dict.<locals>.build_instrumentation_scopec                   s   | j ptj}| j|| jr| jnd | j| jd| d | ji}| jr5fdd| jD |d< | j	rDfdd| j	D |d< rR | j
j}d|i|d< |S )	N)rB   r3   parent
start_timeend_timer=   c                      g | ]} |qS r   r   )rE   r;   )r@   r   r   
<listcomp>n       zKTestExporter.exported_spans_as_dict.<locals>.build_span.<locals>.<listcomp>linksc                   rW   r   r   )rE   rA   )rP   r   r   rX   p   rY   eventsresource)r3   r
   r>   rB   rT   rU   rV   r=   rZ   r[   r\   )rQ   r3   rN   resource_attributes)r?   r:   rP   rS   r@   r+   r   r   
build_spanb   s(   
	z7TestExporter.exported_spans_as_dict.<locals>.build_spanc                   rW   r   r   rE   rQ   )r^   r   r   rX   x   rY   z7TestExporter.exported_spans_as_dict.<locals>.<listcomp>c                   s0   g | ]} d u s| di  tddkr|qS )Tr=   rQ   pending_span)getr   r_   )r-   r   r   rX   y   s    N)r3   r4   r   r5   )r;   r<   r   r5   )rA   r   r   r5   )rQ   r   r   r5   )r   build_attributesr   )	r   r'   r)   r+   r,   r-   r.   r/   r    r   )	r?   r-   r:   rP   rS   r@   r^   r,   r+   r   exported_spans_as_dict*   s    


z#TestExporter.exported_spans_as_dictNr   r   )r    r!   r   r   )r&   TFFFTF)r'   r(   r)   r*   r+   r*   r,   r*   r-   r*   r.   r*   r/   r*   r   r0   )	__name__
__module____qualname____doc____test__r   r$   r%   rc   r   r   r   r   r      s    


r   FrB   rL   valuer   r)   r*   r'   r(   r2   r/   r   c                 C  s   | dkr|rzt |jW S  ty   | Y S w | dkr"|d ur"|S | dkr4tjdkr4|r4|dd S | dkrB|t ks@J dS | d	krNt	d
|rNdS |rpt
|trp|ds_|drpzt|W S  tyo   Y |S w |S )Nzcode.filepathzcode.linenozcode.function)      .zprocess.pidi  zservice.instance.idz^[0-9a-f]{32}$ 00000000000000000000000000000000{[)r   rB   
ValueErrorsysversion_inforM   osgetpidrematch
isinstancerL   
startswithjsonloadsr   )rB   rj   r)   r'   r2   r/   r   r   r   process_attribute   s2   "r}   r=   Mapping[str, Any] | Nonedict[str, Any] | Nonec                   sL   | d u rd S  fdd|   D } t| v rd| t< d| v r$d| d< | S )Nc              
     s$   i | ]\}}|t || qS r   )r}   )rE   kvr'   r/   r)   r2   r   r   
<dictcomp>   s    z$build_attributes.<locals>.<dictcomp>@0000000000000000000000000000000000000000000000000000000000000000ztelemetry.sdk.versionz0.0.0)itemsr   )r=   r)   r'   r2   r/   r   r   r   rb      s   rb   c                      sV   e Zd ZdZdZd fddZd fddZ						dd ddZd!ddZ  Z	S )"TestLogExporterzIA LogExporter that stores exported logs in a list for asserting in tests.Fns_timestamp_generatortyping.Callable[[], int]r   r   c                   s   t    || _d S r   )superr   r   )r   r   	__class__r   r   r      s   

zTestLogExporter.__init__batchtyping.Sequence[LogData]r   c                   s.   |D ]}|   |j_|   |j_qt |S r   )r   
log_recordrC   observed_timestampr   r$   )r   r   logr   r   r   r$      s   zTestLogExporter.exportr&   Tr'   r(   r)   r*   r+   r,   r.   r/   r0   c                   s:   t t||||d d
 fddfdd	|  D S )Nr1   log_datar   r   r5   c              
     st   | j }|j|jd ur|jjnd |j |j|j|j|j|j	|j
d	}r0 |jj}d|i|d< r8| jj|d< |S )N)	bodyseverity_numberseverity_textr=   rC   r   r7   r8   trace_flagsr=   r\   rR   )r   r   r   rj   r   r=   rC   r   r7   r8   r   r\   rR   rB   )r   r   rN   r]   )r?   r,   r+   r   r   	build_log   s$   z9TestLogExporter.exported_logs_as_dicts.<locals>.build_logc                   rW   r   r   )rE   r   )r   r   r   rX      rY   z:TestLogExporter.exported_logs_as_dicts.<locals>.<listcomp>)r   r   r   r5   )r   rb   get_finished_logs)r   r'   r)   r+   r,   r.   r/   r   )r?   r   r,   r+   r   exported_logs_as_dicts   s   	z&TestLogExporter.exported_logs_as_dictsc                 C  s   |    d S r   )r%   r   r   r   r   shutdown   s   zTestLogExporter.shutdown)r   r   r   r   )r   r   r   r   )r&   TFFTF)r'   r(   r)   r*   r+   r*   r,   r*   r.   r*   r/   r*   r   r0   rd   )
re   rf   rg   rh   ri   r   r$   r   r   __classcell__r   r   r   r   r      s    ,r   )F)rB   rL   rj   r   r)   r*   r'   r(   r2   r*   r/   r*   r   r   )r=   r~   r)   r*   r'   r(   r2   r*   r/   r*   r   r   )&
__future__r   r{   ru   rw   rs   typingcollections.abcr   r   	functoolsr   r   pathlibr   r   r	   opentelemetryr
   opentelemetry.sdk._logsr   (opentelemetry.sdk._logs._internal.exportr   opentelemetry.sdk._logs.exportr   opentelemetry.sdk.tracer   r   opentelemetry.sdk.trace.exportr   r   	constantsr   r   r   r}   rb   r   r   r   r   r   <module>   s.    o
 