o
    uӅi                     @  s   d dl mZ d dlmZmZmZ d dlZd dlZd dlZ	ddl
mZmZ dZdd	d
Zd ddZd!ddZddd"ddZd#ddZdS )$    )annotations)AnyDictListN   )ZoneOperation	ParamSpecui_upload_user_documentsreturnList[ZoneOperation]c                   C  sv   t tdddddd d d dddtddd	d
tddd	dtddd	dddidtddddtddddgdddgdd	dgS )NzUI Upload User DocumentszKSube documentos al usuario via UI automation (Users -> Documents & Photos).UIwriteF)timesheet_bu
user_emaildocsdry_runrawr   stringTz&Business Unit a seleccionar en AroFlo.r   zEmail del usuario.r   arrayz?Lista de documentos. Cada item: file=...;comment=...;filter=...type)items_schemar   booleanz1Si true, no ejecuta UI; solo preview del comando.r   z4Si true, incluye stdout/stderr completos del runner.userszSubir documentos por UIz Evidencias y adjuntos de usuariohigh)codelabeldescriptionhttp_methodside_effect
idempotentdefault_paramsparamscategory	use_cases
risk_levelrequires_confirmation)r   OP_UI_UPLOAD_DOCSr    r'   r'   R/var/www/html/flask_server/apps/aroflo_connector_app/zones/users/mu_upload_docs.pyget_operations   s>   r)   operation_codestrboolc                 C  s   | t kS )N)r&   )r*   r'   r'   r(   supports3   s   r-   argv	List[str]Dict[str, Any]c                 C  s   dd| dS )NT
subprocess)r   
invocationr.   r'   )r.   r'   r'   r(   _preview7   s   r3   F)r   r   c                C  sz   t j| dddd}|r|j|j|j| dS |jpd  dd  }|jp&d  dd  }|jd|d|| dS )	NTF)capture_outputtextcheck)
returncodestdoutstderrr.    i
)r7   stdout_tailstderr_tailr.   )r1   runr7   r8   r9   strip
splitlinesjoin)r.   r   procout_tailerr_tailr'   r'   r(   _run_ui?   s   rE   clientr   r!   c                 C  s  t |dd}t |dd}t|dp|dpd }|s&td|dp,g }t|tr4|s8td	t|d
pD|dpDd }|sNtdt|dp_|dp_tdp_d }|sgd}t|dps|dpsd }	|	||dd |D d}
|rdd| d|
dS t	j
j| dt|
dddidd}t	j
j|dd }| d}W d    n1 sw   Y  d!|d|jd"S )#Nr   Fr   r   z
user-emailr:   z2user_email es requerido (ej: cpenuela@usg.com.au).r   uB   docs es requerido y debe ser una lista no vacía de strings --doc.r   ztimesheet-buz:timesheet_bu es requerido (ej: 'Utility Solutions Group').
worker_urlz
worker-urlAROFLO_UI_WORKER_URLzhttp://127.0.0.1:5010	tenant_idz	tenant-idc                 S  s$   g | ]}t | rt | qS r'   )r+   r?   ).0dr'   r'   r(   
<listcomp>l   s   $ zexecute.<locals>.<listcomp>)rI   r   r   r   Thttpz/ui/users/upload-docs)r   r2   urlpayloadzutf-8zContent-Typezapplication/jsonPOST)dataheadersmethodx   )timeoutr   )r7   r8   r9   rN   )r,   getr+   r?   
ValueError
isinstancelistosgetenvurllibrequestRequestjsondumpsencodeurlopenreaddecodefull_url)r*   rF   r!   r   r   r   r   r   rG   rI   rO   reqrespbodyr'   r'   r(   executeR   sH     * ri   )r
   r   )r*   r+   r
   r,   )r.   r/   r
   r0   )r.   r/   r   r,   r
   r0   )r*   r+   rF   r   r!   r0   r
   r   )
__future__r   typingr   r   r   r_   rZ   urllib.requestr\   baser   r   r&   r)   r-   r3   rE   ri   r'   r'   r'   r(   <module>   s    

%
