o
    Ci"                    @   s  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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mZmZmZmZmZmZ d dl m!Z!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/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z= e'j'>e*Z?e'j'>e*Z@d dlAmBZB dZCdd ZDdd ZEdd ZFG dd  d eZGG d!d" d"eZHG d#d$ d$eZIG d%d& d&eZJd d'l1m2Z2mKZKmLZL d d(l1m2Z2mKZKmLZLm3Z3mMZMmNZN G d)d* d*eZOG d+d, d,eZPG d-d. d.eZQG d/d0 d0eZRG d1d2 d2eZSG d3d4 d4eZTed5gee=gee9ge7d6d7d8 ZUG d9d: d:eZVG d;d< d<eZWd dl mZ d dlmZ d d	lmZ d d=lXmYZY G d>d? d?eZZG d@dA dAeZ[d dBl\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZk d dCllmmZmmnZnmoZo G dDdE dEeZpG dFdG dGeZqG dHdI dIeZrdS )J    )APIView)api_viewauthentication_classespermission_classes)transaction)csrf_exempt   )ServerConnectFile_uploadserver_FilesRemote_files)models)Responsestatus)encode_valuefile_files_saveCustomPaginators3
SSHConnectencrypt_jsondecrypt_json)server_connectionget_table_detailsdiscover_endpoint_schema)token_functionN)utc)swagger_auto_schema)Resource)settings)QSubquery)text)require_permissionrequire_all_permissionsCustomIsAuthenticated)method_decorator)OAuth2Authentication)cachezconnections:list:versionc                   C   s   t tdd S )Nr   )r(   
get_or_setCONNECTION_LIST_VERSION_KEY r+   r+   (/var/www/Datamplify/Connections/views.pyget_connection_list_version"   s   r-   c              
   C   sD   d ttt| }|pd}t }d| d| d| d| d| 
S )N,nonezconnections:list:accessible:z:page:z:size:z:search::)joinmapstrsortedr-   )accessible_user_idspage	page_sizesearchids_partsearch_partversionr+   r+   r,   connection_list_cache_key'   s   r<   c                   C   s   t t d S )N)r(   incrr*   r+   r+   r+   r,   bump_connection_list_version5   s   r>   c                   @   F   e Zd ZegZegZeZe	ede
ede edd ZdS )Server_Connectionrequest_bodyconnection.createc                 C   s  |j j}| j|jd}|jddr|jd }|jd }|jd }|jd }|jd }|jd	 }	|jd
 }
|jd }|jd }|jd }tjjj	|
|d
 rWtdditjdS ztjjj|dd}W n tjjyv   tdditjd Y S w t|}t|||	||||j |}tjjj|d}|d dkrtjjj|||||	||||
d||d}tjjj|j||d}t  td|jdtjdS td|d itjdS tdditjdS )NdataTraise_exceptiondatabase_typehostnameportusernamepassworddatabaseconnection_nameservice_namepathschemaconnection_name__iexactuser_idmessage Connection Name  Existsr   DATABASEidtype__iexact Connection Not ImplementedrY   r      )server_typerI   rK   rL   rM   database_pathrO   rJ   rN   is_connectedrT   rQ   table_idtyperT   Connection SuccessfullrU   rY   Invalid Values)userrY   serializer_classrE   is_validvalidated_dataconn_modelsDatabaseConnectionsobjectsfilterexistsr   r   HTTP_406_NOT_ACCEPTABLEDataSourcesgetDoesNotExistr   r   nameupperauth_modelsUserProfilecreateConnectionsr>   HTTP_200_OKHTTP_400_BAD_REQUEST)selfrequestrT   
serializerdb_typerI   rJ   rK   rL   db_namerN   rO   server_pathrQ   	conn_typeencoded_passwserver_connUser
connectionconn_idr+   r+   r,   post=   s^   









zServer_Connection.postN)__name__
__module____qualname__r'   r   r%   r   r	   rh   r   r&   r#   r   atomicr   r   r+   r+   r+   r,   r@   8       
r@   c                   @      e Zd ZegZegZeZe	ede
ede edd Ze
ede edd Ze
ede ed	d
 ZdS )Server_Connection_updaterA   connection.editc                 C   s  |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 }
|jd	 }|jd
 }|jd }|jd }|jd }|jd }t	j
jj||d}t	jjj||dj|jd rytdditjdS zt	jjj|dd}W n t	jjy   tdditjd Y S w t|}t|
||||	||j |}tjjj|d}|d dkrt	jjj|jdj|||
|||||	||d
}t  td|dtjdS td|d itj dS tdditjdS )N
created_byrD   TrF   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rY   user_id__inrS   r   r\   rU   rV   r   rW   rX   r[   r   r]   )
r^   rI   rK   rL   rM   r_   rO   rJ   rN   rQ   Update Successfullre   rf   )!rg   rY   hasattrr   appendrh   rE   ri   rj   rk   ry   rm   rr   rl   rn   excluderb   ro   r   r   rp   rq   rs   r   r   rt   ru   rv   rw   updater>   rz   r{   )r|   r}   rY   rg   rT   r5   r~   r   rI   rJ   rK   rL   r   rN   rO   r   rQ   	conn_datar   r   r   r   r   r+   r+   r,   puty   sZ   









 zServer_Connection_update.putconnection.viewc                 C   s   |j }|j}|g}t|dr|jr||jj ztjjj||d}W n tjj	y7   t
dditjd Y S w ztjjj|j|dd}W n tjj	yY   t
dditjd Y S w |j|jj|j|j|j|j|j|j|j|j|j|jd}t
|tjdS )	Nr   r   rU   Connection not foundr   TrY   r   r`   )rY   rH   rI   rJ   rK   rM   rN   rO   rP   rQ   
created_at
updated_at)rg   rY   r   r   r   rk   ry   rm   rr   rs   r   r   HTTP_404_NOT_FOUNDrl   rb   r^   rI   rJ   rK   rM   rN   rO   r_   rQ   r   r   rz   )r|   r}   rY   rg   rT   r5   connection_dataDatabase_datar+   r+   r,   rr      s:   zServer_Connection_update.getconnection.deletec                 C   s   |j }|j}|g}t|dr|jr||jj ztjjj||d}W n tjj	y7   t
dditjd Y S w ztjjj|j|d}W n tjj	yX   t
dditjd Y S w |  |  t  t
dditjdS )Nr   r   rU   Connection not found r   z connection not foundConnection deleted successfully)rg   rY   r   r   r   rk   ry   rm   rr   rs   r   r   r   rl   rb   deleter>   rz   )r|   r}   rY   rg   rT   r5   r   db_connr+   r+   r,   r      &   zServer_Connection_update.deleteN)r   r   r   r'   r   r%   r   r	   rh   r   r&   r#   r   r   r   r   rr   r   r+   r+   r+   r,   r   t   s"    

2
"r   c                   @   sB   e Zd ZegZegZeZe	e
deede dd ZdS )File_ConnectionrC   rA   c              	   C   s  |j j}| j|jd}|jddr|jd }|jd }|jd }tjjj	||d
 r4tdd	itjd
S ztjjj|dd}W n tjjyS   tdditjd
 Y S w |jdddddd}tjjj	|d
 rtjjj|d}	t||}
|
d }|
d }tjjj|d}tjjj|	||||ttd}tjjj|j||d}t  td|jdtjd
S tdditjd
S tdditjd
S )NrD   TrF   	file_type	file_pathrN   rR   rU   rV   r   FILESrX   z#Database Connection Not Implemented  &-_r\   file_urlfile_key)r   sourcedatapathrN   rT   uploaded_atr   ra   zUpload Succesfullyre   errorzUnsupported file typezInvali Data)rg   rY   rh   rE   ri   rj   rk   FileConnectionsrm   rn   ro   r   r   rp   rq   rr   rs   rt   replacer   rv   rw   rx   r   r   ry   r>   rz   )r|   r}   rT   r~   r   file_path112	conn_namer   r   ft	file_saver   
file_path1rg   	file_connr   r+   r+   r,   r      sL   



	zFile_Connection.postN)r   r   r   r'   r   r%   r   r
   rh   r&   r#   r   r   r   r   r+   r+   r+   r,   r      s    
r   c                   @   s   e Zd ZegZegZeZe	 e
ede eeddd Ze	 e
ede dd Ze	 e
ede d	d
 ZdS )File_operationsr   rA   c              
   C   s  |j }|j}|g}t|dr|jr||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	j|
jd
 rVtdditjdS zt	jjj|
j|d}W n t	j
jyv   tdditjd Y S w |jrztjtjt|jd W n  ty } ztddt| itjdW  Y d }~S d }~ww |	j dd dd dd}t!||	}|d }|d }t	j"jj|dd}t#j$jj|d
}||_%||_&||_||_'|(  t)  td|
jdtj*dS d S )Nr   rD   TrF   rN   r   r   r   r   r\   rU   rV   r   r   BucketKeyzS3 Deletion Failed: r   r   r   r   r   r   r   r   rX   zFile updated successfullyre   )+rg   rY   r   r   r   rh   rE   ri   rj   rk   ry   rm   rr   r   rn   r   rb   ro   r   r   rp   rs   r   r   r   delete_objectr   AWS_STORAGE_BUCKET_NAMEr3   	Exceptionr{   rt   r   r   rq   rv   rw   r   r   rN   saver>   rz   )r|   r}   rY   rg   rT   r5   r~   r   r   file_objconn_objr   enew_filenamer   r   r   r   r+   r+   r,   r   )  sN   


 (
zFile_operations.putr   c           	      C   s   |j }|j}|g}t|dr|jr||jj ztjjj||d}tj	jj|j
|d}W n tjjyA   tdditjd Y S w |j|jj|j|jt|j|j|jd}t|tjdS )Nr   r   rU   r   r   )rY   r   rN   r   r   r   r   )rg   rY   r   r   r   rk   ry   rm   rr   r   rb   rs   r   r   r   r   rN   r   r3   r   r   r   rz   )	r|   r}   rY   rg   rT   r5   r   r   rE   r+   r+   r,   rr   [  s(   	zFile_operations.getr   c           	   
   C   s  |j }|j}|g}t|dr|jr||jj ztjjj||d}tj	jj|j
|d}W n tjjyA   tdditjd Y S w z|jrQtjtjt|jd W n  tyr } ztddt| itjdW  Y d }~S d }~ww |  |  t  tdditjdS )	Nr   r   rU   r   r   r   zFailed to delete file from S3: z$File connection deleted successfully)rg   rY   r   r   r   rk   ry   rm   rr   r   rb   rs   r   r   r   r   r   r   r   r   r3   r   r{   r   r>   rz   )	r|   r}   rY   rg   rT   r5   r   r   r   r+   r+   r,   r   v  s.   (zFile_operations.deleteN)r   r   r   r'   r   r%   r   r
   rh   r   r&   r#   r   r   r   r   rr   r   r+   r+   r+   r,   r   #  s"    
.

r   )r    ExistsOuterRef)r    r   r   r!   CaseWhenc                   @   s4   e Zd ZegZegZeede	
 dd ZdS )Connection_listr   c                  C   s`  |j }|j}|g}t|dr|jr||jj t }|j|jd}|j|j	d}|jdd
 }t||||d}	zt|	}
W n tyN   d }
Y nw |
rXt|
tjdS zt|}tt||j}W n ttfyy   tdd	id
d Y S w |d | }|| }tjjjtd|dd}tjjjtd|d}tjjjtd|d}tjjjtdd}|r|j|d}|j|d}|j|d}|j|d}tjjj|djt |t |t |t |t!t"g dt#|$dd d dt"dt#|$dd d dt"dt#|$dd d dt"t%ddt#|$dd d ddt&dddt&dddB t&g dddB t&t%ddddB 'd}|( }t)||| }|s\tg |||d tjdS d!d" |D }d#d$ tj*jj|d%D }d&d" |D }d'd$ tjjj|d%D }d(d$ tjjj|d%D }d)d$ tjjj|d%D }d*d$ tjjj|d%D }g }|D ]]}||j+}|sq|j,d+kr||j-}n)|j,d,kr||j-}n|j,d-kr||j-}n|j,d.kr||j-}nq|sq||j.|j|j/|j|j,|j0|j1d/ q||||d }z
tj2|	|d0d1 W n
 ty(   Y nw t|tjdS )2Nr   r     r8   r   )r5   r6   r7   r8   r   r   zInvalid Parameters  rb   Tr   r   r\   )connection_name__icontains)r   )r            	   
   r   )type__inthen   )rc   r         2   )has_dbhas_file
has_remotehas_integrationupdated_at_combined)rc   r   )rc   r   )r   r   )r   r   z-updated_at_combined)rE   r6   r7   total_itemsc                 S      h | ]}|j qS r+   )type_id.0cr+   r+   r,   	<setcomp>      z&Connection_list.get.<locals>.<setcomp>c                 S      i | ]}|j |qS r+   r\   )r   dsr+   r+   r,   
<dictcomp>  s    z'Connection_list.get.<locals>.<dictcomp>)id__inc                 S   r   r+   )rb   r   r+   r+   r,   r     r   c                 S   r   r+   r\   )r   dr+   r+   r,   r         c                 S   r   r+   r\   r   fr+   r+   r,   r     r   c                 S   r   r+   r\   )r   rr+   r+   r,   r     r   c                 S   r   r+   r\   )r   ir+   r+   r,   r     r   rW   r   REMOTE_FILESINTEGRATIONS)display_namehierarchy_idr^   r   rc   r   r   <   )timeout)3rg   rY   r   r   r   r   query_paramsrr   page_query_parampage_size_query_paramstripr<   r(   r   r   r   rz   intminmax_page_size
ValueError	TypeErrorrk   rl   rm   rn   r   r   Remote_file_connectionsIntegrationsry   annotater   r   r   r!   valuesranger    order_bycountlistrq   r   rc   rb   rN   rt   r   r   set) r|   r}   rg   rT   r5   	paginatorpage_numberr7   r8   	cache_keycached_responseoffsetlimitdb_qsfile_qs	remote_qsintegration_qsconnections_qstotal_countconnectionstype_idsdata_sources_map	table_idsdb_mapfile_map
remote_mapintegration_mapresponse_dataconnr^   server_datafinal_responser+   r+   r,   rr     s   "

	zConnection_list.getNr   r   r   r'   r   r%   r   r&   r#   r   r   rr   r+   r+   r+   r,   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 )ETL_connection_listr   c                 C   s  |j }|j}|g}t|dr|jr||jj t }|j|jd}|j|j	d}|jdd}|jdd}	zt
|}tt
||j}W n ttfyZ   tddid	d
 Y S w |d | }
|}t
|
| d }z
tjjj|	d W n   tdditjd
 Y S tjjj||	d|
| }g }|D ]}tjjj|jjd}|j dkr tjjj|j|d|d}||j|j|j|jd|j|jd q dkr tjjj|j|d}||j|j|j|jd|j|jd q dkr tjjj|j|d}||j|j|j|jd|j|jd qdkr0tj jj|jd}||j|j|j|jd|j|jd q	 tdditjd
  S |||d}t|tj!d
S )Nr   r   r   r8   r   rc   r   zInvalid pagination parametersr   r   r   r\   rU   zConnection Type Does Not Exist)r   rc   rW   T)rY   r   r`   r   SERVER)r   r   	server_idr^   rc   r   r   r   r   r   r   zUnspported Source)rE   r6   r7   )"rg   rY   r   r   r   r   r   rr   r   r   r  r  r  r  r  r   rk   rq   rm   r   r   ry   rn   rc   rl   rb   rN   rt   r   r   r   r  r  rz   )r|   r}   rg   rT   r5   r  r  r7   r8   connection_typer  r  indexConnection_datar#  r   r^   r%  
files_dataremote_dataintegration_datar+   r+   r,   rr     s   


	





zETL_connection_list.getN)r   r   r   r'   r   r%   r   r&   r#   r   r   r   rr   r+   r+   r+   r,   r(    s    
r(  c                   @   2   e Zd ZegZegZeede	j
dd ZdS )Server_tablesr   c              	   C   sT  |j }|j}|g}t|dr|jr||jj tjjj||d	 rtjjj
||d}tjjj
|jd}tjjj
|jjd}t|j|j|j|j|j|j|j |j}	|	d dkrt|j|	d |j}
d|jrm|j nd d}|
|j |jd u r~d	n|j|_td
|
|j|j|j|jdtjdS td|	d i|	d dS tdditj dS )Nr   r   r\   r   r]   cursormain)SQLITEORACLEpublicsucessrU   tablesdatabase_namerQ   rN   rY   r   rU   Connection Not Found)!rg   rY   r   r   r   rk   ry   rm   rn   ro   rr   rl   rb   rq   rc   r   rK   rL   rM   rI   rJ   rO   rt   ru   r_   r   rQ   r^   r   rN   r   rz   r   )r|   r}   rY   rg   rT   r5   connections_datar   r^   r   tables_list
schema_mapr+   r+   r,   rr   8  s&   *$$zServer_tables.getNr'  r+   r+   r+   r,   r2  3  s    
r2  c                   @   r1  )
FileSchemar   c              
   C   s|  |j }|j}|g}t|dr|jr||jj tjjj||d	 s,t
dditjdS tjjj||d}tjjj|j|d}tt|jdrJ|jjn|j}|j}	t|d|	}
zFg }|	drit
dd	itjdW S t|d
}|  |j }dd |dg D }||	dd |d t
d||	d|
|dtjdW S  ty } zt
ddt| itjdW  Y d }~S d }~ww )Nr   r   rU   r   r   urlrN   z.xlsz.xlsxzNot Implemeted ATrP   c                 S   "   g | ]}|d  | dddqS rt   rc   any)coldtyperr   r   fieldr+   r+   r,   
<listcomp>      z"FileSchema.get.<locals>.<listcomp>fields.r   r:  columnssuccessfiler9  Error reading file: )rg   rY   r   r   r   rk   ry   rm   rn   ro   r   r   r   rr   r   rb   r3   r   rA  rN   getattrendswithHTTP_204_NO_CONTENTr   inferrQ   to_descriptorsplitrz   r   HTTP_500_INTERNAL_SERVER_ERROR)r|   r}   rY   rg   rT   r5   r   	File_datar   	file_namerN   r:  resourcerQ   rQ  r   r+   r+   r,   rr   [  sP   



	(zFileSchema.getNr'  r+   r+   r+   r,   r@  V  s    
r@  c                   @   s,   e Zd ZegZegZeeddd Z	dS )ListFilesViewr   c                    s   |j }|j}|g}t|dr|jr||jj |jdd}d}tj	tj
|| z fddt D }td|itjdW S  tyX   td	d
  ditjd Y S  tym   td	d  ditjd Y S w )Nr   rP   r   z/var/www/AB_Client/client2c                    s&   g | ]}t jt j |r|qS r+   )osrP   isfiler1   r   	directoryr+   r,   rL    s    z%ListFilesView.get.<locals>.<listcomp>filesr   r   zDirectory 'z' not found.zNo permission to access 'z'.)rg   rY   r   r   r   r   rr   r`  rP   abspathr1   listdirr   r   rz   FileNotFoundErrorr   PermissionErrorHTTP_403_FORBIDDEN)r|   r}   rg   rT   r5   rP   base_dirrd  r+   rb  r,   rr     s0   


zListFilesView.getN)
r   r   r   r'   r   r%   r   r&   r#   rr   r+   r+   r+   r,   r_    s
    
r_  c                   @   sD   e Zd ZegZegZeZe	e
deedeejdd ZdS )ServerFileSchemaViewrC   rA   c           
   
   C   s4  | j |jd}| r|jd }|jd }z[g }|dr'tdditjdW S |drYtd	| d
| d}|	  |j
 }dd |dg D }||dd |d n
tdditjdW S td||d|dtjdW S  ty }	 ztddt|	 itjdW  Y d }	~	S d }	~	ww tdditjdS )NrD   source_typer]  rB  rU   zNot Supportedr   z.csvz/var/www/AB_Client/client2//rC  c                 S   rD  rE  rI  rJ  r+   r+   r,   rL    rM  z-ServerFileSchemaView.post.<locals>.<listcomp>rN  rO  r   rP  rR  rS  )rU   r:  r;  rQ   rN   rT  zSerializer Error)rh   rE   ri   rj   rV  r   r   rW  r   rX  rQ   rY  rr   r   rZ  rz   r   r3   r[  r{   )
r|   r}   r~   rl  r]  r:  r^  rQ   rQ  r   r+   r+   r,   r     sD   






(zServerFileSchemaView.postN)r   r   r   r'   r   r%   r   r   rh   r&   r#   r   r   r   r   r   r+   r+   r+   r,   rk    s    
rk  POSTr   c                 C   sV  z| j }ztjjj|d dd}W n tjjy&   tdditjd Y W S w t	|d t
|d |d	 |d
 |d |dd|j |dd}|d dkr\td|d i|d dW S |d }|j  dkrq |td}n
dkr{|td}dd | D }td|itjdW S  ty } ztdt|itjdW  Y d }~S d }~ww )NrH   rW   rX   rU   r[   r   rK   rL   rM   rI   rJ   rO   r   rP   r   r]   r3  
postgresqlz
                    SELECT nspname 
                    FROM pg_catalog.pg_namespace 
                    WHERE nspname NOT LIKE 'pg_%' 
                    AND nspname <> 'information_schema';
                	snowflakez 
                    SELECT
                        SCHEMA_NAME
                    FROM INFORMATION_SCHEMA.SCHEMATA
                    ORDER BY SCHEMA_NAME;

                    c                 S   s   g | ]}|d  qS )r   r+   )r   rowr+   r+   r,   rL     s    z)get_available_schemas.<locals>.<listcomp>schemas)rE   rk   rq   rm   rr   rs   r   r   rp   r   r   rt   ru   lowerexecuter"   fetchallrz   r   r3   r{   )r}   rE   r   r   r3  schemas_queryrr  r   r+   r+   r,   get_available_schemas  s>   



"rw  c                   @   r?   )Remote_file_connectionrA   rC   c              	   C   sp  |j }|j}| j|jd}|jddr|jd }|jd }|jd }|jd }|jd }	|jd	 }
tjjj	|
|d

 rEtdditjdS ztjjj|dd}W n tjjyd   tdditjd Y S w t|j ||||	}|d dkrt|}tjjj|d}tjjj|||||	|
|d}tjjj|j||d}td|jdtjdS tdditjdS tdditjdS )NrD   TrF   r+  rI   rK   rL   rJ   rN   rR   rU   rV   r   r   rX   r[   r   r]   r\   )r^   rI   rK   rL   rJ   rN   rT   ra   rd   re   Invalid Credentialsrf   )rg   rY   rh   rE   ri   rj   rk   r  rm   rn   ro   r   r   rp   rq   rr   rs   r   rt   rs  r   rv   rw   rx   ry   rz   r{   )r|   r}   rg   rT   r~   r+  hostrK   rL   rJ   rN   r   responser   r   creationr   r+   r+   r,   r   .  sL   





	zRemote_file_connection.postN)r   r   r   r'   r   r%   r   r   rh   r   r&   r#   r   r   r   r   r+   r+   r+   r,   rx  )  r   rx  c                   @   r   )Remote_operationsrA   r   c                 C   s  |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 }
|jd	 }|jd
 }t	j
jj||d}t	jjj||dj|jd retdditjdS zt	jjj|j|d}W n t	j
jy   tdditjd Y S w zt	jjj|dd}W n t	jjy   tdditjd Y S w t|j ||	|
|}|d dkrt|
}tjjj|d}||_|	|_||_ ||_!||_"|#  t$  td|dtj%dS tdditj&dS tdditjdS )Nr   rD   TrF   r+  rI   rK   rL   rJ   rN   r   r   r\   rU   rV   r   r   r   rX   r[   r   r]   r   re   ry  rf   )'rg   rY   r   r   r   rh   rE   ri   rj   rk   ry   rm   rr   r  rn   r   rb   ro   r   r   rp   rs   r   rq   r   rt   rs  r   rv   rw   rI   rK   rL   rJ   rN   r   r>   rz   r{   )r|   r}   rY   rg   rT   r5   r~   r+  rz  rK   rL   rJ   rN   r   remote_connr   r{  r   r   r+   r+   r,   r   b  sP   





 zRemote_operations.putr   c              	   C   s   |j }|j}|g}t|dr|jr||jj ztjjj||d}W n tjj	y7   t
dditjd Y S w ztjjj|j|d}W n tjj	yX   t
dditjd Y S w |j|jj|j|j|j|j|j|jd}t
|tjdS )Nr   r   rU   r   r   )rY   rH   rI   rJ   rK   rN   r   r   )rg   rY   r   r   r   rk   ry   rm   rr   rs   r   r   r   r  rb   r^   rI   rJ   rK   rN   r   r   rz   )r|   r}   rY   rg   rT   r5   r   r~  r+   r+   r,   rr     s2   zRemote_operations.getr   c                 C   s   |j }|j}|g}t|dr|jr||jj ztjjj||d}W n tjj	y7   t
dditjd Y S w ztjjj|j|d}W n tjj	yX   t
dditjd Y S w |  |  t  t
dditjdS )Nr   r   rU   r   r   r   r   )rg   rY   r   r   r   rk   ry   rm   rr   rs   r   r   r   r  rb   r   r>   rz   )r|   r}   rY   rg   rT   r5   r   r~  r+   r+   r,   r     r   zRemote_operations.deleteN)r   r   r   r'   r   r%   r   r   rh   r   r&   r#   r   r   r   r   rr   r   r+   r+   r+   r,   r}  ]  s"    

.
r}  )IntegrationAuthOrchestratorc                   @   ,   e Zd ZegZegZe e	dd Z
dS )IntegrationAuthViewc              
   C   s  |j d}|stdditjdS tjjj|d |j	j
d r)tdditjdS ztjjj| dd	}W n tyQ } ztdd
itjdW  Y d }~S d }~ww t }z	|j||d}W n ty| } ztdt|dtjdW  Y d }~S d }~ww tjjj||d d dd t|d d t|d di d|d |j	d}	tjjj|j	j
d}
tjjj|	j
|
|d}td|j
dtjdS )NpayloadrU   payload is requiredr   r   rR   rV   r   rt   rc   Invalid Integrationintegration_typer  F	connectedrU   credentialssite_urltoken_metadataT)r  r  r  r  	is_activerN   rT   r\   )rb   rT   rc   r  re   )rE   rr   r   r   r{   rk   r  rm   rn   rg   rY   ro   rp   rq   ru   r   r  authenticater  r3   rx   r   rv   rw   ry   rz   )r|   r}   rc   r  
Datasourcer   orchestratorresultexcintegration_idr   r   r+   r+   r,   r     sN   
	zIntegrationAuthView.postNr   r   r   r'   r   r%   r   r   r   r   r   r+   r+   r+   r,   r        r  c                   @   sH   e Zd ZegZegZe e	dd Z
dd Ze e	dd ZdS )IntegrationOperationsc              
   C   s  |j }|j}|g}t|dr|jr||jj ztjjj||d}W n t	y> } zt
dditjdW  Y d }~S d }~ww |jd}|sPt
dditjdS ztjjj|jj dd	}	W n t	yz } zt
dd
itjdW  Y d }~S d }~ww t }
z|
j|jj |d}W n ty } zt
dt|dtjdW  Y d }~S d }~ww tjjj|jdj|d d dd t|d d t|d di dtd}t  t
d|dtjdS )Nr   r   rU   r<  r   r  r  r   r  r  r  Fr  r\   r  r  r  T)r  r  r  r  r   r  re   ) rg   rY   r   r   r   rk   ry   rm   rr   r   r   r   r   rE   r{   rq   rc   rt   ru   r  r  rs  r  r3   r  rn   rb   r   r   r   r>   rz   )r|   r}   rY   rg   rT   r5   r   r   r  r  r  r  r  r  r+   r+   r,   r   3  sZ   

zIntegrationOperations.putc           
      C   s   |j }|j}|g}t|dr|jr||jj ztjjj||d}W n tjj	y7   t
dditjd Y S w tjjj|jd}t|j}|dd  |dd  |d	d  |j|j|j||d
}	t
|	tjdS )Nr   r   rU   r   r   r\   client_secret	api_tokenprivate_key)r  rN   r  r  rY   )rg   rY   r   r   r   rk   ry   rm   rr   rs   r   r   r   r  rb   r   r  popr  rN   r  rz   )
r|   r}   rY   rg   rT   r5   r   integration_connr  rE   r+   r+   r,   rr   f  s,   
zIntegrationOperations.getc                 C   s   |j }|j}|g}t|dr|jr||jj ztjjj||d}W n tjj	y7   t
dditjd Y S w tjjj|jd}|  |  t  t
dditjdS )Nr   r   rU   r   r   r\   zDeleted sucessfully)rg   rY   r   r   r   rk   ry   rm   rr   rs   r   r   r   r  rb   r   r>   rz   )r|   r}   rY   rg   rT   r5   r   r  r+   r+   r,   r     s   zIntegrationOperations.deleteN)r   r   r   r'   r   r%   r   r   r   r   r   rr   r   r+   r+   r+   r,   r  /  s    1r  )NinjaClientHalopsaClient
ZohoClientTallyClient
JiraClientBambooHrClient
Pax8Client	DbtClientSalesforceClientQuickbooksClientGoogleSheetClientShopifyClientGoogleAnalyticClientHubSpotClientHubspotClientToken)OpenAIClientDeepSeekClientGeminiClientc                   @   r  )Integration_schemac                 C   s  |j d}|j d}|j}|j}|g}t|dr$|jr$||jj tjj	j
||d rtjj	j||d}tjj	j|jd}tjj	j|jjdj}	|	 dkrbtt|jt|j|j}
nK|	 dkrwtt|jt|j|j}
n6|	 dv rtt|jt|j|j}
n!|	 d	krtt|jt|j|j}
n|	 d
krtt|jt|j|j}
n|	 dkrtt|jt|j|j}
n|	 dkrtt|jt|j|j}
n|	 dkrtt|jt|j|j}
n|	 dkrtt|jt|j|j}
n|	 dkrtt|jt|j|j}
n|	 dkr0tt|jt|j|j}
n}|	 dkrEt t|jt|j|j}
nh|	 dkrZt!t|jt|j|j}
nS|	 dkrot"t|jt|j|j}
n>|	 dkrt#t|jt|j|j}
n)|	 dkrt$t|jt|j|j}
n|	 dkrt%t|jt|j|j}
t&|
||d}t'  t(d|dt)j*dS t(ddit)j+dS )NrY   endpointr   r   r\   ninjahalopsa)zoho_crm
zoho_bookszoho_inventorytallyjirabamboohrpax8dbt
salesforce
quickbooksgooglesheetshopifygoogleanalytichubspotopenaideepseekgeminir   r8  )rU   r:  r   rU   r<  ),rE   rr   rg   rY   r   r   r   rk   ry   rm   rn   ro   r  rb   rq   rc   rt   rs  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r>   r   r   rz   r   )r|   r}   rY   r  rg   rT   r5   r=  Integration_datar  clientr  r+   r+   r,   r     sb   zIntegration_schema.postNr  r+   r+   r+   r,   r    s    r  c                   @   r  )Integration_endpointsc                 C   s  |j }|j}|g}t|dr|jr||jj ztjjj||d}W n tjj	y7   t
dditjd Y S w |jj}|  dkrP ddlm} | }	n d	kra dd
lm}
 |
 }	n dkrg n dkrw ddlm} | }	n dkr ddlm} | }	n dkr ddlm} | }	n dkr ddlm} | }	n dkr ddlm} | }	n dkr ddlm} | }	n dkr ddlm} | }	n dkr ddlm} | }	n~ dkr ddlm} | }	nn dkr ddlm} | }	n] d kr dd!lm} | }	nL d"kr* dd#lm} | }	n; d$kr; dd%l m!} | }	n* d&krL dd'l m"} | }	nd(kr[dd)l m#} | }	n
	 t
dd*itj$dS t
d+|	itj%dS ),Nr   r   rU   r   r   r  r   )NINJA_CONFIGr  )HALOPSA_CONFIGconnectwiser  )ZOHO_CRM_CONFIGr  )ZOHO_INVENTORY_CONFIGr  )ZOHO_BOOKS_CONFIGr  )TALLY_CONGIGr  )BAMBOOHR_CONFIGr  )QUICKBOOKS_CONFIGr  )SALESFORCE_CONFIGr  )
DBT_CONFIGr  )PAX8_CONFIGr  )JIRA_CONFIGr  )SHOPIFY_CONFIGr  )HUBSPOT_CONFIGr  )OPENAI_CONFIGr  )DEEPSEEK_CONFIGr  )GEMINI_CONFIGznot implemented	endpoints)&rg   rY   r   r   r   rk   ry   rm   rr   rs   r   r   r   rc   rt   rs  integration_injectionr  keysr  r  r  r  r  r  r  r  r  r  r  r  r  LLM_injectionr  r  r  r{   rz   )r|   r}   rY   rg   rT   r5   r   rc   r  endpoints_listr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+   r+   r,   rr     s   


























zIntegration_endpoints.getN)r   r   r   r'   r   r%   r   r   r   r   rr   r+   r+   r+   r,   r    r  r  c                   @   r  )IntegrationAuthUrlc           
   
   C   s   |j dd }|rtjjj|d d rtdditj	dS ni }ztj
jj| dd}W n tyI } ztdd	itjdW  Y d }~S d }~ww |jd
d }||d
< t }|| |}| }	t|	tjdS )Nr  r   )rS   rU   rV   r   r   r  r  country)rE   rr   rk   r  rm   rn   ro   r   r   rp   rq   ru   r   r{   r   r  _get_auth_handlerrs  get_token_urlrz   )
r|   r}   rc   r  r  r   zoho_countryintegration_classintegrationrE   r+   r+   r,   r   ,  s$   zIntegrationAuthUrl.postNr  r+   r+   r+   r,   r  '  r  r  )srest_framework.viewsr   rest_framework.decoratorsr   r   r   	django.dbr   django.views.decorators.csrfr   serializersr	   r
   r   r   ry   r   rk   authenticationrv   rest_framework.responser   rest_frameworkr   Service.utilsr   r   r   r   r   r   r   Connections.utilsr   r   r   authentication.utilsr   uuiddatetimer`  pytzr   drf_yasg.utilsr   frictionlessr   
Datamplifyr   django.db.modelsr    r!   
sqlalchemyr"   authentication.permissionsr#   r$   r%   django.utils.decoratorsr&   &oauth2_provider.contrib.rest_frameworkr'   nowr   r   django.core.cacher(   r*   r-   r<   r>   r@   r   r   r   r   r   r   r   r   r(  r2  r@  r_  rk  rw  rx  r}  Integration_controllerr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+   r+   r+   r,   <module>   s|    $<z5o   >a#@!;34 2Dc?Q