§
    xÅjG"  ã                   óP  — d dl Z d dlZd dlZd dlmZ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 d dlmZ d dlmZmZ 	 d d	lmZ n# e$ r  ed
¦  «        ‚w xY wd dlmZ erd dlmZmZmZ d dlmZm Z m!Z! g d¢Z"dd„Z#dd„Z$ G d„ dej%        ¦  «        Z& G d„ de	¦  «        Z'dS )é    N)ÚOPÚSPANDATAÚ
SPANSTATUS)ÚDidNotEnableÚIntegration)Úshould_send_default_pii)Ú
SpanStatusÚStreamedSpan)ÚSpan)Úhas_span_streaming_enabled)Úcapture_internal_exceptionsÚhas_data_collection_enabled)Ú
monitoringzPymongo not installed)ÚTYPE_CHECKING)ÚAnyÚDictÚUnion)ÚCommandFailedEventÚCommandStartedEventÚCommandSucceededEvent)ÚinsertÚorderedÚfindÚlimitÚsingleBatchÚ	aggregateÚcreateIndexesÚindexesÚdeleteÚfindAndModifyÚrenameCollectionÚtoÚdropÚcommandúDict[str, Any]Úreturnc                 ó"  — | D ]‹}|t           v }|rŒ|dk    od| v}|rŒ|dk    }|r| |         D ]}|D ]}d||<   ŒŒŒ9|dv }|r| |         D ]}d| |         |<   ŒŒV|dk    }	|	r(| |         D ]}
d|
v r|
d         ng D ]}d|
d         |<   ŒŒŒ†d| |<   ŒŒ| S )NÚupdater    Ú	documentsz%s)ÚfilterÚqueryr(   Úpipelinez$match)ÚSAFE_COMMAND_ATTRIBUTES)r$   ÚkeyÚis_safe_fieldÚupdate_db_commandÚis_documentÚdocÚdoc_keyÚis_dict_fieldÚitem_keyÚis_pipeline_fieldr,   Ú	match_keys               úPC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/pymongo.pyÚ
_strip_piir9   /   sE  € Øð $ð $ˆØÕ6Ð6ˆØð 	àà 8šOÐN°ÀwÐ0NÐØð 	ð ð ˜[Ò(ˆØð 	Ø˜s”|ð (ð (�Ø"ð (ð (�GØ#'�C˜‘L�Lð(àð Ð<Ð<ˆØð 	Ø# CœLð .ð .�Ø)-�˜”˜XÑ&Ð&Øð   :Ò-ÐØð 	Ø# CœLð 9ð 9�Ø7?À8Ð7KÐ7K ¨(Ô!3Ð!3ÐQSð 9ð 9�IØ48�H˜XÔ& yÑ1Ð1ð9àð ˆ�‰ˆà€Nó    Úeventr   c                 óZ  — i }t          j        ¦   «         }t          |j        ¦  «        }d|t          j        <   | j        }| j        d         }|�||t          j        <   | j        d         }|�||t          j	        <   |rd|d<   |�||d<   n d|t          j
        <   |�||t          j        <   |S )NÚpymongor   é   Úmongodbzdb.system.namezdb.namespace)Ú
sentry_sdkÚ
get_clientr   Úoptionsr   ÚDB_DRIVER_NAMEÚdatabase_nameÚconnection_idÚSERVER_ADDRESSÚSERVER_PORTÚ	DB_SYSTEMÚDB_NAME)r;   ÚdataÚclientÚis_span_streaming_enabledÚdb_nameÚserver_addressÚserver_ports          r8   Ú_get_db_datarP   Y   sÃ   € Ø€DåÔ"Ñ$Ô$€FÝ :¸6¼>Ñ JÔ JÐà$-€D�Ô	 Ñ!ØÔ!€GàÔ(¨Ô+€NØÐ!Ø(6ˆ�XÔ$Ñ%àÔ% aÔ(€KØÐØ%0ˆ�XÔ!Ñ"à ð 	-Ø!*ˆÐÑàÐØ#*ˆD�Ñ øà#,ˆ�XÔÑ àÐØ%,ˆD•Ô!Ñ"à€Kr:   c                   ó>   — e Zd Zdd„Zdddefd„Zdd„Zdd
„Zdd„ZdS )ÚCommandTracerr&   Nc                 ó   — i | _         d S ©N)Ú_ongoing_operations)Úselfs    r8   Ú__init__zCommandTracer.__init__y   s   € ØKMˆÔ Ð Ð r:   r;   zEUnion[CommandFailedEvent, CommandStartedEvent, CommandSucceededEvent]c                 ó   — |j         S rT   )Ú
request_id)rV   r;   s     r8   Ú_operation_keyzCommandTracer._operation_key|   s   € ð ÔÐr:   r   c                 ó˜  — t          j        ¦   «         }|                     t          ¦  «        €d S t	          ¦   «         5  t          t          j        |j        ¦  «        ¦  «        }| 	                    dd ¦  «         | 	                    dd ¦  «         | 	                    dd ¦  «         t          |¦  «        }|                     |j        ¦  «        }|j        }|j        }| 	                    dd ¦  «        }t          |j        ¦  «        r#|j        d         d         st!          |¦  «        }nt#          ¦   «         st!          |¦  «        }t%          j        |t(          ¬¦  «        }	t+          |j        ¦  «        rÃd|d	|t,          j        |	d
t0          j        dt          j        i|¥}
t	          ¦   «         5  t          j        |	dt0          j        |
¬¦  «         d d d ¦  «         n# 1 swxY w Y   t           j                             ¦   «         €	 d d d ¦  «         d S t           j                             |	|
¬¦  «        }�nÉd|t,          j        dt,          j         dt,          j!        |t,          j"        |i}	 |j#        d         |d<   t)          |j#        d         ¦  «        |d<   n# tH          $ r Y nw xY wdi i}|j%        |d         d<   |j&        |d         d<   | '                    |¦  «         	 |r |d         }t)          |¦  «        |d         d<   n# tP          $ r Y nw xY wt          j        t0          j        |	t          j        ¬¦  «        }| )                    ¦   «         D ]1\  }}| *                    ||¦  «         | +                    ||¦  «         Œ2| )                    ¦   «         D ]\  }}| +                    ||¦  «         Œt	          ¦   «         5  t          j        |	dt0          j        |¬¦  «         d d d ¦  «         n# 1 swxY w Y   | ,                    ¦   «         | j-        |  .                    |¦  «        <   d d d ¦  «         d S # 1 swxY w Y   d S )Nz$dbz$clusterTimez
$signatureÚlsidÚdata_collectionÚdatabase_query_data)Údefaultzdb.operation.namezdb.collection.namez	sentry.opzsentry.originr+   )ÚmessageÚcategoryÚtyperJ   )ÚnameÚ
attributeszdb.namer?   r=   r   znet.peer.namer>   znet.peer.portÚoperation_idsÚ	operationÚrequestÚidÚsession)Úoprc   Úorigin)/r@   rA   Úget_integrationÚPyMongoIntegrationr   ÚdictÚcopyÚdeepcopyr$   ÚpoprP   ÚgetÚcommand_namerD   r   rB   r9   r   ÚjsonÚdumpsÚstrr   r   ÚDB_QUERY_TEXTr   ÚDBrk   Úadd_breadcrumbÚtracesÚget_current_spanÚ
start_spanrH   rC   ÚDB_OPERATIONÚDB_MONGODB_COLLECTIONrE   Ú	TypeErrorÚoperation_idrY   r(   ÚKeyErrorÚitemsÚset_tagÚset_dataÚ	__enter__rU   rZ   )rV   r;   rK   r$   Údb_dataÚcollection_nameÚoperation_namerM   r\   r+   Úspan_first_dataÚspanÚtagsrJ   Úlsid_idÚtagÚvaluer.   s                     r8   ÚstartedzCommandTracer.started‚   sq  € ÝÔ&Ñ(Ô(ˆØ×!Ò!Õ"4Ñ5Ô5Ð=ØˆFå(Ñ*Ô*ð a	Tð a	TÝ�4œ=¨¬Ñ7Ô7Ñ8Ô8ˆGà�KŠK˜˜tÑ$Ô$Ð$Ø�KŠK˜¨Ñ-Ô-Ð-Ø�KŠK˜ dÑ+Ô+Ð+å" 5Ñ)Ô)ˆGà%Ÿkšk¨%Ô*<Ñ=Ô=ˆOØ"Ô/ˆNØÔ)ˆGà—;’;˜v tÑ,Ô,ˆDÝ*¨6¬>Ñ:Ô:ð .Ø”~Ð&7Ô8Ð9NÔOð 2Ý(¨Ñ1Ô1�GøÝ,Ñ.Ô.ð .Ý$ WÑ-Ô-�å”J˜wµÐ4Ñ4Ô4ˆEå)¨&¬.Ñ9Ô9ð Ià'¨Ø(¨/ÝÔ*¨EØ¥¤Ø#Õ%7Ô%>ð#ð ð#�õ 1Ñ2Ô2ð ð ÝÔ-Ø %Ø!(ÝœUØ,ð	ñ ô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ Ô$×5Ò5Ñ7Ô7Ð?ØðSa	Tð a	Tð a	Tñ a	Tô a	Tð a	Tð a	Tð a	TõV "Ô(×3Ò3Ø¨?ð 4ñ ô �‘ð ˜wÝÔ&¨	ÝÔ+¨YÝÔ)¨>õ Ô2°Oð�ðØ,1Ô,?ÀÔ,B�D˜Ñ)Ý,/°Ô0CÀAÔ0FÑ,GÔ,G�D˜Ñ)Ð)øÝ ð ð ð Ø�Dðøøøð +:¸2Ð)>�Ø5:Ô5G��_Ô% kÑ2Ø38Ô3C��_Ô% iÑ0à—’˜GÑ$Ô$Ð$ðØð HØ"& t¤*˜Ý;>¸w¹<¼<˜˜_Ô-¨iÑ8øøÝð ð ð Ø�Dðøøøõ "Ô,Ý”uØÝ-Ô4ðñ ô �ð #'§*¢*¡,¤,ð .ð .‘J�C˜ð —L’L  eÑ,Ô,Ð,Ø—M’M # uÑ-Ô-Ð-Ð-à"&§*¢*¡,¤,ð .ð .‘J�C˜Ø—M’M # uÑ-Ô-Ð-Ð-å0Ñ2Ô2ð ð ÝÔ-Ø %°½b¼eÈ$ðñ ô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
 DHÇ>Â>ÑCSÔCSˆDÔ$ T×%8Ò%8¸Ñ%?Ô%?Ñ@ðCa	Tð a	Tð a	Tñ a	Tô a	Tð a	Tð a	Tð a	Tð a	Tð a	Tð a	Tð a	Tøøøð a	Tð a	Tð a	Tð a	Tð a	Tð a	Tsª   ¾E3P?Æ1#G ÇP?Ç G$	Ç$P?Ç'G$	Ç("P?ÈAP?É/-JÊP?Ê
J*Ê'P?Ê)J*Ê*<P?Ë'"L
Ì	P?Ì

LÌP?ÌLÌB2P?Ï	#O8Ï,P?Ï8O<	Ï<P?Ï?O<	Ð 2P?Ð?QÑQr   c                 óÆ  — t          j        ¦   «                              t          ¦  «        €d S 	 | j                             |                      |¦  «        ¦  «        }t          |¦  «        t          u rt          j
        |_        n5t          |¦  «        t          u r|                     t          j        ¦  «         |                     d d d ¦  «         d S # t"          $ r Y d S w xY wrT   )r@   rA   rl   rm   rU   rq   rZ   rb   r
   r	   ÚERRORÚstatusr   Ú
set_statusr   ÚINTERNAL_ERRORÚ__exit__r�   ©rV   r;   rŠ   s      r8   ÚfailedzCommandTracer.failedê   sÏ   € ÝÔ Ñ"Ô"×2Ò2Õ3EÑFÔFÐNØˆFð		ØÔ+×/Ò/°×0CÒ0CÀEÑ0JÔ0JÑKÔKˆDå�D‰zŒz�\Ð)Ð)Ý(Ô.�”�Ý�d‘”�tÐ#Ð#Ø—’¥
Ô 9Ñ:Ô:Ð:Ø�MŠM˜$  dÑ+Ô+Ð+Ð+Ð+øÝð 	ð 	ð 	ØˆFˆFð	øøøs   ¯B!C Ã
C ÃC r   c                 óv  — t          j        ¦   «                              t          ¦  «        €d S 	 | j                             |                      |¦  «        ¦  «        }t          |¦  «        t          u r| 	                    t          j        ¦  «         |                     d d d ¦  «         d S # t          $ r Y d S w xY wrT   )r@   rA   rl   rm   rU   rq   rZ   rb   r   r“   r   ÚOKr•   r�   r–   s      r8   Ú	succeededzCommandTracer.succeededù   s±   € ÝÔ Ñ"Ô"×2Ò2Õ3EÑFÔFÐNØˆFð	ØÔ+×/Ò/°×0CÒ0CÀEÑ0JÔ0JÑKÔKˆDÝ�D‰zŒz�TÐ!Ð!Ø—’¥
¤Ñ.Ô.Ð.Ø�MŠM˜$  dÑ+Ô+Ð+Ð+Ð+øÝð 	ð 	ð 	ØˆDˆDð	øøøs   ¯A9B* Â*
B8Â7B8©r&   N)r;   r   r&   N)r;   r   r&   N)r;   r   r&   N)	Ú__name__Ú
__module__Ú__qualname__rW   ÚintrZ   r�   r—   rš   © r:   r8   rR   rR   x   s—   € € € € € ðNð Nð Nð Nð àVð ð 
ð ð  ð  ð  ðfTð fTð fTð fTðPð ð ð ð
ð 
ð 
ð 
ð 
ð 
r:   rR   c                   ó4   — e Zd ZdZde› �Zedd„¦   «         ZdS )rm   r=   zauto.db.r&   Nc                  óF   — t          j        t          ¦   «         ¦  «         d S rT   )r   ÚregisterrR   r    r:   r8   Ú
setup_oncezPyMongoIntegration.setup_once
  s   € åÔ�M™OœOÑ,Ô,Ð,Ð,Ð,r:   r›   )rœ   r�   rž   Ú
identifierrk   Ústaticmethodr¤   r    r:   r8   rm   rm     sD   € € € € € Ø€JØ$˜
Ð$Ð$€Fàð-ð -ð -ñ „\ð-ð -ð -r:   rm   )r$   r%   r&   r%   )r;   r   r&   r%   )(ro   rt   r@   Úsentry_sdk.constsr   r   r   Úsentry_sdk.integrationsr   r   Úsentry_sdk.scoper   Úsentry_sdk.tracesr	   r
   Úsentry_sdk.tracingr   Úsentry_sdk.tracing_utilsr   Úsentry_sdk.utilsr   r   r=   r   ÚImportErrorÚtypingr   r   r   r   Úpymongo.monitoringr   r   r   r-   r9   rP   ÚCommandListenerrR   rm   r    r:   r8   ú<module>r²      s  ðØ €€€Ø €€€à Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø #Ð #Ð #Ð #Ð #Ð #Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ Uð0Ø"Ð"Ð"Ð"Ð"Ð"Ð"øØð 0ð 0ð 0Ø
ˆ,Ð.Ñ
/Ô
/Ð/ð0øøøð !Ð  Ð  Ð  Ð  Ð  àð Ø'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ðð ð ð ð ð ð ð ð ð ðð ð Ð ð"'ð 'ð 'ð 'ðTð ð ð ð>Kð Kð Kð Kð K�JÔ.ñ Kô Kð Kð\-ð -ð -ð -ð -˜ñ -ô -ð -ð -ð -s   ÁA	 Á	A