o
    0 i6.                     @   s  d dl mZ d dlmZ d dlZd dlmZ d dlmZ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mZmZ 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$ W n e%yw   e	dw d dl&m'Z' e'rd dl&m(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z4m5Z5m6Z6 d dlm7Z7 d dl8m9Z9m:Z: dZ;G dd de
Z<G dd deZ=dd Z>dd  Z?d!d" Z@d#d$ ZAd%d& ZBee<d'd( ZCdS ))    )Set)deepcopyN)OP)$_DEFAULT_FAILED_REQUEST_STATUS_CODESDidNotEnableIntegration)SentryAsgiMiddleware)ignore_logger)should_send_default_pii)TransactionSourceSOURCE_FOR_STYLE)ensure_integration_enabledevent_from_exceptiontransaction_from_function)RequestLitestar)BaseRouteHandler)DefineMiddleware)	HTTPRoute)ConnectionDataExtractor)HTTPExceptionzLitestar is not installed)TYPE_CHECKING)AnyOptionalUnion)ASGIApp)HTTPReceiveMessage	HTTPScopeMessage
MiddlewareReceiveScopeSendWebSocketReceiveMessage)MiddlewareProtocol)EventHintzgeneric Litestar requestc                   @   s6   e Zd ZdZde Zef	d	ddZedd ZdS )
LitestarIntegrationlitestarz
auto.http.returnNc                 C   s
   || _ d S )N)failed_request_status_codes)selfr*    r,   l/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/sentry_sdk/integrations/litestar.py__init__8   s   
zLitestarIntegration.__init__c                   C   s   t   t  t  td d S )Nr(   )patch_app_initpatch_middlewarespatch_http_route_handler	   r,   r,   r,   r-   
setup_once>   s   
zLitestarIntegration.setup_once)r)   N)	__name__
__module____qualname__
identifieroriginr   r.   staticmethodr2   r,   r,   r,   r-   r'   4   s    

r'   c                       s*   e Zd Zejf fdd	Zdd Z  ZS )SentryLitestarASGIMiddlewarec                    s   t  j|ddd|dd d S )NFendpointZasgi   )appZunsafe_context_dataZtransaction_styleZmechanism_typespan_originZasgi_version)superr.   )r+   r<   r=   	__class__r,   r-   r.   Q   s   
z%SentryLitestarASGIMiddleware.__init__c                 C   s   dS )zAvoid catching exceptions from request handlers.

        Those exceptions are already handled in Litestar.after_exception handler.
        We still catch exceptions from application lifespan handlers.
        Nr,   )r+   excr,   r,   r-   _capture_request_exception]   s   z7SentryLitestarASGIMiddleware._capture_request_exception)r3   r4   r5   r'   r7   r.   rB   __classcell__r,   r,   r?   r-   r9   P   s    r9   c                     s&   t j tt  fdd} | t _dS )a\  
    Replaces the Litestar class's `__init__` function in order to inject `after_exception` handlers and set the
    `SentryLitestarASGIMiddleware` as the outmost middleware in the stack.
    See:
    - https://docs.litestar.dev/2/usage/applications.html#after-exception
    - https://docs.litestar.dev/2/usage/middleware/using-middleware.html
    c                    sN   t g|dpg |d< |dpg }tg||d<  | g|R i | d S )NZafter_exception
middleware)exception_handlergetr9   )r+   argskwargsrD   Zold__init__r,   r-   injection_wrapperr   s   z)patch_app_init.<locals>.injection_wrapperN)r   r.   r   r'   )rJ   r,   rI   r-   r/   g   s   	
r/   c                     s&   t j tt  fdd} | t _d S )Nc                    s   dd  | D S )Nc                 S   s   g | ]}t |qS r,   )enable_span_for_middleware).0rD   r,   r,   r-   
<listcomp>   s    zIpatch_middlewares.<locals>.resolve_middleware_wrapper.<locals>.<listcomp>r,   )r+   Zold_resolve_middleware_stackr,   r-   resolve_middleware_wrapper   s   z5patch_middlewares.<locals>.resolve_middleware_wrapper)r   Zresolve_middlewarer   r'   )rO   r,   rN   r-   r0      s   
r0   c                    sj   t | dr	| tu r| S t| tr| jj n| j  fdd} jdv}|r3t| tr0|| j_| S || _| S )N__call__c                    s   t  td u r| |I d H S | jj t jtj tj	dJ}|
d   fdd}tdt}|dk}|s@|n} fdd}	tdt}
|
d	k}|sY|	n}| |||I d H W  d    S 1 sow   Y  d S )
Nopnamer7   litestar.middleware_namec                     s   t  td u r| i |I d H S t jtjtdttj	d}|
d  | i |I d H W  d    S 1 s?w   Y  d S Nr5   rQ   rT   )
sentry_sdk
get_clientget_integrationr'   
start_spanr   ZMIDDLEWARE_LITESTAR_RECEIVEgetattrstrr7   set_tag)rG   rH   span)middleware_namereceiver,   r-   _sentry_receive   s   $zNenable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_receiver3   r`   c                    s   t  td u r| I d H S t jtjtdttj	d}|
d  | I d H W  d    S 1 s9w   Y  d S rU   )rV   rW   rX   r'   rY   r   ZMIDDLEWARE_LITESTAR_SENDrZ   r[   r7   r\   )messager]   )r^   sendr,   r-   _sentry_send   s   $zKenable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_sendrc   )rV   rW   rX   r'   r@   r3   rY   r   ZMIDDLEWARE_LITESTARr7   r\   rZ   r[   )r+   scoper_   rb   Zmiddleware_spanr`   Zreceive_nameZreceive_patchedZnew_receiverc   Z	send_nameZsend_patchedZnew_sendZold_call)r^   r_   rb   r-   _create_span_call   s*   $z5enable_span_for_middleware.<locals>._create_span_call)rf   )hasattrr9   
isinstancer   rD   rP   r3   )rD   rf   Znot_yet_patchedr,   re   r-   rK      s   


1
rK   c                     s   t j  fdd} | t _d S )Nc                    s   t  td u r| ||I d H S t  }d j||d}tddd|  d}|I d H  fdd}tj|_	|
| | ||I d H S )Nr<   )rd   r_   rb   T)Z
parse_bodyZparse_querybodyc                    s    d}|  di }t dd|d< t r d |d< d ur&|d< d }|jd ur1|j}nt|jdr<|jj}n|j}|d urGt|}d	td
 i}|sVt	}d	t
ji}| t|||d | S )Nroute_handlerrequest_body    content_lengthcookiesdatavaluesourcer:   )rk   ZtransactionZtransaction_info)rF   lenr
   rS   rg   fnrq   r   r   _DEFAULT_TRANSACTION_NAMEr   ZROUTEupdater   )event_rj   Zrequest_infofuncZtx_nameZtx_infoZextracted_request_dataZrequest_datard   r,   r-   event_processor   s4   



zHpatch_http_route_handle.<locals>.handle_wrapper.<locals>.event_processor)rV   rW   rX   r'   get_isolation_scopeZrequest_classr   popr6   _nameZadd_event_processor)r+   rd   r_   rb   sentry_scoperk   ri   r{   Z
old_handlerz   r-   handle_wrapper   s    

%
z/patch_http_route_handle.<locals>.handle_wrapper)r   handle)r   r,   r   r-   r1      s   
8r1   c                 C   s.   |  d}t|tr|S t|dr| S d S )Nuserasdict)rF   rh   dictrg   r   )rd   Z
scope_userr,   r,   r-   retrieve_user_from_scope  s   


r   c                 C   s   d }t  r	t|}|rt|trt }|| t| tr1t 	t
}|d ur1| j|jvr1d S t| t jt
jddd\}}tj||d d S )NF)typeZhandled)Zclient_optionsZ	mechanism)hint)r
   r   rh   r   rV   r|   Zset_userr   rW   rX   r'   status_coder*   r   optionsr6   Zcapture_event)rA   rd   Z	user_infor   Zintegrationrw   r   r,   r,   r-   rE   #  s"   



rE   )Dcollections.abcr   copyr   rV   Zsentry_sdk.constsr   Zsentry_sdk.integrationsr   r   r   Zsentry_sdk.integrations.asgir   Zsentry_sdk.integrations.loggingr	   Zsentry_sdk.scoper
   Zsentry_sdk.tracingr   r   Zsentry_sdk.utilsr   r   r   r(   r   r   Zlitestar.handlers.baser   Zlitestar.middlewarer   Zlitestar.routes.httpr   Zlitestar.data_extractorsr   Zlitestar.exceptionsr   ImportErrortypingr   r   r   r   Zlitestar.types.asgi_typesr   Zlitestar.typesr   r   r   r   r    r!   ZLitestarScoper"   r#   r$   Zsentry_sdk._typesr%   r&   ru   r'   r9   r/   r0   rK   r1   r   rE   r,   r,   r,   r-   <module>   sJ    (
I?