
    g              
           d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	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mZ d dlmZ d dlmZ d dl d d	lmZ  e       Z  e	       Z! e         e" e jF                  d
            dz   Z$ e" e jF                  d            dz   Z%e jM                  dejN                         ee!      fde
fd       Z(e jS                  d       ee!       eejT                        fdejV                  de
defd       Z,	 e j[                  d       ee!       eejT                        fde.dejV                  de
defd       Z/e ja                  d       ee!       eejT                        fde.de
defd       Z1y)    N)	APIRouterDependsRequestHTTPExceptionstatus)
HTTPBearerHTTPAuthorizationCredentials)JSONResponse)Session
joinedload)load_dotenv)UserFolder	Documents)*)	S3ServiceDB_PATH/STORAGE_PATHz/list)response_modelcredentialsc                   K   t        j                         }| j                  }t        j                  ||      }	 |j                  t              j                  t        j                  |j                  k(        j                  t        t        j                              j                         }|st        d      S |D cg c]!  }t        j                  j!                  |      # }}t#        d|D cg c]  }|j%                          c}      S c c}w c c}w # t&        $ r}t)        ddt+        |             d }~ww xY ww)NzFolder does not exist.zFolders retrieved successfully  Something went wrong: status_codedetail)dbaseSessionLocalr   authget_current_userqueryr   filteruser_idoptionsr   	documentsallerrorResponseschemasFolderResponsefrom_ormsuccessReponsedict	Exceptionr   str)r   dbtokenuserfoldersfolderfolder_dataes           */var/www/html/answerous/routers/folders.pyget_foldersr8      s    				B##E  U+DW((6"))&..DLL*HIQQR\]c]m]mRnossu (  NUU6w--66v>UU ,)45vV[[]5
 	
 V
 6 W6LSQRVH4UVVWsS   7EA?D 9E:D >&D$D 0D
D E
D 	D?!D::D??Ez/creater4   r0   c                 8  K   |j                   }t        j                  ||      }	 | j                  r| j                  j	                         ndt              | j                  r| j                  nd}st        d      S rt        fddD              rt        d      S |dk7  r|dk7  rd}t              dkD  rd d j	                         n|j                  t              j                  t        j                  k(        j                  t        j                  |j                  k(        j                         }|rt        d	      S t!              }t#               }t        | j$                  r| j$                  nd
|j                  ||      }	|j'                  |	       |j)                          |j+                  |	       t-        t.              t-        |j0                        z   dz   t-        |	j2                        z   }
t-        t4              t-        |j0                        z   dz   t-        |	j2                        z   }t6        j8                  j;                  |
      st7        j<                  |
       t6        j8                  j;                  |      st7        j<                  |       |j?                  |       tA        dtB        jD                  jG                  |	      jI                               S # tJ        $ r}tM        ddt-        |             d }~ww xY ww)N NoFolder name is required.c              3   &   K   | ]  }|v  
 y wN .0charfolder_names     r7   	<genexpr>z create_folder.<locals>.<genexpr>@        I44;&I   \[]}{\$&%#@)()+!^.%Folder name contains characters only.Yes   z6This folder already exists. Please give a unique name.0)name	parent_idr$   sharedsanitized_namer   zFolder successfully created.r   r   r   )'r   r    r!   rC   stripnormalize_spacesrN   r(   anylenr"   r   r#   rL   r$   firstreplace_special_charactersr   rM   addcommitrefreshr/   	DB_FOLDER	user_coderO   UPLOAD_FOLDERospathexistsmakedirscreate_directoryr,   r)   r*   r+   r-   r.   r   )r4   r   r0   r1   r2   shared_typeexisting_folderrO   
s3_service
new_folderchroma_dir_namestorage_dir_namer6   rC   s                @r7   create_folderrg   /   s     ##E  U+D5W4:4F4Ff((..0B&{3'-}}fmm$ *  I3HII$%LMM%K4$7K 36k2BR2Gk#2&,,.[((6*11&++2LMTTU[UcUcgkgsgsUstzz| H  4K@[
*0*:*:f&&ll +

 	z
		


:i.T^^)<<S@ZE^E^A__}-c$...AA#Ec*JcJcFddww~~o.KK(ww~~./KK()##$45 *""++J7<<>
 	
  W6LSQRVH4UVVWsO   #LAK0  L K0 !L"B(K0 
LF$K0 /L0	L9LLLz/update/{folder_id}	folder_idc                   K   |j                   }t        j                  ||      }	 |j                  t              j                  t        j                  | k(        j                  t        j                  |j                  k(        j                         }|st        d      S |j                  r|j                  j                         ndt              |j                  r|j                  nd}st        d      S rt        fddD              rt        d      S |dk7  r|dk7  rt        d	      S t              d
kD  rd d
 j                         n|j                  t              j                  t        j                   k(        j                  t        j                  |j                  k(        j                         }|rt        d      S |_        ||_        |j#                          |j                  t              j                  t        j                  | k(        j                  t        j                  |j                  k(        j                         }	|j%                  |	       t'        dt(        j*                  j-                  |	      j/                               S # t0        $ r}
t3        ddt5        |
             d }
~
ww xY ww)NFolder not foundr:   r;   r<   c              3   &   K   | ]  }|v  
 y wr>   r?   r@   s     r7   rD   z update_folder.<locals>.<genexpr>   rE   rF   rG   rH   rI   z!Share must be only "Yes" or "No".rJ   z:Folder name already exist. Please use another folder name.zFolder successfully updated.r   r   r   )r   r    r!   r"   r   r#   rh   r$   rT   r(   rC   rP   rQ   rN   rR   rS   rL   rW   rX   r,   r)   r*   r+   r-   r.   r   r/   )rh   r4   r   r0   r1   r2   rb   ra   is_existupdated_datar6   rC   s              @r7   update_folderrn   r   s_    ##E  U+D)W((6*11&2B2Bi2OPWWX^XfXfjnjvjvXvw}} "  5;4F4Ff((..0B&{3'-}}fmm$ *  I3HII$%LMM%K4$7 3  36k2BR2Gk#2&,,.[88F#**6;;++EFMMfnn`d`l`lNlmssu L   +!,
		xx'..v/?/?9/LMTTU[UcUcgkgsgsUstzz|


< *""++L9>>@
 	
  W6LSQRVH4UVVWsh   #KA9J!  K!AJ! :K; J! KJ! 0K1BJ! KCJ!  K!	K*KKKz/delete/{folder_id}c                   K   |j                   }t        j                  ||      }	 |j                  t              j                  t        j                  | k(        j                  t        j                  |j                  k(        j                         }|st        d      S t        t              t        |j                        z   dz   t        |j                        z   }t        t              t        |j                        z   dz   t        |j                        z   }t        j                   j#                  |      rt%        j&                  |       t        j                   j#                  |      rt%        j&                  |       |j                  t(              j                  t(        j                  | k(        j+                         }|D ]#  }	|j-                  |	       |j/                          % |j-                  |       |j/                          t1        dd       S # t2        $ r}
t5        ddt        |
             d }
~
ww xY ww)Nrj   r   zFolder deleted successfullyr   r   r   )r   r    r!   r"   r   r#   rh   r$   rT   r(   r/   rY   rZ   rO   r[   r\   r]   r^   shutilrmtreer   r'   deleterW   r,   r.   r   )rh   r   r0   r1   r2   delete_folderre   rf   folder_documentsdocsr6   s              r7   rs   rs      s    ##E  U+DW(//0@0@I0MNUUV\VdVdhlhthtVtu{{} "  i.T^^)<<S@]EaEaAbb}-c$...AA#Ec-JfJfFgg 77>>/*MM/*77>>*+MM*+ 88I.55i6I6IY6VW[[]$ 	DIIdOIIK	 			- 
		)
 	
  W6LSQRVH4UVVWs6   #IA9H I E;H I	I%H>>II)2r\   rp   fastapir   r   r   r   r   fastapi.securityr   r	   fastapi.responsesr
   sqlalchemy.ormr   r   dotenvr   db_config.databasedatabaser   db_config.modelsr   r   r   db_config.schemasr)   db_config.authr    dependencies.helperdependencies.awsutilsr   routersecurityr/   getenvrY   r[   getFolderListResponser8   postget_dbFolderCreaterg   putintrn   rr   rs   r?       r7   <module>r      s   	  F F E * .  " 4 4 #  ! +	< 			)$%c)	IBIIn-.s2 GG$>$>?BI(BS W#? W @W0 Y 180A%,,'<W  <W-<W 	<W <W~ !"ry  {C  sD  T[  \a  \h  \h  Ti ,W3 ,W0D0D ,WSo ,W  JQ ,W #,W^ $%T[\dTeu|  ~C  ~J  ~J  vK "W3 "W5Q "Wkr "W &"Wr   