
    gh                         S SK Jr  S SKJrJrJrJrJr  S SKJ	r	  S SK
Jr  S SKJr  \(       a  S SKJrJrJr  S SKJr  S rS	 rS
 rS rS rS rS rg)    )SPANDATA)"_COMMANDS_INCLUDING_SENSITIVE_DATA_MAX_NUM_ARGS_MAX_NUM_COMMANDS_MULTI_KEY_COMMANDS_SINGLE_KEY_COMMANDS)should_send_default_pii)SENSITIVE_DATA_SUBSTITUTE)TYPE_CHECKING)AnyOptionalSequence)Spanc                    U /n[        U5       H  u  p4U[        :  a    OU R                  5       nU[        ;   a  UR	                  [
        5        MB  US:H  nU(       a  UR	                  [        U5      5        Mj  [        5       (       a  UR	                  [        U5      5        M  UR	                  [
        5        M     SR                  U5      nU$ )Nr    )		enumerater   lowerr   appendr
   reprr	   join)nameargscommand_partsiargname_lowarg_is_the_keycommands           f/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sentry_sdk/integrations/redis/utils.py_get_safe_commandr       s    FMD/}::<99  !:;a  c+ '(($$T#Y/$$%>?% "( hh}%GN    c                     [        U [        5      (       a   U R                  5       $ [	        U 5      $ ! [         a     gf = f)N )
isinstancebytesdecodeUnicodeDecodeErrorstrkeys    r   _safe_decoder+   /   s?    #u	::< s8O " 		s   2 
??c                     [        U [        [        [        45      (       a  SR	                  S U  5       5      n U $ [        U [
        5      (       a  [        U 5      n U $ U c  Sn U $ [        U 5      n U $ )Nz, c              3   8   #    U  H  n[        U5      v   M     g 7fN)r+   ).0xs     r   	<genexpr>!_key_as_string.<locals>.<genexpr>=   s     5AQs   r#   )r$   dictlisttupler   r%   r+   r(   r)   s    r   _key_as_stringr6   :   st    #dE*++ii555 J 
C		3 J 
 J #hJr!   c                    SnUb%  U R                  5       [        ;   a  [        U5      nU$ UbK  [        U5      S:  a<  [	        US   [
        [        [        45      (       a  [        US   5      nU$ US   4n U$ UbR  SU;   aL  [	        US   [        [        45      (       a"  [        US   5      S:  a  [        US   5      nU$ US   b  US   4nU$ )zy
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   r5   lenr$   r3   r4   )method_namer   kwargsr*   s       r   _get_safe_keyr<   H   s     CK--/3FFDk$ J! 
	c$i1nd1gdE233Q.C J 7*C J 
	fUmdE]336%=!A%F5M*
 J e}(e}&Jr!   c                     U R                   $ r.   )r   )r   s    r   _parse_rediscluster_commandr>   g   s    <<r!   c           	         U R                  SU5        U R                  SU5        / n[        U5       H:  u  pgU[        :  a    O-U" U5      nUR                  [	        US   USS  5      5        M<     U R                  S[        U5      US.5        g )Nredis.is_clusterzredis.transactionr   r8   zredis.commands)count	first_ten)set_tagr   r   r   r    set_datar9   )	span
is_clusterget_command_args_fnis_transactioncommands_seqcommandsr   r   r   s	            r   _set_pipeline_datarK   l   s     	LL#Z0LL$n5HL)!!%c*)'!*gabkBC * 	MM&!	
r!   c                 N   U R                  SU5        U(       a2  U R                  SU5        U R                  [        R                  U5        U(       aS  U(       aK  UR                  5       nU[        ;   d  U[
        ;   a&  [        U5      S:X  a  U R                  SUS   5        g g g g g )Nr@   zredis.commandr8   z	redis.keyr   )rC   r   DB_OPERATIONr   r   r   r9   )rE   rF   r   r   r   s        r   _set_client_datarN      s    LL#Z0_d+X**D1::<,,++D	QLLd1g. 1?+ tr!   N)sentry_sdk.constsr   $sentry_sdk.integrations.redis.constsr   r   r   r   r   sentry_sdk.scoper	   sentry_sdk.utilsr
   typingr   r   r   r   sentry_sdk.tracingr   r    r+   r6   r<   r>   rK   rN    r!   r   <module>rV      sL    &  5 6  ..'8>
8/r!   