Ë
    õ�DjÇ  ã                   óü   — d dl 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 d dlmZ d dlmZmZ d dlmZ d d	lmZ erd d
lmZmZmZmZmZ d dlmZmZ  G d„ de«      Zd„ Z G d„ de«      Zd„ Z  G d„ d«      Z!y)é    N)ÚIntegration)Úrequest_body_within_bounds)ÚAnnotatedValueÚcapture_internal_exceptionsÚevent_from_exception)ÚBroker)ÚMessage)Ú
MiddlewareÚdefault_middleware)ÚRetry)ÚTYPE_CHECKING)ÚAnyÚCallableÚDictÚOptionalÚUnion)ÚEventÚHintc                   ó$   — e Zd ZdZdZed„ «       Zy)ÚDramatiqIntegrationa?  
    Dramatiq integration for Sentry

    Please make sure that you call `sentry_sdk.init` *before* initializing
    your broker, as it monkey patches `Broker.__init__`.

    This integration was originally developed and maintained
    by https://github.com/jacobsvante and later donated to the Sentry
    project.
    Údramatiqc                  ó   — t        «        y ©N)Ú_patch_dramatiq_broker© ó    údC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\sentry_sdk/integrations/dramatiq.pyÚ
setup_oncezDramatiqIntegration.setup_once&   s
   € ô 	Õ r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
identifierÚstaticmethodr   r   r   r   r   r      s    „ ñ	ð €Jàñ!ó ñ!r   r   c                  óF   ‡— t         j                  Šˆfd„} | t         _        y )Nc                 ó²  •— t        j                  «       j                  t        «      }	 |j	                  d«      }|€t        d„ t        D «       «      }nt        |«      }|�:|D �cg c]  }t        |t        «      rŒ|‘Œ }}|j                  dt        «       «       ||d<    ‰| g|¢­i |¤Ž y # t
        $ r t        |«      dk(  r|d   }g }nd }Y Œ•w xY wc c}w )NÚ
middlewareé   r   c              3   ó*   K  — | ]  } |«       –— Œ y ­wr   r   )Ú.0Úms     r   ú	<genexpr>zP_patch_dramatiq_broker.<locals>.sentry_patched_broker__init__.<locals>.<genexpr>A   s   è ø€ Ò> a™aŸcÑ>ùs   ‚)Ú
sentry_sdkÚ
get_clientÚget_integrationr   ÚpopÚKeyErrorÚlenÚlistr   Ú
isinstanceÚSentryMiddlewareÚinsert)ÚselfÚargsÚkwÚintegrationr'   r+   Úoriginal_broker__init__s         €r   Úsentry_patched_broker__init__z=_patch_dramatiq_broker.<locals>.sentry_patched_broker__init__0   sÝ   ø€ ä ×+Ñ+Ó-×=Ñ=Ô>QÓRˆð
	"ØŸ™ Ó-ˆJð ÐÜÑ>Ô+=Ô>Ó>‰Jä˜jÓ)ˆJàÐ"Ø%/ÖW ´zÀ!ÔEUÕ7Vš!ÐWˆJÐWØ×Ñ˜aÔ!1Ó!3Ô4à%ˆˆ<ÑÙ Ð2 tÒ2¨rÓ2øô) ò 	"ô �4‹y˜AŠ~Ø! !™W�
Ø‘à!�
ùð	"üò  Xs   ªB- Á%CÁ;CÂ-!CÃC)r   Ú__init__)r<   r;   s    @r   r   r   ,   s   ø€ ä$Ÿo™oÐô3ð8 4„F…Or   c                   ó$   — e Zd ZdZd„ Zdddœd„Zy)r5   z¾
    A Dramatiq middleware that automatically captures and sends
    exceptions to Sentry.

    This is automatically added to every instantiated broker via the
    DramatiqIntegration.
    c                 óv  — t        j                  «       j                  t        «      }|€y t        j                  «       |_        |j
                  j                  «        t        j                  «       }|j                  |_	        |j                  d|j                  «       |j                  t        ||«      «       y )NÚdramatiq_message_id)r-   r.   r/   r   Ú	new_scopeÚ_scope_managerÚ	__enter__Úget_current_scopeÚ
actor_nameÚtransactionÚ	set_extraÚ
message_idÚadd_event_processorÚ_make_message_event_processor)r7   ÚbrokerÚmessager:   Úscopes        r   Úbefore_process_messagez'SentryMiddleware.before_process_messageX   s�   € ä ×+Ñ+Ó-×=Ñ=Ô>QÓRˆØÐØä!+×!5Ñ!5Ó!7ˆÔØ×Ñ×(Ñ(Ô*ä×,Ñ,Ó.ˆØ#×.Ñ.ˆÔØ�‰Ð-¨w×/AÑ/AÔBØ×!Ñ!Ô"?ÀÈÓ"UÕVr   N)ÚresultÚ	exceptionc                óh  — t        j                  «       j                  t        «      }|€y |j	                  |j
                  «      }|j                  j                  d«      xs |j                  j                  d«      }	 |�s|rt        ||«      set        |t        «      sUt        |t        j                  «       j                  t        j                  ddœ¬«      \  }}	t        j                  ||	¬«       |j                  j                  d d d «       y # |j                  j                  d d d «       w xY w)NÚthrowsF)ÚtypeÚhandled)Úclient_optionsÚ	mechanism)Úhint)r-   r.   r/   r   Ú	get_actorrE   ÚoptionsÚgetr4   r   r   r#   Úcapture_eventrB   Ú__exit__)
r7   rK   rL   rO   rP   r:   ÚactorrR   ÚeventrW   s
             r   Úafter_process_messagez&SentryMiddleware.after_process_messagef   sû   € ä ×+Ñ+Ó-×=Ñ=Ô>QÓRˆØÐØà× Ñ  ×!3Ñ!3Ó4ˆØ—‘×$Ñ$ XÓ.ÒM°%·-±-×2CÑ2CÀHÓ2Mˆð	>àÐ%Ù¤J¨y¸&Ô$AÜ" 9¬eÔ4ä2ØÜ#-×#8Ñ#8Ó#:×#BÑ#Bä 3× >Ñ >Ø#(ñô‘��tô ×(Ñ(¨°TÕ:à×"Ñ"×+Ñ+¨D°$¸Õ=øˆG×"Ñ"×+Ñ+¨D°$¸Õ=ús   Á?A5D ÄD1)r   r    r!   r"   rN   r_   r   r   r   r5   r5   O   s   „ ñòWð @DÈtõ >r   r5   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó|   •— t        «       5  t        ‰«      j                  | «       d d d «       | S # 1 sw Y   | S xY wr   )r   ÚDramatiqMessageExtractorÚextract_into_event)r^   rW   rL   s     €r   Úinnerz,_make_message_event_processor.<locals>.inner…   s=   ø€ ä(Ó*ñ 	HÜ$ WÓ-×@Ñ@ÀÔG÷	Hð ˆ÷	Hð ˆús   Œ1±;r   )rL   r:   rd   s   `  r   rJ   rJ   ‚   s   ø€ ôð €Lr   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)rb   c                 ó@   — t        |j                  «       «      | _        y r   )ÚdictÚasdictÚmessage_data)r7   rL   s     r   r=   z!DramatiqMessageExtractor.__init__�   s   € ä  §¡Ó!1Ó2ˆÕr   c                 óR   — t        t        j                  | j                  «      «      S r   )r2   ÚjsonÚdumpsri   )r7   s    r   Úcontent_lengthz'DramatiqMessageExtractor.content_length”   s   € ä”4—:‘:˜d×/Ñ/Ó0Ó1Ð1r   c                 ó$  — t        j                  «       }|j                  «       sy |j                  di «      }|j                  di «      }d|d<   d }t	        || j                  «       «      st        j                  «       }n| j                  }||d<   y )NÚcontextsr   rS   Údata)	r-   r.   Ú	is_activeÚ
setdefaultr   rm   r   Úremoved_because_over_size_limitri   )r7   r^   Úclientro   Úrequest_inforp   s         r   rc   z+DramatiqMessageExtractor.extract_into_event˜   sˆ   € ä×&Ñ&Ó(ˆØ×ÑÔ!Øà×#Ñ# J°Ó3ˆØ×*Ñ*¨:°rÓ:ˆØ)ˆ�VÑàˆÜ)¨&°$×2EÑ2EÓ2GÔHÜ!×AÑAÓC‰Dà×$Ñ$ˆDà#ˆ�VÒr   N)r   r    r!   r=   rm   rc   r   r   r   rb   rb   �   s   „ ò3ò2ó$r   rb   )"rk   r-   Úsentry_sdk.integrationsr   Ú$sentry_sdk.integrations._wsgi_commonr   Úsentry_sdk.utilsr   r   r   Údramatiq.brokerr   Údramatiq.messager	   Údramatiq.middlewarer
   r   Údramatiq.errorsr   Útypingr   r   r   r   r   r   Úsentry_sdk._typesr   r   r   r   r5   rJ   rb   r   r   r   ú<module>r      sf   ðÛ ã Ý /Ý K÷ñ õ #Ý $ß >Ý !å  áß;Õ;ß-ô!˜+ô !ò( 4ôF0>�zô 0>òf
÷$ò $r   