
    +h                         d dl Z d dlZd dlZd dlmZmZ d dlZd dlmZm	Z	 dedee	df   dee	   fdZ
d	 Zd
 Zd Zd Zd ZddZd Zd Zd Zd Zy)    N)ListTuple)KeysTKeyTkeysargs.returnc                     	 t        |        t        | t        t        f      r| g} nt	        |       } |r| j                  |       | S # t
        $ r | g} Y #w xY wN)iter
isinstancebytesstrlist	TypeErrorextend)r   r   s     I/var/www/html/venv/lib/python3.12/site-packages/redis/commands/helpers.pylist_or_argsr   
   s\    	T
 dUCL)6D:D DK	  vs   0A AAc                 Z    t        | t              r| j                  dd      n| }|dk(  ry|S )zAReturn the decoded binary string, or a string, depending on type.utf-8replacenullN)r   r   decode)xrs     r   	nativestrr      s,    (21e(<)$!AF{H    c                 F    | | S | D cg c]  }t        |       c}S c c}w )z9Given a list of binaries, return the stringified version.)r   )r   objs     r   delistr    #   s$    y&'(sIcN(((s   c                 4   g }| |S | D ]  }	 |j                  t        |              |S # t        $ rH 	 |j                  t        |             n)# t        $ r |j                  t	        |             Y nw xY wY rt
        $ r |j                  d       Y w xY w)z,Optimistically parse the response to a list.N)appendint
ValueErrorfloatr   r   )responseresitems      r   parse_to_listr)   *   s    
C
 		JJs4y!	 J  	,,

5;' ,

9T?+, 	JJt	s8   +	BAB#A63B5A66B;BBc                 v   i }t        dt        |       d      D ]z  }t        | |   t              r!|d   j	                  t        | |                7t        | |dz      t              rt        | |dz            g|d<   c	 t        | |dz            || |   <   | |S # t        t        f$ r | |dz      || |   <   Y w xY w)Nr      zChild iterators   )	rangelenr   r   r"   parse_list_to_dictr%   r   r$   )r&   r'   is      r   r/   r/   >   s    
C1c(mQ' 	3hqk4(!"))*<Xa[*IJQ.&8!a%&I%JC!"3#(!a%#9HQK 	3 J z* 3#+AE?HQK 3s   =BB87B8c                     | i S i }| D ]@  }t        |d   t              rt        |d         ||d   <   +	 	 t        |d         ||d   <   B |S # t        t
        f$ r |d   ||d   <   Y  w xY w# t        $ r Y pw xY w)Nr,   r   )r   r   r/   r%   r   r$   
IndexError)r&   r'   dets      r   parse_to_dictr4   M   s    	
C 
c!fd#,SV4CAK)"'A-CAK
 J	 ":. )"%a&CAK) s)   AA+(A.*A++A..	A:9A:c                 D    dj                  d t        |       D              S )z3
    Returns a random N character long string.
     c              3   b   K   | ]'  }t        j                  t        j                         ) y wr   )randomchoicestringascii_lowercase).0r   s     r   	<genexpr>z random_string.<locals>.<genexpr>d   s$      23f,,-s   -/)joinr-   )lengths    r   random_stringr@   `   s&     77 7<V}  r   c                     t        | t              r| j                         } nt        | t              s| S t	        |       dk(  ry| j                  dd      } | j                  dd      } d|  dS )zq
    RedisGraph strings must be quoted,
    quote_string wraps given v with quotes incase
    v is a string.
    r   z""\z\\"z\")r   r   r   r   r.   r   )vs    r   quote_stringrE   i   sc     !UHHJ3
1v{			$A			#uAqc8Or   c                     t        j                   |       }| j                         D ];  }t        |t              s||   ||j	                  d      <   |j                  |       = |S )z3Decode the keys of the given dictionary with utf-8.r   )copyr   r   r   r   pop)r   newobjks      r   decode_dict_keysrK   }   sW    YYs^FXXZ a(.q	F188G$%JJqM Mr   c                 :   t        | t              rt        |       S | yt        | t        t        f      r#ddj                  t        t        |              dS t        | t              r*ddj                  d | j                         D               dS t        |       S )a  
    Turn a parameter value into a string suitable for the params header of
    a Cypher command.
    You may pass any value that would be accepted by `json.dumps()`.

    Ways in which output differs from that of `str()`:
        * Strings are quoted.
        * None --> "null".
        * In dictionaries, keys are _not_ quoted.

    :param value: The parameter value to be turned into a string.
    :return: string
    r   [,]{c              3   B   K   | ]  \  }}| d t        |         yw):N)stringify_param_value)r<   rJ   rD   s      r   r=   z(stringify_param_value.<locals>.<genexpr>   s&     Y41as!$9!$<#=>Ys   })
r   r   rE   r   tupler>   maprS   dictitems)values    r   rS   rS      s     %E""		ED%=	)388C 5u=>?qAA	E4	 CHHY5;;=YYZZ\]]5zr   c                 \   t        | t        j                        s$t        | t        j                  j                        r%| j                  j
                  j                  d      S t        | t        j                  j                        r%| j                  j
                  j                  d      S y )Nprotocol)
r   redisRedisasyncioconnection_poolconnection_kwargsgetclusterAbstractRedisClusternodes_manager)clients    r   get_protocol_versionrf      sw    &%++&*VU]]=P=P*Q%%77;;JGG	FEMM>>	?##5599*EE 
@r   )
   )rG   r8   r:   typingr   r   r\   redis.typingr   r   r   r   r    r)   r/   r4   r@   rE   rK   rS   rf    r   r   <module>rk      sq         $u E$)$4 d ")(&(6Fr   