
    tnir                        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 erd dlmZmZmZ d dl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S )#    )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)SpannameargsSequence[Any]returnc                    | g}|                                  }t                      }t          |          D ]\  }}|t          k    r n|t          v r|                    t                     6|dk    }|r#|                    t          |                     a|r#|                    t          |                     |                    t                     d                    |          }|S )Nr    )	lowerr	   	enumerater   r   appendr
   reprjoin)	r   r   command_partsname_lowsend_default_piiiargarg_is_the_keycommands	            `/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/redis/utils.py_get_safe_commandr#      s    FMzz||H.00D// @ @3}E999  !:;;;a 	@  c++++ @$$T#YY////$$%>????hh}%%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_decoder.   .   sV    #u 	::<<! 	 	 	22	 s88Os   + 
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)r.   ).0xs     r"   	<genexpr>z!_key_as_string.<locals>.<genexpr>:   s(      55AQ555555r$   r'   )r(   dictlisttupler   r)   r.   r,   r-   s    r"   _key_as_stringr8   8   sz    #dE*++ ii5555555	C		 3	#hh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   r7   lenr(   r5   r6   )r9   r   r:   r%   s       r"   _get_safe_keyr>   E   s     CK--//3FFFDkk		c$ii1nnd1gdE233 	Q..CC7*CC		fUmdE]33 	'6%=!!A%%F5M**e}(e}&Jr$   r!   c                     | j         S r1   )r   )r!   s    r"   _parse_rediscluster_commandr@   g   s
    <r$   spanr   
is_clusterget_command_args_fnis_transactioncommands_seqNc           	      j   |                      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   r<   zredis.commands)count	first_ten)set_tagr   r   r   r#   set_datar=   )	rA   rB   rC   rD   rE   commandsr   r   r!   s	            r"   _set_pipeline_datarM   k   s     	LL#Z000LL$n555HL)) D D3!!!E%%c**)'!*gabbkBBCCCCMM&&!	
 	
    r$   c                 d   |                      d|           |r6|                      d|           |                      t          j        |           |rY|rY|                                }|t          v s|t
          v r5t          |          dk    r$|                      d|d                    d S d S d S d S d S )NrG   zredis.commandr<   z	redis.keyr   )rJ   r   DB_OPERATIONr   r   r   r=   )rA   rB   r   r   r   s        r"   _set_client_datarP      s    LL#Z000 2_d+++X*D111 / /::<<,,,+++D		QLLd1g...../ / / / ,+r$   )r!   r   r   r   )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#   r.   r8   r>   r@   boolrM   rP    r$   r"   <module>rY      s   & & & & & &              5 4 4 4 4 4 6 6 6 6 6 6             (..........''''''C  3    6e     
 
# 
 
 
 

% ' !	   D   
  	
 " 
   6/6 /t /3 /u /QU / / / / / /r$   