o
    B_ie                     @  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/tasks/_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 )uJ   
    AroFlo usa pageSize para controlar el tamaño de página en GET.
    pageSizeNpagesizer   zpageSize debe ser un entero.r   zpageSize debe ser > 0.)getint	Exception
ValueErrorr   )r   vivr   r   r   coerce_page_size2   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 )	z<
    AroFlo usa: &order=campo|asc  o  &order=campo|desc
    orderN|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_orderH   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 )u   
    Builder estándar para listados con WHERE + JOIN opcional + ORDER opcional + paginación.

    order debe venir en formato: "campo|asc" o "campo|desc"
    Ej: "createdutc|desc"
    r4   r5   r6   r)   r    r7   )appendr   )r4   r5   r6   r7   r    r)   r   r   r   r   build_list_paramsd   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   

 


#