U
    od                     @   s$  d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
mZmZmZmZ d dlmZ d dlmZmZmZ d dlmZmZmZ e
d	d
gdZdZededdedededfee ee ee eee  dddZejdededddZ ejdededddZ!dS )    N)AsyncResult)ListOptional)JSONResponse)	APIRouter
UploadFileFileDependsForm)analyse)	VideoBase
PredictionTask)generate_unique_filenameget_file_durationextract_title_and_durationz/taskszBased Content Tasks)prefixtags)z.mp4z.mkvz.aviz.movz.tsz/process)default)fileurl
confidence
categoriesc              
      s  z| s |s t dddddW S d\}}}| r| jr|s| jtrtj| j\}}t|}tjd|}	t	|	d}
t
| j|
 W 5 Q R X |	}t|	}d	}nt d
ddddW S nf|r
| s
|trd}|}t|\}}tj|\}}nt d
ddddW S nt dddddW S z>|||||d}t|}t t||d| ddddW W S  tk
r } z"t t||dddd W Y W S d}~X Y nX W n< tk
r } zt d|dddd W Y S d}~X Y nX dS )a  
    Process the data from the request.

    Parameters:
        - request: ProcessDataRequest object containing the request data.
            - file (optional): The form content file (bytes).
            - url (optional): The URL (HTTP/HTTPS).
            - confidence (optional): The confidence value (float).
            - categories (optional): The list of categories (List[str]).

    Returns:
        A dict with the message "Data processed successfully".
    z(Either 'file' or 'url' must be provided.ERROR)messagestatusi  status_code)NNNstaticwbz(File detected and processed successfullyzSInvalid file type. Only video files (.mp4, .avi, .mov) and .ts files are supported.z5Video/TS file URL detected and processed successfullyz(Either a file or a URL must be provided.)titledurationsourcer   r   z/api/v1/tasks/result/
PROCESSING)task_idr   Z
url_resultr      )r$   r   r   N)datar   r   )r   filenameendswith
extentionsospathsplitextr   joinopenshutilcopyfileobjr   r   r   r   delaystr	Exception)r   r   r   r   r    r!   r"   	extensionZunique_filename	file_pathfr   _Z
video_datar$   ex r9   */var/www/html/BCA_API/app/api/v1/videos.pyprocess   s    



	

	"r;   z/status/{task_id})response_model)r$   c                    s"   t | }tt| |jddddS )N r$   r   result   r   )r   r   r2   r   )r$   taskr9   r9   r:   r      s    r   z/result/{task_id}c                    sZ   t | }| s*tt| |jddddS | }|d}tt| |d|dddS )Nr=   r>   r%   r   r?   r   r@   )r   readyr   r2   r   get)r$   rA   Ztask_resultr?   r9   r9   r:   r?      s$    	
r?   )"r*   r/   Zcelery.resultr   typingr   r   fastapi.responsesr   fastapir   r   r   r	   r
   Z	app.tasksr   Zapp.schemasr   r   r   Z	app.utilsr   r   r   routerr)   postr2   floatr;   rC   r   r?   r9   r9   r9   r:   <module>   s2   
y