§
    xÅj#  ã                   ó6  — d dl mZ d dlZd dlmZ d dlmZmZ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 erd d	l mZmZmZmZ d
edddefd„Zdddefd„Zdddefd„Zdeddddddfd„Zd%d„Zdddeddded dddfd!„Zddded
eddddf
d"„Z d
edddd#fd$„Z!dS )&é    )ÚTYPE_CHECKINGN)ÚSPANDATA)Ú"_COMMANDS_INCLUDING_SENSITIVE_DATAÚ_MAX_NUM_ARGSÚ_MAX_NUM_COMMANDSÚ_MULTI_KEY_COMMANDSÚ_SINGLE_KEY_COMMANDS)Úshould_send_default_pii)ÚStreamedSpan)ÚSpan)ÚSENSITIVE_DATA_SUBSTITUTEÚhas_data_collection_enabled)ÚAnyÚOptionalÚSequenceÚUnionÚnameÚargsúSequence[Any]Úreturnc                 óŠ  — | g}|                       ¦   «         }t          ¦   «         }t          j        ¦   «         j        }t          |¦  «        D ]à\  }}|t          k    r nÏ|t          v r|                     t          ¦  «         Œ6|dk    }|r#|                     t          |¦  «        ¦  «         Œat          |¦  «        r1|d         d         r"|                     t          |¦  «        ¦  «         Œ¡|r#|                     t          |¦  «        ¦  «         ŒÆ|                     t          ¦  «         Œád                     |¦  «        }	|	S )Nr   Údata_collectionÚdatabase_query_dataú )Úlowerr
   Ú
sentry_sdkÚ
get_clientÚoptionsÚ	enumerater   r   Úappendr   Úreprr   Újoin)
r   r   Úcommand_partsÚname_lowÚsend_default_piiÚclient_optionsÚiÚargÚarg_is_the_keyÚcommands
             úTC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/redis/utils.pyÚ_get_safe_commandr,      sE  € Ø�F€Mà�zŠz‰|Œ|€HÝ.Ñ0Ô0ÐÝÔ*Ñ,Ô,Ô4€Nå˜D‘/”/ð @ð @‰ˆˆ3Ø�}ÒÐØˆEàÕ9Ð9Ð9Ø× Ò Õ!:Ñ;Ô;Ð;Øà˜ašˆØð 		@Ø× Ò ¥ c¡¤Ñ+Ô+Ð+Ð+å*¨>Ñ:Ô:ð @Ø!Ð"3Ô4Ð5JÔKð 4Ø!×(Ò(­¨c©¬Ñ3Ô3Ð3øØ!ð @Ø×$Ò$¥T¨#¡Y¤YÑ/Ô/Ð/Ð/à×$Ò$Õ%>Ñ?Ô?Ð?Ð?à�hŠh�}Ñ%Ô%€GØ€Nó    Úkeyr   c                 ó–   — t          | t          ¦  «        r&	 |                      ¦   «         S # t          $ r Y dS w xY wt	          | ¦  «        S )NÚ )Ú
isinstanceÚbytesÚdecodeÚUnicodeDecodeErrorÚstr©r.   s    r+   Ú_safe_decoder7   4   sV   € Ý�#•uÑÔð ð	Ø—:’:‘<”<ÐøÝ!ð 	ð 	ð 	Ø�2�2ð	øøøõ ˆs‰8Œ8€Os   —+ «
9¸9c                 óü   — t          | t          t          t          f¦  «        r d                     d„ | D ¦   «         ¦  «        } n9t          | t
          ¦  «        rt          | ¦  «        } n| €d} nt          | ¦  «        } | S )Nz, c              3   ó4   K  — | ]}t          |¦  «        V — Œd S ©N)r7   )Ú.0Úxs     r+   ú	<genexpr>z!_key_as_string.<locals>.<genexpr>@   s(   è è € Ð5Ð5¨A� Q™œÐ5Ð5Ð5Ð5Ð5Ð5r-   r0   )r1   ÚdictÚlistÚtupler"   r2   r7   r5   r6   s    r+   Ú_key_as_stringrA   >   sz   € Ý�#��d¥EÐ*Ñ+Ô+ð Ø�iŠiÐ5Ð5°Ð5Ñ5Ô5Ñ5Ô5ˆˆÝ	�C�Ñ	Ô	ð Ý˜3ÑÔˆˆØ	ˆØˆˆå�#‰hŒhˆà€Jr-   Úmethod_namezOptional[tuple[Any, ...]]ÚkwargszOptional[dict[str, Any]]zOptional[tuple[str, ...]]c                 óî  — d}|�+|                       ¦   «         t          v rt          |¦  «        }nÅ|�[t          |¦  «        dk    rHt	          |d         t
          t          t          f¦  «        rt          |d         ¦  «        }nr|d         f}nh|�fd|v rbt	          |d         t          t          f¦  «        r/t          |d         ¦  «        dk    rt          |d         ¦  «        }n|d         �	|d         f}|S )z…
    Gets the key (or keys) from the given method_name.
    The method_name could be a redis command or a django caching command
    Né   r   r.   )r   r   r@   Úlenr1   r>   r?   )rB   r   rC   r.   s       r+   Ú_get_safe_keyrG   K   sî   € ð €CàÐ˜K×-Ò-Ñ/Ô/Õ3FÐFÐFå�D‰kŒkˆˆà	Ð	�c $™iœi¨1šn˜nå�d˜1”g¥¥d­EÐ2Ñ3Ô3ð 	Ý˜˜Qœ‘.”.ˆCˆCà˜”7�*ˆCˆCà	Ð	 ¨  å�f˜U”m¥d­E ]Ñ3Ô3ð 	'Ý�6˜%”=Ñ!Ô! AÒ%Ð%Ý˜F 5œMÑ*Ô*�øà�eŒ}Ð(Ø˜e”}Ð&�à€Jr-   r*   c                 ó   — | j         S r:   )r   )r*   s    r+   Ú_parse_rediscluster_commandrI   m   s
   € ØŒ<Ðr-   ÚspanzUnion[Span, StreamedSpan]Ú
is_clusterÚget_command_args_fnÚis_transactionÚcommands_seqc           	      ó˜  — t          | t          ¦  «        rd S |                      d|¦  «         |                      d|¦  «         g }t          |¦  «        D ]N\  }}|t          k    r n= ||¦  «        }|                     t          |d         |dd …         ¦  «        ¦  «         ŒO|                      dt          |¦  «        |dœ¦  «         d S )Núredis.is_clusterzredis.transactionr   rE   zredis.commands)ÚcountÚ	first_ten)	r1   r   Úset_tagr   r   r    r,   Úset_datarF   )	rJ   rK   rL   rM   rN   Úcommandsr'   r(   r*   s	            r+   Ú_set_pipeline_datarV   q   sï   € õ �$�Ñ%Ô%ð Øˆà‡L‚LÐ# ZÑ0Ô0Ð0Ø‡L‚LÐ$ nÑ5Ô5Ð5à€HÝ˜LÑ)Ô)ð Dð D‰ˆˆ3ØÕ!Ò!Ð!ØˆEà%Ð% cÑ*Ô*ˆØ�ŠÕ)¨'°!¬*°g¸a¸b¸b´kÑBÔBÑCÔCÐCÐCà‡M‚MØå˜Ñ&Ô&Ø!ð	
ð 	
ñô ð ð ð r-   c                 óÀ  — t          | t          ¦  «        r#|r |                      t          j        |¦  «         nN|                      d|¦  «         |r6|                      d|¦  «         |                      t          j        |¦  «         t          ||¦  «        }|�Et          | t          ¦  «        r|                      d|¦  «         d S |                      d|¦  «         d S d S )NrP   zredis.commandzdb.redis.keyz	redis.key)r1   r   Úset_attributer   ÚDB_OPERATION_NAMErS   ÚDB_OPERATIONÚ_extract_key)rJ   rK   r   r   r.   s        r+   Ú_set_client_datar\   �   sä   € õ �$�Ñ%Ô%ð 6Øð 	AØ×Ò�xÔ9¸4Ñ@Ô@Ð@øà�ŠÐ'¨Ñ4Ô4Ð4Øð 	6Ø�LŠL˜¨$Ñ/Ô/Ð/Ø�LŠL�Ô.°Ñ5Ô5Ð5å
�t˜TÑ
"Ô
"€CØ
€Ý�d�LÑ)Ô)ð 	+Ø×Ò˜~¨sÑ3Ô3Ð3Ð3Ð3à�LŠL˜ cÑ*Ô*Ð*Ð*Ð*ð	 €r-   zOptional[str]c                 ó”   — | r|sd S |                       ¦   «         }|t          v s|t          v rt          |¦  «        dk    r|d         S d S )NrE   r   )r   r	   r   rF   )r   r   r$   s      r+   r[   r[   ¤   sW   € Øð �tð Øˆtà�zŠz‰|Œ|€HØÕ(Ð(Ð(ØÕ'Ð'Ð'­C°©I¬I¸ªN¨Nà�AŒwˆàˆ4r-   )r*   r   r   r   )"Útypingr   r   Úsentry_sdk.constsr   Ú$sentry_sdk.integrations.redis.constsr   r   r   r   r	   Úsentry_sdk.scoper
   Úsentry_sdk.tracesr   Úsentry_sdk.tracingr   Úsentry_sdk.utilsr   r   r   r   r   r   r5   r,   r7   rA   rG   rI   ÚboolrV   r\   r[   © r-   r+   ú<module>rg      sl  ðØ  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 5Ð 4Ð 4Ð 4Ð 4Ð 4Ø *Ð *Ð *Ð *Ð *Ð *Ø #Ð #Ð #Ð #Ð #Ð #Ø SÐ SÐ SÐ SÐ SÐ SÐ SÐ Sàð 6Ø5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ð˜Cð  ð ¸3ð ð ð ð ð>�eð  ð ð ð ð ð
˜ð 
 #ð 
ð 
ð 
ð 
ðØðà
%ðð 'ðð !ð	ð ð ð ðDð ð ð ðØ
%ðàðð ðð ð	ð
 "ðð 
ðð ð ð ð>+Ø
%ð+Ø37ð+Ø?Bð+ØKPð+à	ð+ð +ð +ð +ð(
�sð 
 %ð 
¨Oð 
ð 
ð 
ð 
ð 
ð 
r-   