
    mBNj"<                     Z   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ erd dlmZ 	 d dlZej:                  j=                  d	      Z e ed          d
kD  xs  e ed          d
k(  xr  e ed         dk\  Z!e!s e"d      	 	 d dl#Z#dZ$	 d dl%Z%dZ&d dl'm(Z(  e)       Z*de+deddfdZ,ed        Z-dee+e.f   de+fdZ/d Z0dHdZ1dee+ef   dee+ef   fdZ2d Z3d Z4dIdZ5dJd Z6	 	 	 dId!ee7e+f   d"e+d#e+d$e+d%e f
d&Z8 ed'e(      Z9	 dKd)ed*e:de;d+eee+      de;f
d,Z<	 	 	 	 dLd-eee+      d+eee+      d#e+d$e+dee9ge9f   f
d.Z=d/ Z>d
Z?	 dMd0eee+e f      d1e de@fd2ZAd3 ZBd4e+d5eCde+fd6ZDd7e+d8e+de fd9ZEd: ZF	 	 	 	 dNd;ee   d<ee   d=ee   d>ee   dee   f
d?ZGdOd@ZHdA ZIdB ZJdC ZKdPdDZLdee9ge9f   fdEZM	 dPd!ee7e+f   d"e+d%e fdFZN	 dKd-eee+      dee9ge9f   fdGZOy# e"$ r dZ!Y aw xY w# e"$ r dZ$Y hw xY w# e"$ r dZ&Y ow xY w)Q    N)Callable)contextmanager)wraps)TYPE_CHECKINGAnyDictListMappingOptionalTypeVarUnion)	DataError)
AbsExpiryT
EncodableTExpiryTRedis.         z"hiredis package should be >= 3.2.0FT)metadataurlkwargsreturnr   c                 4    ddl m}  |j                  | fi |S )z
    Returns an active Redis client generated from the given database URL.

    Will attempt to extract the database id from the path url fragment, if
    none is provided.
    r   r   )redis.clientr   from_url)r   r   r   s      \/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/redis/utils.pyr   r   4   s     #5>>#(((    c              #   T   K   | j                         }| |j                          y wN)pipelineexecute)	redis_objps     r   r#   r#   @   s"     A
GIIKs   &(valuec                 L    t        | t              r| j                  dd      S | S )Nutf-8replace)errors)
isinstancebytesdecoder'   s    r   str_if_bytesr0   G   s(    3=eU3KWY/QVr    c                 *    t        t        |             S r"   )strr0   r/   s    r   safe_strr3   M   s    |E"##r    c                     t        | t              s| S |r!|||v r||   }|| S | j                  |d      S t        |       S )a  Decode a field value respecting optional per-field encoding overrides.

    - If *field_encodings* is provided and *key* is in it, the corresponding
      encoding is used (``None`` means keep raw bytes).
    - Otherwise falls back to :func:`str_if_bytes`.
    r*   )r,   r-   r.   r0   )r'   keyfield_encodingsencodings       r   decode_field_valuer8   Q   sR     eU#3?so/E"3'L||Hi00r    dictsc                  :    i }| D ]  }|j                  |        |S )za
    Merge all provided dicts into 1 dict.
    *dicts : `dict`
        dictionaries to merge
    )update)r9   mergedds      r   
dict_merger>   b   s&     Fa  Mr    c                 .    t         j                  | |      S r"   )dictfromkeys)key_listcallbacks     r   list_keys_to_dictrD   p   s    ==8,,r    c                     t               }|j                         D ]  }|D ]  }|j                  |         t        |      S )z
    Merge all items in `res` into a list.

    This command is used when sending a command to multiple nodes
    and the result from each node should be merged into a single list.

    res : 'dict'
    )setvaluesaddlist)commandresresultvr'   s        r   merge_resultrN   t   s=     UFZZ\EJJu   <r    c                 v    dd l }d|  d}|r	|d| dz  }|r	|d| dz  } |j                  |t        |       y )Nr   zCall to deprecated r    () -- Deprecated since version category
stacklevelwarningswarnDeprecationWarning)namereasonversionrU   rW   msgs         r   warn_deprecatedr^      sR    vQ
'CF81~.wiq99HMM# 2zJr    c                       fd}|S )z5
    Decorator to mark a function as deprecated.
    c                      t        j                         rt                fd       }|S t                fd       }|S )Nc                  j   K   t        xs j                  d        | i | d {   S 7 wNr   rU   r^   __name__argsr   funcrZ   r[   r\   s     r   async_wrapperz=deprecated_function.<locals>.decorator.<locals>.async_wrapper   s5      5vwSTU!4262222s   )313c                  N    t        xs j                  d        | i |S rb   rd   rf   s     r   wrapperz7deprecated_function.<locals>.decorator.<locals>.wrapper   s+     5vwSTUT,V,,r    inspectiscoroutinefunctionr   )rh   ri   rk   rZ   r[   r\   s   `  r   	decoratorz&deprecated_function.<locals>.decorator   sN    &&t,4[3 3 !  4[- - Nr     )r[   r\   rZ   ro   s   ``` r   deprecated_functionrq      s    
$ r    arg_namefunction_namer[   r\   rU   c                 |    dd l }d| d|  d}|r	|d| dz  }|r	|d| dz  } |j                  |t        |	       y )
Nr   	Call to 'z6' function with deprecated usage of input argument/s ''.rP   rQ   rR   r   rS   rV   )rr   rs   r[   r\   rU   rW   r]   s          r   warn_deprecated_arg_usagerw      sg      M? #''/j	4  F81~.wiq99HMM# 2zJr    C)boundrh   rg   allowed_argsc                    | j                   j                  d| j                   j                   }t        t	        ||            }|j                  |       |j                  dd       |r|D ]  }|j                  |d        |S )z
    Extract arguments from function call that should be checked for deprecation/experimental warnings.
    Excludes 'self' and any explicitly allowed args.
    Nself)__code__co_varnamesco_argcountr@   zipr;   pop)rh   rg   r   rz   	arg_namesfilterable_argsallowed_args          r   _get_filterable_argsr      sw     ))*EDMM,E,EFI3y$/0O6"%'KT2 (r    args_to_warnc                 V      dg g  fddt         dt         ffd}|S )z
    Decorator to mark specified args of a function as deprecated.
    If '*' is in args_to_warn, all arguments will be marked as deprecated.
    *c                     D ]f  }|dk(  r@t        |      dkD  r2t        t        |j                               | j                  d       H||v sMt        || j                  d       h y)z*Check and warn about deprecated arguments.r   r      rc   N)lenrw   rI   keysre   )rh   r   argr   r[   r\   s      r   _check_deprecated_argsz/deprecated_args.<locals>._check_deprecated_args   sj    Cczc/2Q6)--/0MM  ')A  r    rh   r   c                      t        j                         rt                fd       }|S t                fd       }|S )Nc                  ^   K   t        | |      } |        | i | d {   S 7 wr"   r   rg   r   r   r   rz   rh   s      r   ri   z9deprecated_args.<locals>.decorator.<locals>.async_wrapper   s7     "6tT6<"X&t_=!4262222   #-+-c                  B    t        | |      } |        | i |S r"   r   r   s      r   rk   z3deprecated_args.<locals>.decorator.<locals>.wrapper   s-    "6tT6<"X&t_=T,V,,r    rl   )rh   ri   rk   r   rz   s   `  r   ro   z"deprecated_args.<locals>.decorator   sN    &&t,4[3 3
 !  4[- -
 Nr    rx   )r   rz   r[   r\   ro   r   s   ```` @r   deprecated_argsr      s=     u  a ( r    c                  ^   dt         j                  j                  j                  j	                         vryt        j
                  d      } | j                  t         j                         t        j                         }|j                  t         j                         | j                  |       yy)zo
    Set up a logger that log info logs to stdout.
    (This is used by the default push response handler)
    push_responseN)
loggingrootmanager
loggerDictr   	getLoggersetLevelINFOStreamHandler
addHandler)loggerhandlers     r   _set_info_loggerr   	  sy    
 gll22==BBDD""?3%'')&'" Er    protocolexpected_versionc                 |    | t         } t        | t              r	 t        |       } | |k(  S | |k(  S # t        $ r Y yw xY w)NF)DEFAULT_RESP_VERSIONr,   r2   int
ValueError)r   r   s     r   check_protocol_versionr     sT     '(C 	8}H '''8'''  		s   / 	;;c                  j    	 t        j                  d      } | S # t         j                  $ r d} Y | S w xY w)Nredisz99.99.99)r   r\   PackageNotFoundError)libvers    r   get_lib_versionr   +  s?    !!'* M (( Ms    22
host_error	exceptionc                     |j                   sd|  dS t        |j                         dk(  rd|j                   d    d|  dS d|j                   d    d|  d|j                   d    dS )NzError connecting to r   r   zError r   z connecting to z. )rg   r   )r   r   s     r   format_error_messager   3  s~    >>%j\33	Y^^		!	q)*/*QGG Y^^A&'zl"~~a !$	
r    version1version2c                 <   t        t        t        | j                  d                  }t        t        t        |j                  d                  }t	        |      t	        |      kD  r9t	        |      t	        |      z
  }t        |      D ]  }|j                  d        nOt	        |      t	        |      k  r8t	        |      t	        |      z
  }t        |      D ]  }|j                  d        t        |      D ]  \  }}||   ||   kD  r y||   ||   k  s y y)z
    Compare two versions.

    :return: -1 if version1 > version2
             0 if both versions are equal
             1 if version1 < version2
    r   r   r   )rI   mapr   splitr   rangeappend	enumerate)r   r   num_versions1num_versions2diff_ivers           r   compare_versionsr   ?  s     S(.."567MS(.."567M
=C..=!C$66tA  # 	]	c-0	0=!C$66tA  #  M*3mA..1a 00	 + r    c                 ~    t        | t              r| j                  d      S t        | t              r| S t	        d      )Nr)   z$Key must be either a string or bytes)r,   r-   r.   r2   	TypeError)r5   s    r   ensure_stringr   ]  s6    #uzz'""	C	
>??r    expxexatpxatc                    g }| |j                  d       t        | t        j                        r*|j                  t	        | j                                      |S t        | t              r|j                  |        |S t        | t              r,| j                         r|j                  t	        |              |S t        d      ||j                  d       t        |t        j                        r-|j                  t	        |j                         dz               |S t        |t              r|j                  |       |S t        d      |Ht        |t        j                        rt	        |j                               }|j                  d|g       |S |It        |t        j                        rt	        |j                         dz        }|j                  d|g       |S )NEXz$ex must be datetime.timedelta or intPXi  z$px must be datetime.timedelta or intEXATPXAT)r   r,   datetime	timedeltar   total_secondsr2   isdigitr   	timestampextend)r   r   r   r   exp_optionss        r   extract_expire_flagsr   f  s    %'K	~4 b(,,-s2#3#3#5670 / C r", + C RZZ\s2w'( % BCC	4 b(,,-s2#3#3#5#<=>  C r"  BCC		dH--.t~~'(DFD>*  
	dH--.t~~'$./DFD>*r    c                 4    t        j                  | |dd      S )Nz...T)textwidthplaceholderbreak_long_words)textwrapshorten)txt
max_lengths     r   truncate_textr     s    
 r    c                       y)zT
    Fake function for a Retry object if you don't need to handle each failure.
    Nrp   rp   r    r   
dummy_failr     s     	r    c                     K   yw)zZ
    Async fake function for a Retry object if you don't need to handle each failure.
    Nrp   rp   r    r   dummy_fail_asyncr     s      	s   c                 X      j                   t               fd       }| _          S )z4
    Decorator to mark a class as experimental.
    c                 p    t        j                  j                   dt        d        | g|i | y )NzD is an experimental and may change or be removed in future versions.r   rS   )rW   rX   re   UserWarning)r|   rg   r   clsoriginal_inits      r   new_initzexperimental.<locals>.new_init  s8    ||n`a 	

 	d,T,V,r    )__init__r   )r   r   r   s   ` @r   experimentalr     s3     LLM
=- - CLJr    c                 J    dd l }d|  d} |j                  |t        |       y )Nr   zCall to experimental method zS. Be aware that the function arguments can change or be removed in future versions.rS   rW   rX   r   )rZ   rU   rW   r]   s       r   warn_experimentalr     s1     'tf -3 	3 
 HMM#
Cr    c                  &    dt         dt         fd} | S )z7
    Decorator to mark a function as experimental.
    rh   r   c                      t        j                         rt                fd       }|S t                fd       }|S )Nc                  ^   K   t        j                  d        | i | d {   S 7 wNr   rc   r   re   rg   r   rh   s     r   ri   z=experimental_method.<locals>.decorator.<locals>.async_wrapper  s+     !$--A>!4262222r   c                  B    t        j                  d        | i |S r   r   r   s     r   rk   z7experimental_method.<locals>.decorator.<locals>.wrapper  s!    !$--A>T,V,,r    rl   )rh   ri   rk   s   `  r   ro   z&experimental_method.<locals>.decorator  sN    &&t,4[3 3 !  4[- - Nr    r   )ro   s    r   experimental_methodr     s    
 a $ r    c                 P    dd l }d| d|  d} |j                  |t        |       y )Nr   ru   z6' method with experimental usage of input argument/s 'rv   rS   r   )rr   rs   rU   rW   r]   s        r   warn_experimental_arg_usager     s:    
  M? #''/j	4  HMM#
Cr    c                 B      dg  fddt         dt         ffd}|S )z
    Decorator to mark specified args of a function as experimental.
    If '*' is in args_to_warn, all arguments will be marked as experimental.
    r   c                     D ]b  }|dk(  r>t        |      dkD  r0t        t        |j                               | j                  d       F||v sKt        || j                  d       d y)z,Check and warn about experimental arguments.r   r      rc   N)r   r   rI   r   re   )rh   r   r   r   s      r   _check_experimental_argsz3experimental_args.<locals>._check_experimental_args  s[    Cczc/2Q6+--/0$--A '+C1M  r    rh   r   c                      t        j                         rt                fd       }|S t                fd       }|S )Nc                  x   K   t        | |      }t        |      dkD  r	 |        | i | d {   S 7 wNr   r   r   rg   r   r   r   rh   s      r   ri   z;experimental_args.<locals>.decorator.<locals>.async_wrapper  sB     "6tT6"J'!+,T?C!4262222s   0:8:c                  \    t        | |      }t        |      dkD  r	 |        | i |S r  r  r  s      r   rk   z5experimental_args.<locals>.decorator.<locals>.wrapper  s8    "6tT6"J'!+,T?CT,V,,r    rl   )rh   ri   rk   r   s   `  r   ro   z$experimental_args.<locals>.decorator  sN    &&t,4[3 3 !  4[- - Nr    r   )r   ro   r   s   ` @r   experimental_argsr    s3     uN a , r    )NN) r  r   )r  r  Nr"   )NNr  r  )r   )NNNN)d   )r   )Pr   rm   r   r   rW   collections.abcr   
contextlibr   	functoolsr   typingr   r   r   r	   r
   r   r   r   redis.exceptionsr   redis.typingr   r   r   r   r   hiredis__version__r   hiredis_versionr   HIREDIS_AVAILABLEImportErrorsslSSL_AVAILABLEcryptographyCRYPTOGRAPHY_AVAILABLE	importlibr   objectSENTINELr2   r   r#   r-   r0   r3   r8   r>   rD   rN   r^   rq   rI   rw   rx   tupler@   r   r   r   r   boolr   r   BaseExceptionr   r   r   r   r   r   r   r   r   r   r   r  rp   r    r   <module>r     s        $ %  T T T & 8 8" ))//4OOA./!3 OA1$E_Q-?)@A)E  >?? 
M#! 
 8	)# 	) 	) 	)  c5j) c $"wsCx( T#s(^ -$K: KD#IKK K 	K
 K( Cx  TX
)-=Ed3i=P	$ )-(,	349%349%3 3 	3
 qc1f3l
#$   BC
(uS#X'
(;>
(	
(	
S 	
] 	
s 	
s c c <@ ! !%!%	""" :
" :
	"
 
*"J		&DXqc1f- : DD#IDD D )-*49%*qc1f*U    M  #"#s7   AH -H 4H HHHHH*)H*