U
    yHd*                     @   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
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mZ d dlmZ ddlmZm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z& e'e(Z)G dd deZ*edddd Z+edddd Z,G dd deZ-G dd deZ.G dd deZ/dS )    N)config)VideoFileClip)User)JsonResponseHttp404)login_required)method_decorator)renderredirect)Viewstatus)APIView)Response   )FileTranscripts)generate_namehandle_uploaded_file)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&   0/var/www/html/TranscriptSport/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'   post,   s    zListTranscripts.postN)__name__
__module____qualname__r   r   r(   r+   r&   r&   r&   r'   r      s   
r   r   r   c                 C   sF  | j jstdS | jdkr6d| jkr6| jd j}| jd }d}tj|sXt	| t
|d}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 t| t| d|j ddS t| dddiS )Nr)   POSTfilenamezmedia/z
en-es-subs)
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-bucket   zupload.htmlupload)id_filer   r   )!r   r*   r
   methodFILESnameospathexistsmakedirsr   r   r   splitextr   r3   getsizesavebotoZs3Zconnect_to_regionr   str
connectionZOrdinaryCallingFormatZ
get_bucketZnew_keyZset_contents_from_filenametimesleepremover	   r:   )r$   r0   contentr?   Zgenerated_namer2   Zclipr4   new_fileconnZbucketkr&   r&   r'   r9   3   s^    









 r9   c              	   C   s   zvt jj|d}|j}tjj|d}d|kr2|js@d|krZ|jrZt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enes   zTranscript Found With All Infoz(Your file has been processed completely.)r   detailmessage
transcriptr   z&Transcript Found With Initial Creationz/Please wait, your file is processing right now.r   zTranscript Not Foundz9Please wait, your file is uploading/processing right now. )r   r   r(   languager   path_srt_espath_srt_enr   r   dataDoesNotExist)r$   r:   file	file_langrV   r&   r&   r'   transcript_statuss   s0    
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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_urlrW   rX   r[   TZraise_exceptionrO   rQ   srt_filerR   r   )rF   r[   r(   replacerd   r   is_validrD   r   rZ   rY   r   r   HTTP_201_CREATEDerrorsHTTP_400_BAD_REQUEST)r#   r$   ZBASE_S3_URL	file_uuidr^   Zoriginal_fileZfile_serializerrV   r&   r&   r'   put   s    

zS3Input.putN)r,   r-   r.   rd   r(   ru   r&   r&   r&   r'   r`      s   r`   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 )NrO   )r   r   r(   r\   r   rb   r&   r&   r'   rd      s    zS3Output.get_objectc                 C   s$   |   }t|dd}t|jtjdS )NTre   r[   r   )rw   r   r   r[   r   rg   rh   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 )	Nr]   .r   ra   rl   Trm   rx   )rF   r[   r(   splitr   r   rd   r   rp   rD   r   r   rq   rr   rs   )r#   r$   rt   Zfile_idrV   Ztranscript_serializerr&   r&   r'   ru      s    
zS3Output.putN)r,   r-   r.   rw   rd   r(   ru   r&   r&   r&   r'   rv      s   rv   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 )
Nzstatic/subtitles	file_nameZsrtZvttz.srtwz.vttrU   zFiles saved successfully.)r[   r>   r?   joinopenwriter   )r#   r$   Z	json_dataZSTATIC_FILESr|   Zsrt_contentZvtt_contentZsrt_file_pathrn   Zvtt_file_pathZvtt_filer&   r&   r'   r+      s    zSaveSubtitleView.postN)r,   r-   r.   r+   r&   r&   r&   r'   r{      s   r{   )0r>   reloggingZdecoupler   Zmoviepy.editorr   django.contrib.auth.modelsr   django.httpr   r   Zdjango.contrib.auth.decoratorsr   django.utils.decoratorsr   Zdjango.shortcutsr	   r
   django.viewsr   rE   Zboto.s3.connectionrH   rest_frameworkr   Zrest_framework.viewsr   Zrest_framework.responser   modelsr   r   utilsr   r   serializersr   r   	getLogger__file__r!   r   r9   r_   r`   rv   r{   r&   r&   r&   r'   <module>   s8   

?
9-