
    (;i-                    L   d dl mZ d dlZd dlmZ d dlZdZddZ	 	 	 	 	 	 	 	 ddZdd	 	 	 	 	 	 	 	 	 	 	 dd	Z		 	 	 	 	 	 	 	 	 	 dd
Z
	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZdd	 	 	 	 	 	 	 	 	 	 	 ddZdd	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZy)    )annotationsN)quotez#https://www.googleapis.com/drive/v3c                F    | j                  dd      j                  dd      S )N\z\\'z\')replace)values    E/var/www/html/apps/backend-hub/app/services/google_workspace_drive.py_escape_drive_query_valuer      s     ==v&..sE::    c               T  K   | j                  t         dt        |d       dd| iddd	       d {   }|j                  d
k(  r=|j	                         }|j                  d      dk7  rt        d      t        |d         S |j                  dvr|j                          y 7 ow)N/files/ safeAuthorizationBearer zid, name, mimeTypetruefieldssupportsAllDrivesheadersparams   mimeType"application/vnd.google-apps.folderz8Il riferimento Drive esiste ma non punta a una cartella.id>         )getGOOGLE_DRIVE_ENDPOINTr   status_codejson
ValueErrorstrraise_for_status)clientaccess_tokenfolder_referenceresponsepayloads        r
   _lookup_folder_by_referencer.      s      ZZ 
!/?b)I(JK GL>":;*!'
    H s"--/;;z"&JJWXX74=!!?2!!#s   4B(B&A0B(F)search_anywherec                 K   dddt        |       dg}|r|j                  d| d       n|s|j                  d       | j                  t         ddd	| id
j	                  |      dddddd       d {   }|j                          |j                         j                  dg       }t        |t              r6|r4|d   }t        |t              r|j                  d      rt        |d         S y 7 {w)Nz/mimeType = 'application/vnd.google-apps.folder'ztrashed = falsezname = 'r   ' in parentsz'root' in parents/filesr   r   z and    zcreatedTime ascz&files(id, name, mimeType, createdTime)r   qpageSizeorderByr   r   includeItemsFromAllDrivesr   filesr   r   )r   appendr"   r#   joinr(   r%   
isinstancelistdictr'   )	r)   r*   folder_name	parent_idr/   query_partsr,   r9   firsts	            r
   _find_drive_folderrC   '   s     	:
,[9:!<K
 Qyk67./ZZ 
!( GL>":;k*(>!')/
    H MMO,E%5aeT"uyyuT{##%s   A7C79C5:A<C7c                  K   |dd}|r|g|d<   | j                  t         ddd| iddd	|
       d {   }|j                          t        |j	                         d         S 7 0w)Nr   )namer   parentsr2   r   r   zid, namer   r   r   r   r%   r   )postr#   r(   r'   r%   )r)   r*   r?   r@   r-   r,   s         r
   _create_drive_folderrI   N   s      8"G '[	[[ 
!( GL>":; !'
  !  H x}}t$%%s   5A*A(1A*c               <  K   |j                         j                  d      }|st        d      d|vrt        | ||       d {   }|r|S |j                  d      D cg c]#  }|j                         s|j                         % }}|st        d      d }t	        |      D ]Y  \  }}t        | |||       d {   }	|	||dk(  rt        | ||d d       d {   }	|	r|	}Ct        | |||       d {   }[ |st        d      |S 7 c c}w 7 Y7 :7  w)N/zNome cartella Drive non valido.r*   r+   )r*   r?   r@   r   T)r*   r?   r@   r/   )stripr&   r.   split	enumeraterC   rI   )
r)   r*   r+   normalized_referenceexistingsegmentsegmentsr@   indexexisting_folders
             r
   resolve_or_create_drive_folderrV   h   s`     ,11399#>:;;
&&4%1
 

 O/C/I/I#/NbGRYR_R_RabHb:;; I#H- 
w 2%	!
 
 "y'8UaZ$6)# $% O 'I.%	
 
	%
2 :;;Q
 c

sZ   ADDD D6D4D<D= DDD9D:DDDDc               F  K   | j                  t         dt        |d       dd| iddd	       d {   }|j                  d
k(  ry |j	                          |j                         }t        |d         t        |j                  d      xs	 d|d    d      dS 7 hw)Nr   r   r   r   r   zid, name, webViewLink, parentsr   r   r   r!   r   webViewLink https://drive.google.com/file/d//viewfile_idweb_url)r"   r#   r   r$   r(   r%   r'   )r)   r*   r\   r,   r-   s        r
   _lookup_drive_filer^      s      ZZ 
!wR)@(AB GL>":;6!'
    H s"mmoGwt}%w{{=1l7WX_`dXeWffk5lm s   4B!BA)B!c                 K   | j                  t         ddd| idt        |       d| dddd	d
d
d       d {   }|j                          |j	                         j                  dg       }t        |t              r\|rZ|d   }t        |t              rE|j                  d      r4t        |d         t        |j                  d      xs	 d|d    d      dS y 7 w)Nr2   r   r   ztrashed = false and name = 'z' and 'r1   r3   zcreatedTime descz%files(id, name, webViewLink, parents)r   r4   r   r9   r   r   rX   rY   rZ   r[   )	r"   r#   r   r(   r%   r<   r=   r>   r'   )r)   r*   	folder_idfilenamer,   r9   rB   s          r
   _find_drive_file_by_namerb      s
     ZZ 
!( GL>":;8BC D!{,0 )=!')/
    H  MMO,E%5aeT"uyyuT{+uyy7p=]^cdh^i]jjo;pq  3s   ;C!CB"C!)ra   c                 K   dd| i}| j                  t         d| |ddd       d {   }|j                          |j                         j                  dg       }|ddd	}|rd
j	                  d |D              |d<   | j                  t         d| |||rd|ind        d {   }	|	j                          y 7 7 w)Nr   r   r   rF   r   r   r   zid, parents)
addParentsr   r   ,c              3  f   K   | ])  }t        |      j                         st        |       + y w)N)r'   rM   ).0items     r
   	<genexpr>z'_move_file_to_folder.<locals>.<genexpr>   s"     *^CPTIOOL]3t9*^s   11removeParentsrE   rG   )r"   r#   r(   r%   r;   patch)
r)   r*   r\   r`   ra   r   metadata_responserF   r   r,   s
             r
   _move_file_to_folderrm      s      ', 89G$jj 
!	2!'
 )   &&($$&**9b9G#F
 "%((*^*^"^\\ 
!	2#+fh	 "  H /"s"   +CCA>C,C-CC)existing_file_idc               P  K   t        | ||       d {   }|j                  d      }|}|rt        | ||       d {   }	|	d }|st        | |||       d {   }
|
r|
d   }|rt	        | ||||       d {    | j                  dt        |d	       d
| ddddd|       d {   }|j                          t        | ||       d {   }|t        d      |d   |d   |dS ||gd}dt        j                  |      df||dfd}| j                  ddd
| idddd|       d {   }|j                          |j                         }t        |d         t        |j                  d      xs	 d |d    d!      |dS 7 7 X7 >7  7 7 7 iw)"NrL   zutf-8)r*   r\   )r*   r`   ra   r\   )r*   r\   r`   ra   z1https://www.googleapis.com/upload/drive/v3/files/r   r   r   ztext/plain; charset=UTF-8)r   zContent-Typemediar   )
uploadTyper   )r   r   contentz-File Drive aggiornato ma non piu disponibile.r]   r\   r]   r`   rE   rF   metadataapplication/json; charset=UTF-8ru   file0https://www.googleapis.com/upload/drive/v3/filesr   	multipartid, webViewLink, parentsrq   r   r   r   r   r9   r   rX   rY   rZ   )rV   encoder^   rb   rm   rk   r   r(   r&   r%   dumpsrH   r'   r"   )r)   r*   ra   text_contentr+   rn   r`   	raw_bytestarget_file_idrQ   existing_by_nameupload_responser-   ru   r9   r,   s                   r
   upsert_text_file_to_driver      sK     5!) I
 ##G,I%N+%"
 

 !N!9%	"
 
 -i8N"%"
 	
 	
 !'?n[]@^?_`#*<.!9 ; #*G !- !
 
 	((**%"
 

 ?LMMy)y)"
 	
 !i[9HH!57XY9&ABE [[: GL>":;%0!'

  ! 	 	H mmoGwt}%w{{=1l7WX_`dXeWffk5lm W

	


$	s|   F&F*F&F F&F F&=F>3F&1F 2%F&F"A"F&:F$;AF&F&F&F& F&"F&$F&c               |  K   t        | ||       d {   }||gd}dt        j                  |      df|||fd}| j                  ddd| id	d
dd|       d {   }	|	j	                          |	j                         }
t        |
d         t        |
j                  d      xs	 d|
d    d      |dS 7 7 [w)NrL   rt   ru   rv   rw   ry   r   r   rz   r{   r   r|   r}   r   rX   rY   rZ   rs   )rV   r%   r   rH   r(   r'   r"   )r)   r*   ra   	mime_typer   r+   r`   ru   r9   r,   r-   s              r
   upload_binary_file_to_driver   W  s      5!) I
 !i[9HH!57XY9i0E [[: GL>":;%0!'

  ! 	 	H mmoGwt}%w{{=1l7WX_`dXeWffk5lm -	s#   B<B8A	B<B:AB<:B<)r	   r'   returnr'   )r)   httpx.AsyncClientr*   r'   r+   r'   r   
str | None)r)   r   r*   r'   r?   r'   r@   r   r/   boolr   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   dict[str, str] | None)
r)   r   r*   r'   r`   r'   ra   r'   r   r   )r)   r   r*   r'   r\   r'   r`   r'   ra   r   r   None)r)   r   r*   r'   ra   r'   r   r'   r+   r'   rn   r   r   dict[str, str])r)   r   r*   r'   ra   r'   r   r'   r   bytesr+   r'   r   r   )
__future__r   r%   urllib.parser   httpxr#   r   r.   rC   rI   rV   r^   rb   rm   r   r    r   r
   <module>r      s3   "   = ;  	
 < "$$ $ 	$
 $ $ $N&& & 	&
 & 	&433 3 	3
 	3l  	
 0     	 
    R          	  
       
  T $(XX X 	X
 X X !X Xv## # 	#
 # # # #r   