U
    —âñjE  ã                   @   s  d Z ddlZddlZddlZddl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 edeƒZdadd	d
dœZddddœZdd„ Zdd„ Zdd„ Zdd„ Zejddgd�eƒ dd„ ƒƒZejddgd�eƒ dd„ ƒƒZejddgd�eƒ d d!„ ƒƒZd"d#„ ZdS )$uA   Nombres de presentaciÃ³n. Nunca modifica IDs, ciclos ni permisos.é    N)Ú	BlueprintÚgÚhas_request_contextÚjsonifyÚrequest)Úget_jwt_identityÚjwt_required)Úget_dbÚinsert_log_in_user_historyÚlog_centrosÚ	etiquetasFé   é   é   )ÚregionÚareaÚcentroÚregionesÚareasÚcentrosc                 C   sZ   | t kst|tƒsd S | d¡}t|ƒt |  ksBtdd„ |D ƒƒsFd S d dd„ |D ƒ¡S )NÚ-c                 s   s   | ]}|  ¡ V  qd S ©N)Ústrip©Ú.0Úp© r   ú6/var/www/itgmanager/itgmanager/blueprints/etiquetas.pyÚ	<genexpr>   s     z!clave_etiqueta.<locals>.<genexpr>c                 s   s2   | ]*}d   t d|¡ ¡  d¡ ¡  ¡ ¡V  qdS )Ú ÚNFCú"N)ÚjoinÚunicodedataÚ	normalizer   ÚlowerÚsplitr   r   r   r   r      s   ÿ)ÚTIPOSÚ
isinstanceÚstrr&   ÚlenÚallr"   )ÚtipoÚslugÚpartesr   r   r   Úclave_etiqueta   s    
"
ÿr/   c           
         sÞ   i }| j  i ddi¡D ]h}| d¡}t|tƒs0qd|d|f< | d¡}t|ƒdkr|\}}}d|d|f< d|d|› d|› �f< qi ‰ |D ]*\}}t||ƒ}	ˆ  ||	ft	ƒ ¡ 
|¡ qˆd	d
„ | j i ¡D ƒ‰‡ ‡fdd„|D ƒS )NÚ	centro_idr   Tr   r   r   r   r   c                 S   s   i | ]}|d  |  dd¡“qS )Ú_idÚlabelr   )Úget)r   Údocr   r   r   Ú
<dictcomp>+   s      z&catalogo_etiquetas.<locals>.<dictcomp>c                    sb   g | ]Z\}}||t ||ƒt ||ƒd kp>tˆ |t ||ƒf ƒdkˆ |› dt ||ƒ› �d¡dœ‘qS )Nr   ú:r   )r,   r-   ÚclaveÚ	conflictor2   )r/   r*   r3   ©r   r,   r-   ©ZgruposÚlabelsr   r   Ú
<listcomp>,   s   üýz&catalogo_etiquetas.<locals>.<listcomp>)ÚciclosÚfindr3   r(   r)   r&   r*   r/   Ú
setdefaultÚsetÚaddr   )
ÚdbZentradasr4   r-   r.   Ú_r   r   r,   r7   r   r:   r   Úcatalogo_etiquetas   s&    




ürD   c                 C   s   | j  dtƒ idddœ¡pi S )NÚusernamer   )ÚcargoÚpermisos)ÚusersÚfind_oner   ©rB   r   r   r   Úusuario_actual3   s    rK   c                 C   sŒ   t ƒ }t| tƒs|S |  ¡ D ]j\}}| d|f¡ t|tƒs>q| ¡ D ]>\}}| d|› d|› �f¡ t|tƒrF| dd„ |D ƒ¡ qFq|S )Nr   r   r   c                 s   s   | ]}d |fV  qdS )r   Nr   )r   r   r   r   r   r   B   s     z'entidades_permitidas.<locals>.<genexpr>)r@   r(   ÚdictÚitemsrA   Úupdate)rG   Ú
permitidasr   r   r   r   r   r   r   Úentidades_permitidas7   s    


rP   z
/etiquetasÚGET)Úmethodsc                  C   sž   t ƒ j} t| ƒ}dd„ t| d¡ƒD ƒ}dd„ t ¡ D ƒ}t| ƒD ]R}|d sB|d rB| d¡d	ksx|d
 |d f|krB|d |t|d
   |d < qBt|ƒS )Nc                 S   s   h | ]\}}|t ||ƒf’qS r   )r/   r9   r   r   r   Ú	<setcomp>K   s   ÿz$obtener_etiquetas.<locals>.<setcomp>rG   c                 S   s   i | ]
}|i “qS r   r   )r   Únombrer   r   r   r5   M   s      z%obtener_etiquetas.<locals>.<dictcomp>r8   r2   rF   ÚSuperusuarior,   r7   )	r	   rH   rK   rP   r3   ÚMAPASÚvaluesrD   r   )rB   ÚusuariorO   Ú	resultadoÚitemr   r   r   Úobtener_etiquetasF   s    ÿÿÿr[   z/etiquetas/catalogoc                  C   sB   t ƒ j} t| ƒ d¡dkr6t dtƒ ¡ tdd�dfS tt| ƒƒS )NrF   rU   zAetiquetas.rechazado motivo=sin_permiso accion=catalogo usuario=%sÚsin_permiso©Úcodigoé“  )	r	   rH   rK   r3   ÚlogÚwarningr   r   rD   rJ   r   r   r   Úobtener_catalogoU   s
    rb   ÚPUTc               
      sd  t ƒ j} tƒ }t| ƒ d¡dkr:t d|¡ tdd�dfS tj	dd�}t
|tƒsjt d	|¡ td
d�dfS | d¡| d¡| d¡  ‰‰‰ t
ˆtƒr®t
ˆ tƒr®tˆˆƒd krÌt dˆˆ|¡ td
d�dfS ˆ  ¡ ‰ tˆ ƒdksøt‡ fdd„dD ƒƒ�rt dˆˆ|¡ td
d�dfS t‡‡fdd„t| ƒD ƒd ƒ}|d k�r\t dˆˆ|¡ tdd�dfS |d �rŠt dˆˆ|d |¡ tdd�dfS ˆ› d|d › �}ˆ �rÜdd lm} | jjd!|id"ˆˆˆ | ¡ tƒ d#œidd$� n| j d!|i¡ t d%ˆ �rüd&nd'ˆˆ|d ˆ |¡ zt| j|ˆd(ƒ W n4 tk
�rX } zt d)ˆ||¡ W 5 d }~X Y nX tdd*�S )+NrF   rU   z@etiquetas.rechazado motivo=sin_permiso accion=guardar usuario=%sr\   r]   r_   T)Úsilentz5etiquetas.rechazado motivo=cuerpo_invalido usuario=%sZetiqueta_invalidai�  r,   r-   r2   zJetiquetas.rechazado motivo=tipo_o_slug_invalido tipo=%s slug=%s usuario=%sé<   c                 3   s   | ]}|ˆ kV  qd S r   r   )r   Úc)r2   r   r   r   p   s     z#guardar_etiqueta.<locals>.<genexpr>z
/zDetiquetas.rechazado motivo=label_invalido tipo=%s slug=%s usuario=%sc                 3   s*   | ]"}|d  ˆkr|d ˆ kr|V  qdS )r,   r-   Nr   )r   Úx)r-   r,   r   r   r   s   s       zKetiquetas.rechazado motivo=entidad_no_encontrada tipo=%s slug=%s usuario=%sZentidad_no_encontradai”  r8   zLetiquetas.rechazado motivo=clave_ambigua tipo=%s slug=%s clave=%s usuario=%sr7   Zetiqueta_ambiguai™  r6   r   )Údatetimer1   z$set)r,   r-   r2   ZactualizadoZactualizado_por)Úupsertz9etiquetas.%s tipo=%s slug=%s clave=%s label=%r usuario=%sZguardadaZ	eliminadaÚ
edit_labelz7etiquetas.auditoria_fallida slug=%s usuario=%s error=%s)Úok)r	   rH   r   rK   r3   r`   ra   r   r   Úget_jsonr(   rL   r)   r/   r   r*   ÚanyÚnextrD   rh   r   Ú
update_oneÚnowÚ
delete_oneÚinfor
   Úhistorial_usersÚ	Exception)rB   rX   ÚdatarZ   Úkeyrh   Úerrorr   )r2   r-   r,   r   Úguardar_etiqueta_   sn    
""$

   ÿ   þý     ÿ"rx   c              
   C   s(  t ƒ s
|S tttddƒƒs4ts0dat dtj¡ |S tt	dƒsRt
 ¡ d t	_dt	_t	jdk�ri t	_t	jt
 ¡  }|dkrŽt d|||¡ |S z0t |¡� d	d
„ t| jƒD ƒt	_W 5 Q R X W nD tk
�r } z$t dt|ƒj|||¡ | W Y ¢S d}~X Y nX t	j td|› d|› d|› �ƒ|¡S )uT   Presupuesto compartido de 300 ms por request, incluida selecciÃ³n de servidor y red.ÚtimeoutNTz_etiquetas.respaldo motivo=pymongo_sin_timeout version=%s (notificaciones y reportes sin labels)Úetiquetas_limiteg333333Ó?r   z=etiquetas.respaldo motivo=presupuesto_agotado centro=%s-%s-%sc                 S   s6   i | ].}|d  dkr|d s|d r|d |d “qS )r,   r   r8   r2   r7   r   )r   rZ   r   r   r   r5   £   s     ÿ z#etiqueta_centro.<locals>.<dictcomp>z,etiquetas.respaldo motivo=%s centro=%s-%s-%sr   r   )r   ÚcallableÚgetattrÚpymongoÚ_aviso_sin_timeoutr`   ra   ÚversionÚhasattrr   ÚtimeÚ	monotonicrz   Zetiquetas_resueltasry   rD   rH   rt   ÚtypeÚ__name__r3   r/   )Úclientr   r   r   ZrespaldoZrestanterw   r   r   r   Úetiqueta_centro�   s6    ÿ
ÿr†   ) Ú__doc__r�   r#   r}   Úflaskr   r   r   r   r   Úflask_jwt_extendedr   r   Úshared_db_utilsr	   r
   r   r`   r„   Úetiquetas_bpr~   r'   rV   r/   rD   rK   rP   Úrouter[   rb   rx   r†   r   r   r   r   Ú<module>   s0   

,