U
    ¯ªhö  ã                   @   sœ   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	 eee	df ee	 dœdd„Z
dd	„ Zd
d„ Zdd„ Zdd„ Zddd„Zdd„ Zdd„ ZdS )é    N)ÚListÚTuple)ÚKeysTÚKeyT.)ÚkeysÚargsÚreturnc                 C   sX   z*t | ƒ t| ttfƒr | g} nt| ƒ} W n tk
rD   | g} Y nX |rT|  |¡ | S ©N)ÚiterÚ
isinstanceÚbytesÚstrÚlistÚ	TypeErrorÚextend)r   r   © r   ú:/tmp/pip-unpacked-wheel-4avdqdik/redis/commands/helpers.pyÚlist_or_args
   s    
r   c                 C   s*   t | tƒr|  dd¡n| }|dkr&dS |S )zAReturn the decoded binary string, or a string, depending on type.úutf-8ÚreplaceÚnullN)r   r   Údecode)ÚxÚrr   r   r   Ú	nativestr   s    r   c                 C   s   | dkr| S dd„ | D ƒS )z9Given a list of binaries, return the stringified version.Nc                 S   s   g | ]}t |ƒ‘qS r   )r   )Ú.0Úobjr   r   r   Ú
<listcomp>'   s     zdelist.<locals>.<listcomp>r   )r   r   r   r   Údelist#   s    r   c                 C   sè   g }dddh}| dkr|S | D ]Ä}|dkr6|  d¡ qzt|ƒ}W n" tk
rd   |  d¡ Y qY nX t|tƒrˆ| ¡ |krˆ|  |¡ qz|  t|ƒ¡ W q tk
rà   z|  t|ƒ¡ W n tk
rÚ   |  |¡ Y nX Y qX q|S )z,Optimistically parse the response to a list.ZinfinityÚnanz	-infinityN)	Úappendr   r   r   r   ÚlowerÚintÚ
ValueErrorÚfloat)ÚresponseÚresZspecial_valuesÚitemZitem_strr   r   r   Úparse_to_list*   s.    



r(   c              
   C   sþ   i }t dt| ƒdƒD ]ä}t| | tƒr„|d  t| | ƒ¡ z0t| |d  tƒrj|d  t| |d  ƒ¡ W qø tk
r€   Y qøX qt| |d  tƒr®t| |d  ƒg|d< qzt| |d  ƒ|| | < W q tt	fk
rö   | |d  || | < Y qX q|S )Nr   é   zChild iteratorsé   )
ÚrangeÚlenr   r   r    Úparse_list_to_dictÚ
IndexErrorr$   r   r#   )r%   r&   Úir   r   r   r-   K   s     r-   é
   c                 C   s   d  dd„ t| ƒD ƒ¡S )z3
    Returns a random N character long string.
    Ú c                 s   s   | ]}t  tj¡V  qd S r	   )ÚrandomÚchoiceÚstringÚascii_lowercase)r   r   r   r   r   Ú	<genexpr>c   s    z random_string.<locals>.<genexpr>)Újoinr+   )Úlengthr   r   r   Úrandom_string_   s    
ÿr9   c                 C   sB   t   | ¡}|  ¡ D ]*}t|tƒr|| || d¡< | |¡ q|S )z3Decode the keys of the given dictionary with utf-8.r   )Úcopyr   r   r   r   Úpop)r   ZnewobjÚkr   r   r   Údecode_dict_keysh   s    

r=   c                 C   sH   t | tjƒst | tjjƒr(| jj d¡S t | tjjƒrD| j	j d¡S d S )NÚprotocol)
r   ÚredisZRedisZasyncioZconnection_poolZconnection_kwargsÚgetZclusterZAbstractRedisClusterZnodes_manager)Úclientr   r   r   Úget_protocol_versionr   s    rB   )r0   )r:   r2   r4   Útypingr   r   r?   Zredis.typingr   r   r   r   r   r(   r-   r9   r=   rB   r   r   r   r   Ú<module>   s   !
	
