o
    Ci&-                     @   s  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 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 d dlmZmZmZm Z 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, d dl-Z-d dl.Z.d dl/Z/d dl0Z0d dl1m2Z2m3Z3 d dl4m5Z5 d dlm6Z6 G dd deZG dd deZ7G dd deZ8dS )    )render)Response)IsAuthenticated)TokenHasReadWriteScopestatus)APIView)ViewSet)csrf_exempt)transaction)
CreateTaskUpdate_TaskPlan)models)generate_user_unique_codefile_save_1UUIDEncoders3CustomPaginator)airflow_token)token_function)settings)swagger_auto_schema)datetime)utcN)require_permissionCustomIsAuthenticated)method_decorator)OAuth2Authenticationc                   @   sh   e Zd ZegZegZeZe	ede
ede edd ZeZe	ede
eddd ZdS )	TaskPlan)request_bodyztaskplan.createc                 C   sx  |j j}| j|jd}|jddr|jd }|jd }|jd }tjjj	|d}t
jjj||d r<td	d
itjdS t|d}||d< ||d< |j|d< ||d< tjtjdt|}	tj|	dd tj|	| d}
t|
d}tj||dtd W d    n1 sw   Y  | d}t |d|dd}
t
jjj!|||
d |d}td|jdtj"dS td	ditj#dS )NdataTraise_exception	task_name	task_plandrawflowid)Task_name__exactuser_idmessageTask name already Existsr   TASKdag_idusernamer*   r   )exist_ok.jsonw   indentclsutf-8 file_url)	Task_nameTask_idDrawFlowr*   zSaved SucessFullyr+   Task_Plan_idSerializer Error)$userr(   serializer_classr!   is_validvalidated_dataauth_modelsUserProfileobjectsgettask_modelsr   filterexistsr   r   HTTP_406_NOT_ACCEPTABLEr   r/   ospathjoinr   
config_dirstrmakedirsopenjsondumpr   readdecoder   createHTTP_200_OKHTTP_400_BAD_REQUEST)selfrequestr*   
serializerr$   r%   r&   r@   r;   configs_dir	file_pathf	file_datar(    ra   %/var/www/Datamplify/TaskPlan/views.pypost"   s<   




zTaskPlan.postztaskplan.editc                 C   sd  |j }|j}|g}t|dr|jr||jj | j|jd}|jddr)|jd }|jd }|jd }|jd }	t	j
jj||d	j|d
 rRtdditjdS t	j
jj||d rgt	j
jj||d}
n	tdditjdS |
j|d< ||d< t|
jdr|
jjn|
j}ddlm} t|
dd }|rt|dr||j|d< nd|d< ||d< tj dt| }tj||
j d}tj||
j d}|}t |d}t!j"||dt#d W d    n1 sw   Y  t$|| |
j%&dd }|	' (d}t)|d|
jdd| }t	j
jj|d
j*||d  t+,t-d!}td"t|d#tj.dS tdd$itj/dS )%N
created_byr    Tr"   r(   r$   r%   r&   )r)   user_id__inr'   r+   r,   r   r(   re   zData Flow Not Createdr.   r   )	force_strr*   r/   r8   
/TaskPlan/r1   r2   r3   r4   	TaskPlan/   r7   r   Datamplify/TaskPlan/r9   )r:   r<   
updated_atzupdated SucessFullyr=   r?   )0r@   r(   hasattrrd   appendserializer_class1r!   rB   rC   rH   r   rF   rI   excluderJ   r   r   rK   rG   HTTP_404_NOT_FOUNDr;   r*   django.utils.encodingrg   getattrr/   r   rO   rP   rL   rM   rN   rR   rS   rT   r   renamer<   splitrU   rV   r   updater   nowr   rX   rY   )rZ   r[   r@   r*   accessible_user_idsr\   r(   r$   taskr&   	Task_datatask_owner_idrg   user_objr]   r^   new_file_pathr!   r_   datasrc_keyr`   updated_datara   ra   rb   putK   sV   




zTaskPlan.putN)__name__
__module____qualname__r   authentication_classesr   permission_classesr   rA   r   r   r   r   atomicr
   rc   r   ro   r   ra   ra   ra   rb   r      s    
$
r   c                   @   sL   e Zd ZegZegZeee	de
 dd Zee	ddd ZdS )Taskoperationstaskplan.viewc                 C   s  |j }|j}|g}t|dr|jr||jj tjjj||d	 rtjjj
||d}|j}t|jdr9|jjn|j}tj dt| }	tj|	| d}
t|
d}t|}W d    n1 sew   Y  t
|j}| }td|||||jdtjd	S td
ditjd	S )Nrd   rf   r(   rh   r1   rsuccess)r+   r(   r;   r%   r&   r$   r   r+   zTask Not Found)r@   r(   rm   rd   rn   rH   r   rF   rI   rJ   rG   r;   r*   r   rO   rP   rL   rM   rN   rR   rS   loadrequestsr<   r   r:   r   rX   rq   )rZ   r[   r(   r@   r*   rx   r!   r.   r{   r]   r^   r_   dag_jsontransformationtransformations_flowra   ra   rb   rG      s6   
zTaskoperations.getztaskplan.deletec                 C   s`  |j }|j}|g}t|dr|jr||jj tjjj||d	 rtjjj
||d}t }tj d|j }dd| i}	tj||	d}
t|jdrP|jjn|j}tj dt| }tj||j d	}tj	|rst| |jd
d }tjtjdt| d tjjj||d  tjjj|jd  tddit j!dS tddit j"dS )Nrd   rf   z/api/v2/dags/AuthorizationzBearer )headersr(   rh   r1   ri   rj   rk   )BucketKey)	source_idr+   zDeleted Successfullyr   zTask Plan Not Created)#r@   r(   rm   rd   rn   rH   r   rF   rI   rJ   rG   r   r   airflow_hostr;   r   deleter*   rO   rP   rL   rM   rN   remover<   ru   r   delete_objectAWS_STORAGE_BUCKET_NAME
mon_models
RunHistoryr   r   rX   rq   )rZ   r[   r(   r@   r*   rx   	task_data	air_tokenurlr   responser{   r]   r^   r~   ra   ra   rb   r      s.   

zTaskoperations.deleteN)r   r   r   r   r   r   r   r
   r   r   r   r   rG   r   ra   ra   ra   rb   r   ~   s    

r   c                   @   s8   e Zd ZegZegZeede	e
 dd ZdS )	Task_Listr   c              	   C   s,  ddl m} |j}|j}t }|j|jd}|j|j|j	}|jdd}|g}	|j
r3|	|j
 zt|}tt||j}W n ttfyT   tddidd	 Y S w tjjj|	d
d}
|rh|
j|d}
|
 }||| }|d | }|}|
ddddd|||  }t|||||dtjd	S )Nr   )ceilrj   searchr8   errorzInvalid pagination parametersi  r   )re   z-updated_at)Task_name__icontainsr(   r:   
created_atrl   r*   )r!   total_pagestotal_recordspage_number	page_size)mathr   r@   r(   r   query_paramsrG   page_query_parampage_size_query_paramr   created_by_idrn   intminmax_page_size
ValueError	TypeErrorr   rH   r   rF   rI   order_bycountvaluesr   rX   )rZ   r[   r   r@   r*   	paginatorr   r   r   rx   r   r   r   offsetlimitr!   ra   ra   rb   rG      sH   zTask_List.getN)r   r   r   r   r   r   r   r   r   r
   r   r   rG   ra   ra   ra   rb   r      s    
r   )9django.shortcutsr   rest_framework.responser   rest_framework.permissionsr   &oauth2_provider.contrib.rest_frameworkr   rest_frameworkr   rest_framework.viewsr   rest_framework.viewsetsr	   django.views.decorators.csrfr
   	django.dbr   TaskPlan.serializersr   r   authenticationr   rD   r   rH   Monitorr   Service.utilsr   r   r   r   r   Monitor.utilsr   authentication.utilsr   
Datamplifyr   drf_yasg.utilsr   r   pytzr   rL   rS   r   statauthentication.permissionsr   r   django.utils.decoratorsr   r   r   r   ra   ra   ra   rb   <module>   s6     aF