
    |j(                        S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJr  SS	KJrJrJrJrJr  SS
KJr  SS jrSSS jjr " S S5      rg)z(CRUD de Google Drive OAuth por customer.    )annotations)datetime)Any)Session)CustomerDriveSettingModel)CustomerModel)settings)customer_drive_configuredload_customer_drive_configparse_drive_credentials_jsonparse_oauth_client_pairtest_drive_connection)google_drive_oauthc                 ,    [         R                  " 5       $ N)r   utcnow     ZC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\customer_drive_class.py_nowr      s    ??r   c                t    U =(       d    SR                  5       nU(       d  g [        U5      U::  a  gUS U  S3$ )N u   ••••••••)striplen)valueheadtexts      r   _mask_secretr      s=    KR D
4yD)5Dk]233r   c                      \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
S	S	S	S
S.           SS jjrSS jrSrg	)CustomerDriveClass$   c                    Xl         g r   db)selfr$   s     r   __init__CustomerDriveClass.__init__%   s    r   c                    U R                   R                  [        5      R                  [        R                  [        U5      :H  5      R                  5       $ r   )r$   queryr   filteridintfirstr%   customer_ids     r   _ensure_customer#CustomerDriveClass._ensure_customer(   s8    GGMM-(VM$$K(889UW	
r   c                    U R                   R                  [        5      R                  [        R                  [        U5      :H  5      R                  5       $ r   )r$   r)   r   r*   r/   r,   r-   r.   s     r   _rowCustomerDriveClass._row/   s:    GGMM34V-99S=MMNUW	
r   c                    U R                  U5      nU(       a#  UR                  =(       d    SR                  5       OSnU(       a   [        U5      nUS   US   4$ [
        R                  " 5       $ ! [         a     N!f = f)Nr   	client_idclient_secret)r3   credentials_jsonr   r   
ValueErrordrive_oauthplatform_oauth_client)r%   r/   rowrawpairs        r   _oauth_client_for$CustomerDriveClass._oauth_client_for6   sy    ii$69s##)r002r.s3K($*??? 0022  s   A0 0
A=<A=c                X   U R                  U5      nU(       a#  UR                  =(       d    SR                  5       OSnS nS nSnSnU(       a   [        U5      nSn[	        US   5      S:  a  SUS   SS   3OSUS    3nS	n [        U5      u  pU	nU	S	:X  ar  [        U
R                  S
5      =(       d    U
R                  S5      5      n[        U
R                  S5      =(       d    S5      n[	        U5      S:  a  SUSS   3OSU 3nO$[        U
R                  S5      =(       d    S5      n [        U R                  [        U5      5      n[        R                  " 5       =(       a    UnS nS nS nU(       a   [        U5      n[        US   5      n[        US   5      n [        U5      u  pU	S	:X  a  [        [        U
R                  S5      =(       d    S5      5      n[        [        U
R                  S5      =(       d    S5      5      nU
R                  S
5      (       a,  [        [        U
R                  S
5      =(       d    S5      5      n[        U5      U(       a  [        UR                   5      OSU(       a  UR"                  =(       d    S OS [        U5      =(       a    UUUUUUUUU[$        R&                  =(       d    SR                  5       =(       d    S S S.$ ! [
         a     GNkf = f! [
         a    U(       d  Sn GNf = f! [
         a     GNxf = f! [
         a     Nf = f)Nr   FTr6      u   OAuth Web · …iu   OAuth Web · oauthrefresh_tokentokenu   OAuth · …u	   OAuth · client_emailservice_accountz.Credenciales parciales (falta conectar Google)r7   )r/   enabledroot_folder_idhas_credentialshas_oauth_clientcredentials_hintclient_id_previewclient_secret_previewrefresh_token_preview	auth_kind
configuredoauth_web_readyoauth_redirect_uricredentials_json_value)r3   r8   r   r   r   r9   r   boolgetstrr
   r$   r,   r:   oauth_redirect_configuredr   rH   rI   r	   google_drive_oauth_redirect_uri)r%   r/   r<   r=   hintrP   rK   has_refreshr>   kindinfocidrQ   	can_startrM   rN   rO   s                    r   rV   CustomerDriveClass.getA   s    ii$69s##)r002r	 
.s3#'  4,-2 'tK'8'>&?@(k):(;< 
 $	L9#>
 	7?"&txx'@'UDHHWDU"VKdhh{39r:C9<SB\#cd)5iX[W\L]Dtxx7L;LMD /twwK8HI
99;P@P	  $ $.s3$0k1B$C!(4T/5J(K%9#>
7?(4S+9N9TRT5U(V%,8TXXo=V=\Z\9],^)xx000<S/AZA`^`=a0b- {+,/tCKK(U>As119Tt#Cy8[ 0 $!2%:%:"$(#+#K#K#Qr"X"X"Z #&*
 	
G    LKDL    sP   4K  BK1 
#K1 9'L !B-L  
K.-K.1LL
LL
L)(L)c                   U R                  U5      (       d	  SSU S3S.$ U R                  U5      nU(       d  SSS.$  [        R                  " [	        U5      US   US   S9nS	S
US.$ ! [
         a  nS[        U5      S.s S nA$ S nAff = f)NerrorCliente  no encontrado.statusmessagezdGuarda primero client_id y client_secret OAuth Web de este cliente, luego pulsa Conectar con Google.r      )r/   r6   r7   successOKrf   rg   data)r0   r?   r:   build_authorize_urlr,   r9   rW   )r%   r/   r>   rl   excs        r   start_oauthCustomerDriveClass.start_oauth   s    $$[11%H[M2YZZ%%k2!7 	<22,q'"1gD
 (D$GG 	<%#c(;;	<s   *A) )
B3B BBc                   [         R                  " U5      n[        US   5      nU R                  U5      nU(       d  SSS.$  [         R                  " UUUS   US   S9n[        US   5      nU R                  UUS   S	S
9nUR                  S5      S:X  a  U$ SSSU0UR                  S5      =(       d    0 ES.$ ! [         a  nS[	        U5      S.s S nA$ S nAff = f! [         a  nS[	        U5      S.s S nA$ S nAff = f)Nr/   rb   re   z4No hay client_id/secret guardados para este cliente.r   rh   )codestater6   r7   r8   T)r8   rH   rf   ri   z)Google Drive conectado para este cliente.rl   rk   )	r:   verify_oauth_stater,   r9   rW   r?   exchange_code_for_credentialsupsertrV   )	r%   rr   rs   peekr/   rn   r>   	exchangedresults	            r   complete_oauth!CustomerDriveClass.complete_oauth   s+   	<11%8Dd=12K %%k2!Q 	<#AAq'"1g	I )M23&'9:  

 ::h7*MB"KNFJJv4F4L"N
 	
7  	<%#c(;;	<   	<%#c(;;	<s;   $B< C! <
CCCC!
D+C>8D>DNF)rI   r8   rH   clearc                  U R                  U5      (       d	  SSU S3S.$ U R                  R                  [        5      R	                  [        R
                  [        U5      :H  5      R                  5       n[        5       nU(       aQ  U(       a5  U R                  R                  U5        U R                  R                  5         SSU R                  U5      S.$ Uc0  [        [        U5      SUUS	9nU R                  R                  U5        Ub  [        U5      Ul        Ub  UR                  5       =(       d    S Ul        Ub5  UR                  5       nU(       a   [#        U5         [%        U5        Xl        Xvl        U R                  R                  5         SS
U R                  U5      S.$ ! [&         a     NGf = f! [&         a6     [%        U5         Nc! [&         a  n	S[)        U	5      S.s S n	A	s $ S n	A	ff = ff = f)Nrb   rc   rd   re   ri   z,Google Drive desconectado para este cliente.rk   T)r/   rH   
created_at
updated_atz"Google Drive del cliente guardado.)r0   r$   r)   r   r*   r/   r,   r-   r   deletecommitrV   addrU   rH   r   rI   r   r   r9   rW   r8   r   )
r%   r/   rI   r8   rH   r|   r<   nowr=   rn   s
             r   rv   CustomerDriveClass.upsert   s    $$[11%H[M2YZZ GGMM34V-99S=MMNUW 	
 fs# #I-  ;+,	C GGKKw-CK%!/!5!5!7!?4C'"((*C+C04S9 (+$;HH[)
 	
 &  " HH4S9% H*1c#hGGHHsH   F< &F, ,
F98F9<
G<G
G8G3+G8,G<3G88G<c                     [        U R                  [        U5      5      n[        U5      nSSUS.$ ! [         a  nS[        U5      S.s S nA$ S nAff = f)Nri   u&   Conexión OK con el Drive del cliente.rk   rb   re   )r   r$   r,   r   	ExceptionrW   )r%   r/   cfgrl   rn   s        r   testCustomerDriveClass.test  sZ    		<,TWWc+6FGC(-D#C 
  	<%#c(;;	<s   /2 
AA	AAr#   )r$   r   returnNone)r/   r,   r   zCustomerModel | None)r/   r,   r   z CustomerDriveSettingModel | None)r/   r,   r   ztuple[str, str] | None)r/   r,   r   dict[str, Any])rr   rW   rs   rW   r   r   )r/   r,   rI   
str | Noner8   r   rH   zbool | Noner|   rU   r   r   )__name__
__module____qualname____firstlineno__r&   r0   r3   r?   rV   ro   rz   rv   r   __static_attributes__r   r   r   r    r    $   s    

	3D
L<,$
T &*'+#B
B
 #	B

 %B
 B
 B
 
B
H
<r   r    N)r   r   )   )r   r   r   r,   r   r   )__doc__
__future__r   r   typingr   sqlalchemy.ormr   -app.backend.db.models.customer_drive_settingsr   app.backend.db.models.pie_corer   app.backend.core.configr	   'app.backend.utils.customer_drive_configr
   r   r   r   r   app.backend.utilsr   r:   r   r   r    r   r   r   <module>r      sC    . "   " S 8 ,  @4m< m<r   