o
    Zh'                     @   s  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 d dlmZmZ d dlmZmZ 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 d dl m!Z!m"Z"m#Z# erd dl m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dlm3Z3 d dl4m5Z5 W n e6y   e
dw dZ7G dd deZ8G dd deZ9d/ddZ:d/ddZ;d0d!d"Z<d/d#d$Z=d1d(d)Z>d*e?d%d&d+d,ddfd-d.Z@dS )2    )TYPE_CHECKING)	BaseModel)OP)Hub_should_send_default_pii)DidNotEnableIntegration)SentryAsgiMiddleware)SOURCE_FOR_STYLETRANSACTION_SOURCE_ROUTE)event_from_exceptiontransaction_from_function)RequestStarliteState)BaseRouteHandler)DefineMiddleware)get_plugin_for_value)	HTTPRoute)ConnectionDataExtractoris_async_callableRef)AnyDictListOptionalUnion)	ASGIAppHTTPReceiveMessage	HTTPScopeMessage
MiddlewareReceiveScopeSendWebSocketReceiveMessage)MiddlewareProtocol)EventzStarlite is not installedzgeneric Starlite requestc                       s   e Zd Zd fddZ  ZS )SentryStarliteASGIMiddlewareappr   c                    s   t  j|dddd d S )NFendpointZasgi)r)   Zunsafe_context_dataZtransaction_styleZmechanism_type)super__init__)selfr)   	__class__ W/var/www/html/lang_env/lib/python3.10/site-packages/sentry_sdk/integrations/starlite.pyr,   *   s   
z%SentryStarliteASGIMiddleware.__init__)r)   r   )__name__
__module____qualname__r,   __classcell__r0   r0   r.   r1   r(   )   s    r(   c                   @   s   e Zd ZdZedddZdS )StarliteIntegrationstarlitereturnNc                   C   s   t   t  t  d S )N)patch_app_initpatch_middlewarespatch_http_route_handler0   r0   r0   r1   
setup_once6   s   
zStarliteIntegration.setup_oncer8   N)r2   r3   r4   
identifierstaticmethodr<   r0   r0   r0   r1   r6   3   s    r6   r8   Nc                     s   t j d
 fdd	} | t _dS )a  
    Replaces the Starlite class's `__init__` function in order to inject `after_exception` handlers and set the
    `SentryStarliteASGIMiddleware` as the outmost middleware in the stack.
    See:
    - https://starlite-api.github.io/starlite/usage/0-the-starlite-app/5-application-hooks/#after-exception
    - https://starlite-api.github.io/starlite/usage/7-middleware/0-middleware-intro/
    r-   r   argsr   kwargsr8   Nc                    sn   | dg }|jtgt|tr|n|gd tjt_| dd p"g }tg||d<  | g|R i | d S )Nafter_exception)rB   
middleware)popupdateexception_handler
isinstancelistr(   Z
_run_asgi3__call__)r-   r@   rA   rB   rC   Zold__init__r0   r1   injection_wrapperG   s   z)patch_app_init.<locals>.injection_wrapper)r-   r   r@   r   rA   r   r8   N)r   r,   )rK   r0   rJ   r1   r9   =   s   
r9   c                     s   t j d fdd} | t _d S )Nr-   r   r8   List[Middleware]c                    s   dd  | D S )Nc                 S   s   g | ]}t |qS r0   )enable_span_for_middleware).0rC   r0   r0   r1   
<listcomp>`   s    zIpatch_middlewares.<locals>.resolve_middleware_wrapper.<locals>.<listcomp>r0   )r-   Zold__resolve_middleware_stackr0   r1   resolve_middleware_wrapper_   s   z5patch_middlewares.<locals>.resolve_middleware_wrapper)r-   r   r8   rL   )r   Zresolve_middleware)rQ   r0   rP   r1   r:   \   s   
r:   rC   r!   c                    s   t | dr	| tu r| S t| tr| jj n| j 										
	 d fdd} jdv}|r>t| tr;|| j_| S || _| S )NrI   r-   r&   scoper#   receiver"   sendr$   r8   c                    s   t j}|t}|d uru| jj |jtj dR}|	d  						d fdd	}t
d
t}|dk}	|	s>|n}
d fdd}t
d
t}|dk}|sX|n}| ||
|I d H W  d    S 1 snw   Y  d S | |I d H S )Nopdescriptionstarlite.middleware_namer@   r   rA   r8   2Union[HTTPReceiveMessage, WebSocketReceiveMessage]c                     sh   t j}|jtjtdtd}|d  | i |I d H W  d    S 1 s-w   Y  d S Nr4   rU   rX   )r   current
start_spanr   ZMIDDLEWARE_STARLITE_RECEIVEgetattrstrset_tag)r@   rA   hubspan)middleware_namerS   r0   r1   _sentry_receive   s   $zNenable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_receiver2   rc   messager    c                    sb   t j}|jtjtdtd}|d  | I d H W  d    S 1 s*w   Y  d S rZ   )r   r[   r\   r   ZMIDDLEWARE_STARLITE_SENDr]   r^   r_   )rd   r`   ra   )rb   rT   r0   r1   _sentry_send   s   $zKenable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_sendre   )r@   r   rA   r   r8   rY   )rd   r    r8   N)r   r[   get_integrationr6   r/   r2   r\   r   ZMIDDLEWARE_STARLITEr_   r]   r^   )r-   rR   rS   rT   r`   integrationZmiddleware_spanrc   Zreceive_nameZreceive_patchedZnew_receivere   Z	send_nameZsend_patchedZnew_sendZold_call)rb   rS   rT   r1   _create_span_callt   s6   
	$%z5enable_span_for_middleware.<locals>._create_span_call)ri   )
r-   r&   rR   r#   rS   r"   rT   r$   r8   N)hasattrr(   rG   r   rC   rI   r2   )rC   ri   Znot_yet_patchedr0   rh   r1   rM   h   s2   


.
rM   c                     s2   t j 											 d fd
d} | t _d S )Nr-   r   rR   r   rS   r"   rT   r$   r8   c           
         s   t j}|t}|d u r| ||I d H S | @}d j||d}tddd|  d}|I d H d fdd}	tj|_	|
|	 | ||I d H W  d    S 1 s^w   Y  d S )Nr)   )rR   rS   rT   T)Z
parse_bodyZparse_querybodyeventr'   _Dict[str, Any]r8   c                    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tr<|jj}n|j}|d urGt|}dt	d	 i}|sUt
}dti}| |||d
 | S )Nroute_handlerrequest_body    content_lengthcookiesdatasourcer*   )rp   ZtransactionZtransaction_info)getlenr   namerG   fnr   valuer   r
   _DEFAULT_TRANSACTION_NAMEr   rE   )rl   rm   ro   Zrequest_infofuncZtx_nameZtx_infoZextracted_request_dataZrequest_datarR   r0   r1   event_processor   s4   


zHpatch_http_route_handle.<locals>.handle_wrapper.<locals>.event_processor)rl   r'   rm   rn   r8   r'   )r   r[   rf   r6   configure_scopeZrequest_classr   rD   r>   _nameZadd_event_processor)
r-   rR   rS   rT   r`   rg   sentry_scoperp   rk   r   Z
old_handler~   r1   handle_wrapper   s*   



#
$z/patch_http_route_handle.<locals>.handle_wrapper)
r-   r   rR   r   rS   r"   rT   r$   r8   N)r   handle)r   r0   r   r1   r;      s   
;r;   rR   r#   Optional[Dict[str, Any]]c                 C   sj   |  di }|s
d S t|tr|S t|tr| S t|dr#| S t|}|r3t|js3||S d S )Nuserasdict)	rw   rG   dictr   rj   r   r   r   to_dict)rR   Z
scope_userpluginr0   r0   r1   retrieve_user_from_scope   s   



r   excrm   r   c                 C   s   t j}|td u rd S d }t rt|}|r5t|tr5| }|	| W d    n1 s0w   Y  t
| |jr>|jjnd tjddd\}}|j||d d S )NF)typeZhandled)Zclient_optionsZ	mechanism)hint)r   r[   rf   r6   r   r   rG   r   r   Zset_userr   clientoptionsr>   Zcapture_event)r   rR   rm   r`   Z	user_infor   rl   r   r0   r0   r1   rF      s    


rF   r=   )rC   r!   r8   r!   )rR   r#   r8   r   )Atypingr   Zpydanticr   Zsentry_sdk.constsr   Zsentry_sdk.hubr   r   Zsentry_sdk.integrationsr   r   Zsentry_sdk.integrations.asgir	   Zsentry_sdk.tracingr
   r   Zsentry_sdk.utilsr   r   r7   r   r   r   Zstarlite.handlers.baser   Zstarlite.middlewarer   Zstarlite.plugins.baser   Zstarlite.routes.httpr   Zstarlite.utilsr   r   r   r   r   r   r   r   Zstarlite.typesr   r   r   r    r!   r"   r#   r$   r%   r&   Zsentry_sdk._typesr'   ImportErrorr|   r(   r6   r9   r:   rM   r;   r   	ExceptionrF   r0   r0   r0   r1   <module>   sB    ,





E
A