o
    B_i                     @  sl   d dl mZ d dlmZmZmZmZ d dlmZ d"ddZ	d#ddZ
d$ddZd$ddZddd%d d!ZdS )&    )annotations)AnyDictListTuple	urlencodeclientr   methodstrparams_listList[Tuple[str, str]]returnc                 C  sH   t |}|pd }|dkr| jddd||ddidS | jd|||dS )	aM  
    Ejecuta request al client AroFlo usando lista de params para permitir repetidos.

    GET  -> AroFlo lee querystring (params=lista de tuplas).
    POST -> AroFlo espera application/x-www-form-urlencoded en el BODY (data=string).
            Importante: el HMAC normalmente depende de var_string; debe coincidir con el BODY.
    GETPOST NzContent-Typez!application/x-www-form-urlencoded)r
   paramsdata
var_stringheaders)r
   r   r   )r   upperrequest)r	   r
   r   r   method_u r   O/var/www/html/flask_server/apps/aroflo_connector_app/zones/users/_join_utils.pyr      s   	r   respDict[str, Any]c                 C  s   | |t |ddS )N)r   r   )r   metar   )r   r   r   r   r   raw_wrap    s
   r   r   
str | Nonec                 C  sp   |  dd }|d u r|  dd }|d u s|dkrd S zt|}W n ty+   tdw |dkr4tdt|S )NpageSizepagesizer   zpageSize debe ser un entero.r   zpageSize debe ser > 0.)getint	Exception
ValueErrorr   )r   vivr   r   r   coerce_page_size*   s   r(   c                 C  s   |  d}|d u rd S t| }|sd S d|vrtd|dd\}}| }|  }|s5td|dvr=td| d| S )Norder|z4order debe tener formato 'campo|asc' o 'campo|desc'.   u&   order: el campo no puede estar vacío.)ascdescu-   order: la dirección debe ser 'asc' o 'desc'.)r"   r   stripr%   splitlower)r   r&   field	directionr   r   r   coerce_order=   s    
r3   N)r)   zonewherejoinpager#   r    r)   c                 C  s\   d| fd|fg}|r| d|f |r| d|f |r#| d|f | dt|f |S )uc   
    Builder estándar para listados con WHERE + JOIN opcional + ORDER opcional + paginación.
    r4   r5   r6   r)   r    r7   )appendr   )r4   r5   r6   r7   r    r)   r   r   r   r   build_list_paramsV   s   r9   )r	   r   r
   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   )r4   r   r5   r   r6   r   r7   r#   r    r   r)   r   r   r   )
__future__r   typingr   r   r   r   urllib.parser   r   r   r(   r3   r9   r   r   r   r   <module>   s   




 