o
    4zi2+                     @   s  d dl Z d dlZd dlmZm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 d dlmZmZmZ d dlmZ eded	d
Zh dZh dZdZdZdd Zdd Zdd Z dd Z!dd Z"e#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&ej#d$dgded%d& Z'ej#d'd(gded)d* Z(e#d+ed,d- Z)e#d.ed/d0 Z*ej#d1d(gded2d3 Z+d4d5 Z,dS )6    N)datetimetimezone)		Blueprintrender_templaterequestredirecturl_forflashjsonifysend_from_directorycurrent_app)login_requiredcurrent_user)secure_filename)StrategyPostStrategyFileStrategyLastSeen)dbstrategyz	/strategy)
url_prefix>   pycsvgifjpgmovmp4pdfpngtxtxlsziphtmljpegjsonwebmwebpxlsx>   r   r   r$   i  @i   c                 C   s    d| v o|  ddd  tv S )N.   )rsplitlowerALLOWED_EXTENSIONS)filename r-   2/var/www/html/backtestingmarket/routes_strategy.pyallowed_file   s   r/   c                 C   s\   d| v r|  ddd  nd}|tv rtnt}|dd | }|d ||k||fS )u@   Devuelve True si el archivo está dentro del límite de tamaño.r'   r(    r      )r)   r*   VIDEO_EXTENSIONSMAX_SIZE_VIDEOMAX_SIZE_DEFAULTseektell)r,   file_objextlimitsizer-   r-   r.   allowed_size    s    
r;   c                 C   s`   d| v r|  ddd  nd}|dv rdS |dv rdS |tv r"dS |d	kr(d	S |d
kr.d
S dS )Nr'   r(   other>   r   r   r&   r   >   r   r   r   r"   r%   imagevideor   r!   )r)   r*   r2   )r,   r8   r-   r-   r.   get_file_type)   s    r?   c                  C   s$   t jtjdd} t j| dd | S )Nuploads
strategiesT)exist_ok)ospathjoinr   	root_pathmakedirs)rD   r-   r-   r.   
upload_dir7   s   rH   c                  C   s.   t dd tdddD } tj | v S )Nc                 s   s$    | ]}|  r|   V  qd S )N)stripr*   ).0er-   r-   r.   	<genexpr>=   s    

z_is_admin.<locals>.<genexpr>ADMIN_ALLOWED_EMAILSr0   ,)setrC   getenvsplitr   emailr*   )allowedr-   r-   r.   	_is_admin<   s   rT   z/<code>c                 C   s   |   } tjj| d dtj  }tjjt	j
| d }|r)ttj|_ntjtt	j
| d tj  td| |t dS )N)strategy_code	parent_id)user_idrU   zstrategy_workspace.html)codepostsis_admin)upperr   query	filter_byorder_by
created_atdescallr   r   idfirstr   nowr   utclast_seen_atr   sessionaddcommitr   rT   )rX   rY   seenr-   r-   r.   	workspaceF   s0   
rk   z/<code>/postPOST)methodsc           	      C   s   |   } tjdd }|stdd ttd| dS t| t	j
|dd}tj| tj  tjd	}|D ]0}|rh|jrht|jrht|j|\}}}|sa|d
 }td|j d| dd q8t|| |j
 q8tj  ttd| dS )Ncontentr0   u!   El mensaje no puede estar vacío.warningzstrategy.workspace)rX   message)rU   rW   rn   	post_typeattachments   "   " supera el límite de  MB.)r[   r   formgetrI   r	   r   r   r   r   rb   r   rg   rh   flushfilesgetlistr,   r/   r;   
_save_fileri   )	rX   rn   postrz   fileokr:   r9   mbr-   r-   r.   add_poste   s2   


r   z /<code>/post/<int:post_id>/replyc           
      C   s  |   } tjj|| d }|jd urtddidfS tj	dd
 }|s.tddidfS t| tj|d|d	}tj| tj  tjd
}|D ]}|rj|jrjt|jrjt|j|\}}}	|scqKt|| |j qKtj  td|jtj|j|jd|dddfS )Nrb   rU   errorz%No se puede responder a una respuesta  rn   r0   u    El mensaje no puede estar vacíoreply)rU   rW   rn   rq   rV   rr   Tz%H:%M)rb   authorrn   timerV   )r   r      )r[   r   r\   r]   first_or_404rV   r
   r   rw   rx   rI   r   rb   r   rg   rh   ry   rz   r{   r,   r/   r;   r|   ri   usernamern   r_   strftime)
rX   post_idparentrn   r   rz   r~   r   r:   r9   r-   r-   r.   	add_reply   sP   



	r   z/<code>/post/<int:post_id>/editc                 C   s  t jj||  d }|jtjkrtddidfS t	j
r't	jdd }n	t	jdd }|s:tddidfS ||_g }t	jd	}|D ]p}|r|jrt|jrt|j|\}}}	|st|	d
 }
tdd|j d|
 didf  S zt||  |j}tj  ||j|j|jd W qG ttfy } ztj  tdd| idfW  Y d }~  S d }~ww qGtj  td|j|ddfS )Nr   r   Sin permiso  rn   r0   u   Contenido vacíor   rr   rs   rt   ru   rv   i  )rb   original_namer,   zError al guardar archivo: i  T)r   rn   rz   r   )r   r\   r]   r[   r   rW   r   rb   r
   r   is_jsonr#   rx   rI   rw   rn   rz   r{   r,   r/   r;   r|   r   rg   ry   appendr   OSErrorPermissionErrorrollbackri   )rX   r   r}   rn   
files_data	new_filesr~   r   r:   r9   r   sfrK   r-   r-   r.   	edit_post   sJ   $

&
r   z/<code>/post/<int:post_id>DELETEc              	   C   s   t jj||  d }|jtjkrt st	ddidfS |j
D ] }zttjt |j W n	 ty9   Y nw tj| q tj| tj  t	d|idfS Nr   r   r   r   deletedr   )r   r\   r]   r[   r   rW   r   rb   rT   r
   rz   rC   removerD   rE   rH   r,   FileNotFoundErrorr   rg   deleteri   )rX   r   r}   r   r-   r-   r.   delete_post   s"   

r   z/<code>/files/<filename>c                 C   s.   t jj||  d }tt |jd|jdS )Nr,   rU   T)as_attachmentdownload_name)	r   r\   r]   r[   r   r   rH   r,   r   rX   r,   r   r-   r-   r.   download_file   s   r   z/<code>/preview/<filename>c                 C   s*   t jj||  d }tt |jddS )Nr   F)r   )r   r\   r]   r[   r   r   rH   r,   r   r-   r-   r.   preview_file
  s   r   z/<code>/file/<int:file_id>c                 C   s   t jj||  d }|jtjkrt st	ddidfS zt
t
jt |j W n	 ty4   Y nw tj| tj  t	d|idfS r   )r   r\   r]   r[   r   rW   r   rb   rT   r
   rC   r   rD   rE   rH   r,   r   r   rg   r   ri   )rX   file_idr   r-   r-   r.   delete_file  s   
r   c                 C   s   t | jddd  }t j d| }| tj	
t | t|tj||t | jt| jtj	tj	
t |d}tj| |S )Nr'   r(   )rU   rW   r   r,   r   	file_type	file_size)r   r,   r)   r*   uuiduuid4hexsaverC   rD   rE   rH   r   r   rb   r?   getsizer   rg   rh   )r7   rU   r   r8   uniquer   r-   r-   r.   r|   +  s   	r|   )-rC   r   r   r   flaskr   r   r   r   r   r	   r
   r   r   flask_loginr   r   werkzeug.utilsr   modelsr   r   r   r   __name__strategy_bpr+   r2   r3   r4   r/   r;   r?   rH   rT   routerk   r   r   r   r   r   r   r   r|   r-   r-   r-   r.   <module>   sV   ,	
!.+
