o
    j"                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlZd dl	m
Z
mZmZmZmZmZmZmZmZ d dlmZmZ d dlmZmZmZmZ eeZd!d
dZd"ddZd#ddZ d$ddZ!d%ddZ"d&d'dd Z#dS )(    )annotationsN)Path)Any)	API_EXPEDIENTES_URLAPI_PRECALIFICADOR_URLCOMPLETADOS_DIRHTTP_TIMEOUT	LOTE_PATHNO_INICIADOS_DIRPENDIENTES_DIRRESULTADO_COMPLETADO_PATHRESULTADO_PENDIENTE_PATH)get_connection	get_loans)	as_numberpick	read_json
write_jsonreturndict[str, Any]c            
      C  s  t tdd} | stdt d| dpg }|s!tdt i S tjddd t ti dp/i }t	|}d}zt
 }W n tyS } ztd	| W Y d}~nd}~ww t X}t|d
dD ]I\}}d| d| d| }	z!||v r{td|	 W q_t|||||< tt| td|	 W q_ ty } ztd|	| W Y d}~q_d}~ww W d   n1 sw   Y  |durz|  W n	 ty   Y nw t  tdt |S )z:Process the pending batch and persist a consolidated JSON.N)defaultzNo existe lote pendiente en z. Ejecute primero la ingesta.
pendientesz(El lote en %s no contiene oportunidades.Tparentsexist_okuM   No se pudo abrir conexión persistente (%s). Se reintentará por oportunidad.   )startz[Procesando /z] z%s -> OMITIDO (ya procesada)z%s -> OKz%s -> ERROR: %sz Lote finalizado. Resultado en %s)r   r	   FileNotFoundErrorgetloggerwarningr   mkdirr   lenr   	ExceptionrequestsSession	enumerateinfo_buildr   errorclose_finishr   )
loteitemsresulttotalconexionr*   sessionindexopprefix r6   H/var/www/csodoo/proyecto_oportunidades/controllers/process_controller.pyprocess   s^   



r8   r2   requests.Sessionr4   strc              
   C  st   t | |}t| |}zt||d}W n" ty4 } ztd||| |g t|dW  Y d }~S d }~ww ||dS )N)r1   z!Fallo DB en %s (identidad %s): %s)cliente	prestamosdb_error)r;   r<   )	_identity_profiler   r$   r    r*   r:   )r2   r1   r4   	identidadr;   r<   r*   r6   r6   r7   r)   N   s   

	r)   c              
   C  s|   | j tdd |fitd}|  z| }W n ty* } ztd| |d }~ww t|ddd}|s8tdt| S )Noportunidadfilestimeoutu-   Respuesta de expedientes no es JSON válido: r@   	IDENTIDAD
id_clienteu+   La API de expedientes no retornó identidad)	postr   r   raise_for_statusjson
ValueErrorr   r:   strip)r2   r4   responsepayloadr*   r@   r6   r6   r7   r>   b   s    
r>   r@   c                 C  s   | j tdd |fitd}|  z| }W n ty'   i }td| Y nw t|dddp0d}t|ddp8|}t|d	d
dpAd}t|ddd}t	|
 t	|
 t	|
 t|ddS )Nr@   rB   u9   Precalificador no retornó JSON válido para identidad %snombrenombre_clienter;    rE   tipo_cliente	categoriatipoClientemontoequifax_montomonto_preaprobadog        )rN   r@   rR   rV   )rG   r   r   rH   rI   rJ   r    r!   r   r:   rK   r   )r2   r@   rL   rM   rN   identidad_resprR   rT   r6   r6   r7   r?   u   s*   



r?   Nonec                   C  sJ   t  rtjddd tt t t jdd tt	dd tt
dd d S )NTr   
missing_ok)z.gitkeep)keep)r   existsr   r"   shutilcopy2r   unlink_clearr   r
   r6   r6   r6   r7   r,      s   r,   r6   	directoryr   r[   tuple[str, ...]c                 C  s>   |   sd S |  D ]}|j|v rq
| r|jdd q
d S )NTrY   )r\   iterdirnameis_filer_   )ra   r[   itemr6   r6   r7   r`      s   
r`   )r   r   )r2   r9   r4   r:   r   r   )r2   r9   r4   r:   r   r:   )r2   r9   r@   r:   r   r   )r   rX   )r6   )ra   r   r[   rb   r   rX   )$
__future__r   loggingr]   pathlibr   typingr   r%   config.app_configr   r   r   r   r	   r
   r   r   r   utils.db_helperr   r   utils.json_helperr   r   r   r   	getLogger__name__r    r8   r)   r>   r?   r,   r`   r6   r6   r6   r7   <module>   s     ,


3



