U
    @dH9                     @   s  d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZ d dlmZmZ d dlmZ d dlZd dlZd dlZd dlmZ d dl Z d dl!m"Z" d dl#m$Z$ d dl%m&Z& ddl'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/ ddlm0Z0m1Z1 e2e3Z4G dd deZ5edddd Z6edddd Z7G dd de$Z8G d d! d!e$Z9G d"d# d#e$Z:d$d% Z;d&d' Z<d(d) Z=dS )*    N)config)datetime)VideoFileClip)User)
cache_page)serializers)HttpResponseJsonResponseHttp404)login_required)method_decorator)renderredirect)View)Keystatus)APIView)Response   )check_transcripts)FileTranscripts)generate_namehandle_uploaded_filedownload_captions)FileSerializerTranscriptsSerializerc                   @   s8   e Zd Zeedddd Zeedddd ZdS )ListTranscripts/auth/loginZ	login_urlc                 C   sH   d }|j jrtj }ntjj|j d}t| |dd}t|d|S )N)Zfile_org__userZallTranscripts)transcriptspagezdashboard.html)	useris_superuserr   objectsallfilterloggerinfor   )selfrequestr!   context r-   +/var/www/html/transcript/interface/views.pyget"   s    
zListTranscripts.getc                 C   s   |j jstdS d S )Naccounts:login)r#   is_authenticatedr   )r*   r+   r-   r-   r.   post1   s    zListTranscripts.postN)__name__
__module____qualname__r   r   r/   r2   r-   r-   r-   r.   r   !   s   
r   r   r    c                 C   s0  | j jstdS | jdkr d| jkr | jd j}| jd }d}tj|sXt	| t
|}t||| || }t|}tj|\}}t|||j|tj|| j d}|  tjjtddtdtd	d
tdtddtdtjj d}	|	d}
|
|}|| t| d|jddS t| dddiS )Nr0   POSTfilenamezmedia/)
file_title
video_pathduration	extensionsizer#   Z
AWS_REGIONz	us-west-2)defaultcastZAWS_ACCESS_KEY_IDZAKIAT6THLFM7NTAL4XWXZAWS_SECRET_ACCESS_KEYz(iGzTVrIAOLQNRes8HvUwZSq/8LBqaH3aanR+sxNS)Zregion_nameZaws_access_key_idZaws_secret_access_keyZcalling_formatzinput-transcribe-bucketzupload.htmlupload)id_filer"   r"   )r#   r1   r   methodFILESnameospathexistsmakedirsr   r   r   splitextr   r:   getsizesavebotos3Zconnect_to_regionr   str
connectionZOrdinaryCallingFormatZ
get_bucketZnew_keyZset_contents_from_filenamer   r@   )r+   r7   contentrE   Zgenerated_namer9   Zclipr;   new_fileconnbucketkr-   r-   r.   r?   8   sZ    






 r?   c              	   C   s   zbt jjtjj|dd}|jrF|jrF|jrFtdddt|j	dW S tddd	t|j	dW S W n( t j
k
r   td
dd	dd Y S X d S )N)r@   file_org   zTranscript Found With All Infoz&Your file Has Been processed Complety.)r   detailmessage
transcriptr   z(Transcript Founded With Initial Creationz/Please wait, your file is processing Right Now.r   zTranscript Not Found )r   r%   r/   r   path_srt_frpath_srt_espath_srt_enr	   r   dataDoesNotExist)r+   r@   rY   r-   r-   r.   transcript_statusu   s,    
r`   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )S3Inputc                 C   s0   zt jj|dW S  t jk
r*   tY nX dS )zJ
        Helper method to retrieve a File object by UUID in name.
        Zvideo_path__containsN)r   r%   r/   r_   r
   r*   idr-   r-   r.   
get_object   s    zS3Input.get_objectc                 C   s*   t jj|jd}t|dd}t|jtjS )z
        Handles GET requests to retrieve all the File objects in the database.
        Returns a JSON response with the serialized data.
        )r#   Tmany)	r   r%   r'   r#   r   r   r^   r   HTTP_200_OKr*   r+   queryset
serializerr-   r-   r.   r/      s    zS3Input.getc                 C   s   d}t |jd|d}t |jd}| |}t||jd}|jddr|  t|d}d	|krx|jd
|_	d|ksd|kr|jd
|_
d|kr|jd
|_d|kr|jd
|_|  t|jtjdS t|jtjdS )z
        Handles PUT requests to update a File object in the database.
        Expects the request object to have file_s3_url, language, and srt_file fields.
        z;https://input-transcribe-bucket.s3.us-east-2.amazonaws.com/file_s3_urlrZ   languager^   TZraise_exceptionrT   ensrt_filepoptesfrr   )rM   r^   r/   replacere   r   is_validrJ   r   r]   path_srt_por\   r[   r   r   HTTP_201_CREATEDerrorsHTTP_400_BAD_REQUEST)r*   r+   ZBASE_S3_URL	file_uuidZ	file_langZoriginal_fileZfile_serializerrY   r-   r-   r.   put   s&    

zS3Input.putN)r3   r4   r5   re   r/   r}   r-   r-   r-   r.   ra      s   ra   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
S3Outputc                 C   s,   zt j W S  t jk
r&   tY nX d S )N)r   r%   r&   r_   r
   )r*   r-   r-   r.   get_objects   s    zS3Output.get_objectsc                 C   s0   zt jj|dW S  t jk
r*   tY nX d S )NrT   )r   r%   r/   r_   r
   rc   r-   r-   r.   re      s    zS3Output.get_objectc                 C   s$   |   }t|dd}t|jtjdS )NTrf   r^   r   )r   r   r   r^   r   rh   ri   r-   r-   r.   r/      s    zS3Output.getc                 C   st   t |jddd }tjj|d}| |}t||jd}|jddrd|	  t
|jtjdS t
|jtjdS )	Nfile.r   rb   rn   Tro   r   )rM   r^   r/   splitr   r%   re   r   rw   rJ   r   r   ry   rz   r{   )r*   r+   r|   Zfile_idrY   Ztranscript_serializerr-   r-   r.   r}      s    
zS3Output.putN)r3   r4   r5   r   re   r/   r}   r-   r-   r-   r.   r~      s   r~   c                   @   s   e Zd Zdd ZdS )SaveSubtitleViewc              	   C   s   |j }d}|d }|d }|d }tj|d|d }t|d}|| W 5 Q R X tj|d|d }	t|	d}
|
| W 5 Q R X tdd	iS )
Nstatic/subtitles	file_nameZsrtvtt.srtw.vttrX   zFiles saved successfully.)r^   rD   rE   joinopenwriter   )r*   r+   Z	json_dataSTATIC_FILESr   Zsrt_contentZvtt_contentZsrt_file_pathrq   Zvtt_file_pathZvtt_filer-   r-   r.   r2      s    zSaveSubtitleView.postN)r3   r4   r5   r2   r-   r-   r-   r.   r      s   r   c              
   C   s   d}d| j ji}| jr(t| jddnd | jrBt| jddnd | jr\t| jddnd | jrvt| jddnd d}| D ]l\}}t	j
|dt	j
t	j
|d  d| d}t	j
t	j
||r|||< td	| qt|| qd S )
Nr   r   r   r   ru   rt   rp   rr   r   r   r   VTT Path Exists: )rU   rl   r[   rM   rv   r\   r]   rx   itemsrD   rE   r   rH   basenamerF   printdownload_file)instancer   VTT_RESPONSEINSTANCE_VTTrS   r   vtt_pathr-   r-   r.   save_vtt_wget  s    0r   c                    s   t  4 I d H }|| 4 I d H }|jdkrr| I d H }t|d}|| W 5 Q R X W 5 Q I d H R  qn<|jdkrW 5 Q I d H R  qntd|  d|j d|j W 5 Q I d H R X qW 5 Q I d H R X d S )N   wbi  zFailed to download file from z:  )	aiohttpZClientSessionr/   r   readr   r   	Exceptionreason)url	file_pathsessionresponserO   r   r-   r-   r.   r   ,  s    

r   c           	   
   C   s  d}d| j ji}| jr(t| jddnd | jrBt| jddnd | jr\t| jddnd | jrvt| jddnd d}| D ]\}}|st	d| d qt
j|t
jt
j|d  d	| d}t
jt
j||r|||< t	d
| qt
jt
j||st|}t	| d|j  |jdkrzt	d| d t|d}||j W 5 Q R X |||< qt	d| d qqd S )Nr   r   r   r   r   zVTT not found for z in creatingr   r   r   z	  ---->  r   zDownloading z
 In Creater   z	Download z Faild)rU   rl   r[   rM   rv   r\   r]   rx   r   r   rD   rE   r   rH   r   rF   requestsr/   status_coder   r   rO   )	r   r   r   r   rS   r   r   r   fr-   r-   r.   save_vtt:  s0    .

r   )>rD   reloggingZdecoupler   r   Zmoviepy.editorr   django.contrib.auth.modelsr   django.views.decorators.cacher   django.corer   django.httpr   r	   r
   Zdjango.contrib.auth.decoratorsr   django.utils.decoratorsr   Zdjango.shortcutsr   r   django.viewsr   r   rK   Zboto.s3.connectionZboto.s3.keyr   r   rest_frameworkr   Zrest_framework.viewsr   Zrest_framework.responser   tasksr   modelsr   r   utilsr   r   r   r   r   	getLogger__file__r(   r   r?   r`   ra   r~   r   r   r   r   r-   r-   r-   r.   <module>   sJ   

<
=-