o
    Jh                     @   sL  d dl mZ d dlmZ d dlZd dlZd dl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 zd dlZW n eyS   zd dlmZ W n	 eyP   Y nw Y nw dd Zdd	 Zdd
dZdd Zdd Zejej fddZdededejejeejf  deeej ejeejf ej!e f f fddZ"dedefddZ#dS )    )count)abcN)CONFIG_EDITOR_KEY)getwchc                  C   s   t j } t| }z9t| }|d tjtjB  @ |d< d|d tj< d|d tj< t	| tj
| t jd}W t	| tj
| |S t	| tj
| w )zz
        Read a single character without echoing to the console and without
        having to wait for a newline.
                 r   )sysstdinfilenotermios	tcgetattrICANONECHOVMINVTIME	tcsetattrTCSANOWread)fdsaved_attributes
attributesa r   L/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/yoyo/utils.pygetch)   s   


r   c                 C   s|   	 t jd| |f  t j  t }|tjkr'dd |D t|  d }t	| | | vr8t	d n	 | S q)zU
    Display the given prompt and list of options and return the user selection.
    Tz	%s [%s]: c                 S   s,   g | ]}d |  krdkrn n|  qS )AZ)lower).0or   r   r   
<listcomp>I   s   , zprompt.<locals>.<listcomp>r   z#Invalid response, please try again!)
r	   stdoutwriteflushr   oslineseplistr   print)promptoptionschr   r   r   r)   >   s   


r)   c                 C   s8   d}|r|  }|dkrd}n|dkrd}t| |dkS )NynyYnnyN)r   r)   )sdefaultr*   r   r   r   confirmT   s   r3   c                 C   s(   | dkr| dd|  S | dd|  S )z
    >>> plural(1, '%d dead frog', '%d dead frogs')
    '1 dead frog'
    >>> plural(2, '%d dead frog', '%d dead frogs')
    '2 dead frogs'
    r   z%d)replace)quantityonepluralr   r   r   r7   _   s   r7   c                 C   sL   z|  dtW S  tjy   Y nw dD ]}tj |d}|r#|  S qdS )z3
    Return the user's preferred visual editor
    DEFAULT)VISUALEDITORNvi)getr   configparserNoOptionErrorr%   environ)configkeyeditorr   r   r   
get_editork   s   rC   c                    s&   t  d fddt| D S )z9
    Return a random string of ``length`` characters
     c                 3   s    | ]}  V  qd S N)choice)r   icharsrngr   r   	<genexpr>       z$get_random_string.<locals>.<genexpr>)randomSystemRandomjoinrange)lengthrI   r   rH   r   get_random_stringz   s   rR   target_stylesqlbind_parametersreturnc                    s   | dkr
||pi fS | dv }|s||rt  fS i fS td dd } fdd}dd	 }d
d }||||d|  tdddd |D  d }|fdd|}	|rrg }
||D ]}|d}|
||  q]|	t |
fS |	|fS )al  
    :param target_style: A DBAPI paramstyle value (eg 'qmark', 'format', etc)
    :param sql: An SQL str
    :param bind_parameters: A dict of bind parameters for the query

    :return: tuple of `(sql, bind_parameters)`. ``sql`` will be rewritten with
             the target paramstyle; ``bind_parameters`` will be a tuple or
             dict as required.
    named>   qmarkformatnumericr   c                 S      dS )N?r   namer   r   r   param_gen_qmark      z+change_param_style.<locals>.param_gen_qmarkc                    s   dt   S )N:)nextr]   )_param_counterr   r   param_gen_numeric   s   z-change_param_style.<locals>.param_gen_numericc                 S   r[   )Nz%sr   r]   r   r   r   param_gen_format   r`   z,change_param_style.<locals>.param_gen_formatc                 S   s   d|  dS )Nz%(z)sr   r]   r   r   r   param_gen_pyformat   s   z.change_param_style.<locals>.param_gen_pyformat)rX   rZ   rY   pyformatz(?<![:\\]):(|c                 s   s    | ]}t |V  qd S rE   )reescape)r   kr   r   r   rK      rL   z%change_param_style.<locals>.<genexpr>z	)(?=\W|$)c                    s    |  dS )Nr   )group)match)	param_genr   r   <lambda>   s    z$change_param_style.<locals>.<lambda>)	tupler   ri   compilerO   subfinditerrl   append)rS   rT   rU   
positionalr_   rd   re   rf   patterntransformed_sqlpositional_paramsrm   
param_namer   )rc   rn   r   change_param_style   s@   
rz   r1   c                    s&   t j d fddt d| D S )z7
    Return ``s`` with unicode diacritics removed.
    rD   c                 3   s    | ]	} |s|V  qd S rE   r   )r   c	combiningr   r   rK      s    zunidecode.<locals>.<genexpr>NFD)unicodedatar}   rO   	normalize)r1   r   r|   r   	unidecode   s    r   rE   )$	itertoolsr   collectionsr   r=   r%   rM   ri   stringr	   r   typingtyoyo.configr   r   ImportErrormsvcrtr   r   r)   r3   r7   rC   ascii_lettersdigitsrR   strOptionalMappingAnyrp   UnionSequencerz   r   r   r   r   r   <module>   sJ   

&
?