
    J"jƁ                       U d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZ d dlmZmZ d dlmZ d dl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 m!Z! d dl"m#Z#m$Z$m%Z% dZ&dZ'dZ(i Z)de*d<   i Z+de*d<   dZ,h dZ-d-d.dZ.d/dZ/d0dZ0d1dZ1d2dZ2d3dZ3d4dZ4d5dZ5d6dZ6d7dZ7d8d Z8d9d!Z9d:d"Z:d;d#Z;d<d$Z<d=d%Z=dd&	 	 	 	 	 	 	 	 	 d>d'Z>	 	 	 	 	 	 	 	 	 	 	 	 d?d(Z?d)d*	 	 	 	 	 d@d+Z@dAd,ZAy)B    )annotationsN)datetimetimezone)parsedate_to_datetime)HTTPException)ImageImageOps)get_settings)%find_existing_fiscal_document_by_hashingest_fiscal_document_bytesupload_fiscal_document_to_drive)"ensure_google_workspace_configured&get_active_google_workspace_connection)get_google_workspace_store)normalize_asset_nameresolve_asset_kindresolve_asset_mime_type)FiscalDocumentInboxItemRecordSessionIdentityget_tenant_storez.https://www.googleapis.com/auth/gmail.readonlyz.https://gmail.googleapis.com/gmail/v1/users/me)fatturainvoicebolladdtzd.d.tzdocumento di trasportoznota di creditozdict[str, asyncio.Lock]_MAILBOX_SYNC_LOCKSzdict[str, float]_MAILBOX_RATE_LIMIT_UNTILiX  >   	image/bmp	image/jpg	image/png
image/jpeg
image/tiff
image/webpc                    dt        j                  t        j                        j                   }| xs dj                         j                         }|dk(  r| dS |dk(  r| dS |S )NzDocumenti fiscali  r   z/Fatturedelivery_notez/Bolle)r   nowr   utcyearstriplower)document_typerootnormalized_types      >apps/backend-hub/app/services/fiscal_document_inbox_service.py_drive_fiscal_folder_namer/   6   sl    X\\ : ? ?@AD$*11399;O)#x  /)vK    c                t    | dt        |        dz  z  z   }t        j                  |j                  d            S )N=   utf-8)lenbase64urlsafe_b64decodeencode)valuepaddeds     r.   _decode_gmail_base64r;   @   s5    SSZK!O,,F##FMM'$:;;r0   c                    t        j                  d| xs dj                               D cg c]-  }|j                         rt	        |      n|j                         / c}S c c}w )Nz(\d+)r$   )resplitr)   isdigitintcasefold)r9   parts     r.   _natural_sort_keyrC   E   sS     HHX':':'<= \\^D	8  s   2A c                    | j                  d      xs dj                  dd      d   j                         j                         }| j                  d      dk(  xr |t        v S )Nresolved_mime_typer$   ;   r   resolved_kindimage)getr>   r)   r*   _GROUPABLE_IMAGE_MIME_TYPES)
attachment	mime_types     r.   _is_groupable_image_attachmentrN   L   sY     45;BB3J1MSSU[[]I>>/*g5b)Gb:bbr0   c                    dj                  d | D              }t        j                  |j                  d            j	                         d d }d| S )N
c              3     K   | ]D  }|j                  d       xs d d|j                  d      xs |j                  d      xs d  F yw)attachment_idr$   |attachment_namefilenameN)rJ   ).0rL   s     r.   	<genexpr>z/_grouped_image_attachment_id.<locals>.<genexpr>R   sU       >>/*0b
1:>>BS3T3xXbXfXfgqXr3xvx2yzs   A
Ar4      zgroup:images:)joinhashlibsha1r8   	hexdigest)attachmentsraw_keydigests      r.   _grouped_image_attachment_idr`   Q   sS    ii % G \\'..12<<>sCF6(##r0   c                    t        | xs dd      }t        j                  dd|      j                  d      }|xs d dS )Ndocumento-fiscalefallbackz\.[A-Za-z0-9]{1,8}$r$   z ._-z-multipagina.pdf)r   r=   subr)   )subjectnormalized_subjectstems      r.   _grouped_image_attachment_nameri   Z   sJ    -g.L9LWjk66(".@AGGOD))**:;;r0   c                :   g }	 | D ]  \  }}|st        d|       t        j                  t        j                  |            5 }t        j                  |      j                  d      }|j                  |j                                d d d         |st        d      t        j                         }|d   j                  |dd|dd         |j                         |D ]  }|j                           S # 1 sw Y   xY w# |D ]  }|j                           w xY w)	NzAllegato immagine vuoto: RGBz$Nessuna pagina immagine disponibile.r   PDFTrG   )formatsave_allappend_images)
ValueErrorr   openioBytesIOr	   exif_transposeconvertappendcopysavegetvalueclose)images	pdf_pagesrU   	raw_bytesrI   pageoutputs          r.   _images_to_pdf_bytesr   `   s   #%I#) 	.Hi #<XJ!GHHBJJy12 .e..u5==eD  -. .	. CDD!&YWXWY][  	DJJL	. .  	DJJL	s&   A D AC5AD 5C>	:D Dc                    | j                         j                         xs d}t        j                  |      }|t	        j
                         }|t        |<   |S )N__default__)r)   r*   r   rJ   asyncioLock)key
normalizedlocks      r.   _mailbox_sync_lockr   u   sK    ""$5J"":.D|||~*.J'Kr0   c                    | y| j                   xs dj                         }|dk(  ry|dk(  xrG t        | j                  xs dj                         xs | j                  xs dj                               S )NFr$   unsupportedTimported)sync_statusr)   booldocument_id	file_hash)itemstatuss     r.   _completed_inbox_itemr   ~   so    |$"++-FZlD$*:*:*@b)G)G)I)kdnnNb`bMiMiMk$llr0   c                   i }t        | j                  d      t              r| j                  dg       ng D ]  }t        |t              st	        |j                  d      xs d      j                         j                         }t	        |j                  d      xs d      j                         }|s}|s||vs|||<    |S )Nheadersnamer$   r9   )
isinstancerJ   listdictstrr)   r*   )payloadr   r   r   r9   s        r.   _extract_header_mapr      s     G.8Y9OQU.VIr*\^ "$%488F#)r*00288:DHHW%+,224Ed'1!GDM" Nr0   c                   | j                  d      }|re	 t        |      }|j                   |j                  t        j
                        }|j                  t        j
                        j                         S t        |t              rO|j                         r?t        j                  t!        |      dz  t        j
                        j                         S y # t        t        t        f$ r Y vw xY w)Ndate)tzinfoi  )tz)rJ   r   r   replacer   r'   
astimezone	isoformat	TypeErrorrp   
IndexErrorr   r   r?   r   fromtimestampr@   )
header_mapinternal_dateraw_dateparseds       r.   _parse_received_atr      s    ~~f%H	*84F}}$x||<$$X\\2<<>> -%-*?*?*A%%c-&84&?HLLQ[[]] :z2 		s   A#C C0/C0c                p    t        j                  dd| xs dj                         j                               S )Nz\s+ r$   )r=   re   r)   rA   )r9   s    r.   _normalize_textr      s+    66&#224==?@@r0   c                    | j                  d      d   j                         j                         t        fddD              S )N@r   c              3  &   K   | ]  }|v  
 y wN )rV   keyword
local_parts     r.   rW   z+_mailbox_looks_dedicated.<locals>.<genexpr>   s       	:   )r   fatturdocumentr   r   fornitor)	partitionr)   rA   any)inbound_emailr   s    @r.   _mailbox_looks_dedicatedr      sD    ((-a0668AACJ T  r0   c                    dj                  t        |       t        |      g      t        fdt        D              ry|D ]6  }t        |j	                  d            t        fdt        D              s6 y y)Nr   c              3  &   K   | ]  }|v  
 y wr   r   )rV   r   
searchables     r.   rW   z+_looks_like_fiscal_email.<locals>.<genexpr>   s     
AW7j 
Ar   TrU   c              3  &   K   | ]  }|v  
 y wr   r   )rV   r   	candidates     r.   rW   z+_looks_like_fiscal_email.<locals>.<genexpr>   s     Dw)#Dr   F)rY   r   r   _FISCAL_KEYWORDSrJ   )rf   snippetr]   rL   r   r   s       @@r.   _looks_like_fiscal_emailr      sk    ?73_W5MNOJ

A0@
AA! 
#JNN:$>?	D3CDD r0   c           	     @   	 t        j                  | j                  dd            }g }|D ]Z  }t        |      s|j                  s	 |j                  t        j                  |j                  j                  dd                   \ |r/t        dt        t        |      j                               dz         S t        dt        |j                               dz
        S # t        $ r& t        j                  t
        j                        }Y w xY w# t        $ r Y w xY w)NZz+00:00r   rG   <   )r   fromisoformatr   rp   r&   r   r'   r   received_atrv   maxr@   	timestamp)connection_started_atexisting_itemsconnection_startedcompleted_timestampsr   s        r.   _compute_after_timestampr      s   8%334I4Q4QRUW_4`a ,. $T*	 ''(>(>t?O?O?W?WX[]e?f(gh 1c#23==?@1DEEq#(2245:;;!  8%\\(,,78  		s#   %C >D,DD	DDc                j   g }t        | j                  d      xs d      j                         }t        | j                  d      xs d      j                         xs d}t        | j                  d      xs d      j                         }t        | j                  d      t              r| j                  d      ni }t        |t              r,t        |j                  d      xs d      j                         nd}t        |t              r,t        |j                  d      xs d      j                         nd}|r%|s|r!|j                  |||xs	 d	|xs | |d
       | j                  d      }t        |t              r2|D ]-  }	t        |	t              s|j                  t        |	             / |S )NrU   r$   mimeTypezapplication/octet-streampartIdbodyattachmentIddatazinline:)rU   rM   rR   inline_dataparts)	r   rJ   r)   r   r   rv   r   extend_collect_attachment_parts)
rB   r]   rU   rM   part_idr   rR   r   	raw_partschilds
             r.   r   r      sw   (*K488J'-2.446HDHHZ(F,FGMMOmSmI$((8$*+113G)$((6*:DA488FrDCMdTXCYC06B7==?_aM9CD$9O#dhhv&,"-335UWK]k$&!.!QGG<Ox;P2Q*		
 !I)T" 	EE%&""#<U#CD	E r0   paramsc          
       K   d }t        d      D ]  }| j                  t         | dd| i|       d {   }|}|j                  dk7  r no|j                  j                  dd      j                         }	 t        |      }|d	k(  s{t        j                  t        d
t        |d                   d {     |t        dd      	 |j                          |j%                         }
t'        |
t(              r|
S i S 7 # t        t        f$ r d}Y w xY w7 c# t        j                   $ r-}	|	j"                  j                  dk(  rt        dd      |	 d }	~	ww xY ww)N   AuthorizationzBearer )r   r     zRetry-Afterr$      r   rG        zRisposta Gmail non disponibile.status_codedetailzGmail sta limitando temporaneamente la sincronizzazione della mailbox. Attendi circa 10 minuti e riprova. Se stai usando la stessa casella in piu tenant, conviene separarla per evitare conflitti.)rangerJ   GMAIL_API_BASEr   r   r)   r@   r   rp   r   sleepr   minr   raise_for_statushttpxHTTPStatusErrorresponsejsonr   r   )clientaccess_tokenpathr   last_responseattemptr   retry_after_rawretry_afterexcr   s              r.   _gmail_get_jsonr      s     ,0M8 tf%$~&>? $ 
 

 !3&"**..}bAGGI	o.K a<--As;'; <===!" 4UVV&&(   "G $/77R7A
 :& 	K	 >    
<<##s*@  	
sj   5E DAE :DE ,E 7D8E D %E DE DE E0(EEE c                  K   |rt        |      S t        | |d| d|        d {   }t        |j                  d      xs d      j	                         }|st        dd      t        |      S 7 Jw)	N
/messages/z/attachments/)r   r   r   r$   r   z"Allegato Gmail privo di contenuto.r   )r;   r   r   rJ   r)   r   )r   r   
message_idrR   r   r   r   s          r.   _download_attachment_bytesr     s      #K00#!*]=/B G
 w{{6"(b)//1D4XYY%%s   %A4A2AA4   max_messagesc               x   789:K   t                t               ::j                   j                        }|j                  xs dj                         j                         }|st        dd      t                d {   }|j                  j                         D ch c]#  }|j                         s|j                         % }}t        |vrt        dd      |j                  r8||j                  j                         j                         k7  rt        dd      |j                  xs |xs  j                  j                         j                         8t        8      4 d {    t        j                  8d      }t!        j"                         }||kD  r)t%        dt'        ||z
              }	t        d	d
|	 d      t)        |      }
:j+                   j                  d      }t-        |j.                  |      }d| }g }|D ci c]?  }|j0                  xs dj                         r|j0                  xs dj                         |A c}7d d d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d> :fd9	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d?79 :fd}	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d@9fd}t3               j4                  }d d	 	 	 	 	 	 	 	 	 dA8fd}t7        j8                  |      4 d {   } |||j:                  dt%        dt=        |d            |d       d {   }t?        |j                  d      t@              r|j                  dg       ng }|D ]P  }t?        |tB              stE        |j                  d      xs d      j                         }|sD |||j:                  d | d!d"i       d {   }t?        |j                  d#      tB              r|j                  d#      ni }tG        |      }|j                  d      xs d$}|j                  d%      }tI        ||j                  d&            }tE        |j                  d'      xs d      }tK        |      }|sg } d(}!|D ]M  }"tM        |"d)   d*+      }#tO        |#|"d         }$tQ        |#|$      }%|%d,k7  rd-}!| jS                  i |"|#|$|%d.       O |!sl|
stU        |||       s}tW        | D "cg c]  }"tY        |"      s|" c}"d/ 0      }&t[               }'t]        |&      d1k\  rXt]        |&      t]        |       k(  r@t_        |&      }(ta        |      })d2}*|&D "ch c]  }"|"d   	 }'}":jc                   j                  ||(3      }+:je                   j                  ||)4      },tg        |,      r|,nd }-|-tg        |+      r|+}-|-|jS                  |-       n|+xs |,}.d }/	 g }0|&D ]@  }"ti        ||j:                  ||"d   |"d5   6       d {   }1|0jS                  |"d   |1f       B tk        |0      }2tm        jn                  |2      jq                         }/ ||.||(||||)|*|27	       d {   }|jS                  |       | D ]5  }"|"d   |'v r|"d   }4|"d   }#|"d9   }$|"d:   }%:jc                   j                  ||43      }+:je                   j                  ||#4      },tg        |,      r|,nd }-|-tg        |+      r|+}-|-|jS                  |-       |+xs |,}.|%d,k(  r(d;}5 9|.||4d||||#|$d<d|5=      }|jS                  |       d }6	 ti        ||j:                  ||4|"d5   6       d {   }1tm        jn                  |1      jq                         }6 ||.||4||||#|$|17	       d {   }|jS                  |       8 S d d d       d {    |cd d d       d {    S 7 ]c c}w 7 xc c}w 7 7 7 +c c}"w c c}"w 7 7 # t        $ rO}3|3jr                  d	k(  r#t!        j"                         tt        z   t        8<     ||.||(|/||||)|*|38
      }Y d }3~3d }3~3wtv        $ r}3 ||.||(|/||||)|*|38
      }Y d }3~3d }3~3ww xY w7 #7 # t        $ rO}3|3jr                  d	k(  r#t!        j"                         tt        z   t        8<     ||.||4|6||||#|$|38
      }Y d }3~3:d }3~3wtv        $ r}3 ||.||4|6||||#|$|38
      }Y d }3~3^d }3~3ww xY w7 D# 1 d {  7  sw Y   UxY w7 K# 1 d {  7  sw Y   y xY ww)BNr$   i  z&Configura prima la mailbox del locale.r   zbPermesso Gmail non disponibile. Ricollega Google e concedi l'accesso in sola lettura alla mailbox.zCLa mailbox configurata non coincide con l'account Google collegato.g        rG   r   z;Gmail ha appena limitato questa mailbox. Riprova tra circa z	 secondi.   )limitzin:inbox has:attachment after:)r   error_detailrR   rf   rT   rM   c                   | ;j                  j                  | j                  | j                  |||||||	|
|      S j	                  dt        j                         j                   j                  |||||||||	|
|      S )N)r   rR   r   rf   senderr   rT   rM   r   r   r  finbox_)item_id	tenant_idr   rR   r   rf   r  r   rT   rM   r   r   r  )!update_fiscal_document_inbox_itemr  r   rR   !create_fiscal_document_inbox_itemuuiduuid4hex)
retry_itemr   rR   r   rf   r  r   rT   rM   r   r   r  sessionstores               r.   save_inbox_itemz3sync_fiscal_document_inbox.<locals>.save_inbox_item^  s     %>>%%)44",":":'#! +$3' + +!- ?   ::!$**,"2"2!34!++%+#' /#'') ;  r0   c        	        T  K   t        j                  |      j                         }	j                  |	      xs j	                  j
                  |	      }
|
8| - | |||	||||||
j                  |
j                  xs dd      }n|
}||	<   |S t        |	      }|;t        ||       d {     | |||	|||||d|j                  d      }||	<   |S t        |||      }t        ||       d {     | |||	|||||d|j                  d      }||	<   |S 7 s7 +w)Nr$   r  r   rR   r   rf   r  r   rT   rM   r   r   r  )r   )r}   r   )rU   content_typer}   )rZ   sha256r\   rJ   &get_fiscal_document_inbox_item_by_hashr  r   r   r   r   idr   )r  r   rR   rf   r  r   rT   rM   r}   r   existing_hash_itemr   existing_documentr   known_hash_itemsr  r  r  s                 r.   import_document_payloadz;sync_fiscal_document_inbox.<locals>.import_document_payload  s      y1;;=I!1!5!5i!@ "EDpDp!!E "-)*#-#-&3"+ '%$/(7"+$6$B$B$6$B$B$Hb%'D .D.2 + EgYb c ,5g?P\efff&))"/'#! +$3' * 1 4 4!# /3 +3(&#	H 2'8yYYY"%%+#' /#&$KKD +/Y'KQ g0 Zs%   B-D(0D$1A	D(:D&;*D(&D(c        
        B     
| ||||||||dt        |	      d d       S )Nerrori  )r  r   rR   r   rf   r  r   rT   rM   r   r  )r   )r  r   rR   r   rf   r  r   rT   rM   r   r  s             r.   record_inbox_errorz6sync_fiscal_document_inbox.<locals>.record_inbox_error  s=     #%%+#' /## Xds^ r0   r   c                  K   	 t        | |||       d {   S 7 # t        $ r7}|j                  dk(  r"t        j                         t
        z   t        <    d }~ww xY ww)Nr   r   r   r   )r   r   r   time	monotonic$_MAILBOX_RATE_LIMIT_COOLDOWN_SECONDSr   )r   r   r   r   r   mailbox_keys        r.   gmail_get_jsonz2sync_fiscal_document_inbox.<locals>.gmail_get_json  s[     ,V,UYbhiiii  ??c)=A^^=MPt=t-k:s0   A!  A! 	A2AAA!)timeoutz	/messages2   )
maxResultsqr#  messagesr  r   rm   fullr   zDocumento fornitorifrominternalDater   FrU   rb   rc   otherT)rT   rE   rH   c                d    t        | j                  d      xs | j                  d      xs d      S )NrT   rU   r$   )rC   rJ   )rL   s    r.   <lambda>z,sync_fiscal_document_inbox.<locals>.<lambda>C  s-    +<"'89]Z^^J=W][], r0   )r   r   zapplication/pdf)r   rR   )r   rT   r   )r   r   rR   r   )	r  r   rR   rf   r  r   rT   rM   r}   )
r  r   rR   r   rf   r  r   rT   rM   r   rE   rH   zAFormato allegato non supportato per l'analisi fiscale automatica.r   r  )r  $FiscalDocumentInboxItemRecord | Noner   r   rR   r   r   
str | Nonerf   r   r  r5  r   r5  rT   r   rM   r   r   r   r   r5  r  r5  returnr   )r  r4  r   r   rR   r   rf   r   r  r5  r   r5  rT   r   rM   r   r}   bytesr6  r   )r  r4  r   r   rR   r   r   r5  rf   r   r  r5  r   r5  rT   r   rM   r   r   	Exceptionr6  r   
r   httpx.AsyncClientr   r   r   r   r   zdict[str, object] | Noner6  dict[str, object])<r   r   get_fiscal_document_settingsr  r   r)   r*   r   r   scoper>   GMAIL_READONLY_SCOPEaccount_emailr   r   rJ   r$  r%  r   r@   r    list_fiscal_document_inbox_itemsr   connected_atr   r
   (google_workspace_request_timeout_secondsr   AsyncClientr   r   r   r   r   r   r   r   r   r   r   r   rv   r   sortedrN   setr5   r`   ri   get_fiscal_document_inbox_item9get_fiscal_document_inbox_item_by_message_attachment_namer   r   r   rZ   r  r\   r   r&  r8  );r  r  settingsr   
connectionr   granted_scopescooldown_untilr&   wait_secondsdedicated_mailboxr   after_timestampquerysynced_itemsr  r!  client_timeoutr(  r   r   raw_messagesraw_messager   message_payloadpayload_rootr   rf   r  r   r   attachment_partsnormalized_attachmentshas_supported_attachmentrL   rT   rM   kindimage_attachmentsgrouped_attachment_idsgroup_attachment_idgroup_attachment_namegroup_mime_typeexistingstable_existingcompleted_existingr  
group_hashimage_payloadsr}   	pdf_bytesr   rR   unsupported_errorr   r  r'  r  r  s;   `                                                      @@@@r.   sync_fiscal_document_inboxrf  .  s    
 '(E11'2C2CDH++1r88:@@BM4\]]=gFFJ/9/?/?/E/E/GXt4::<djjlXNX>1w
 	

 MZ5M5M5S5S5U5[5[5]$]X
 	

 ++Q}Q@Q@QXXZ``bK!+. q q266{CHnnCq#ns&:";<LTUaTbbkl 
 5]C??@Q@QY\?]2:3J3JN[00AB<> '
$"++- ^^!r((*D0
$ '+'+-	<-	 -	 	-	
 "-	 -	 -	 $-	 !-	 -	 -	 $-	 %-	 +-	^P	<P	 P	 	P	
 P	 P	 $P	 !P	 P	 P	 +P	 P	d	<	 	 		
 "	 	 	 $	 !	 	 	 +	6 &PP 04	%	 	 		
 -	 	 $$^< n	. n	.*'44 &)!Sr-B&C%P	 G ;EW[[Q[E\^b:c7;;z26ikL+ e.!+t4 !6!<"=CCE
!(6!+!8!8%j\2$f-	) # BLOL_L_`iLjlpAq229=wy0>
$..3L7L#/0_=P=PQ_=`ao11)<BC#<\#J '?A&+0("2 J&::j;Q\o&pO 7T_I` aI-oyIDw370*11(/>2;-1	 0(1I'SZ\r1s$*2HwJLjkuLvZw%! 475&()Q.37H3ISQgMh3h*FGX*Y',J7,S)&7O\m-njj.I-n*-n$CC))#-&9  D  H
 ',&e&e))#-(= 'f 'O
 =RRa<bhl&)16KH6U-5*)5$++,>?%-%@
15
5FHN.? b
2L$*1;1H1H/92<_2M0:=0I3" -"	 !/ 5 5zBS7TV_6` ab )=^(LI)0	)B)L)L)NJ)@+5+5.A(/'-,70E*9*3
* 
$DP %++D1"8 `.J!/26LL $.$?M&01B&CO *+? @I%o6D$CC))#-&3  D  H
 ',&e&e))#-(7 'f 'O
 =RRa<bhl&)16KH6U-5*)5$++,>? !)!<_Jw,o).'1'1*7&($+#)(3,;&/(5(*):  %++D1 ,0I0*D")3)@)@'1*7(2=(A+ %	 %,NN9$=$G$G$I	%<'1'1*7$+#)(3,;&/&/
& 
 P !''-A`.Ke.n	. n	.` cq q q GXq
dn	.#P x .o.-"
$  - "#5IMIY  ]A  JA 9+ F %#5+5+5.A*4(/'-,70E*9$'$D  ) #5+5+5.A*4(/'-,70E*9$'$D~%
  ) ??c1EI^^EUX|E|5kB!1'1'1*7&/$+#)(3,;&/ #  % 1'1'1*7&/$+#)(3,;&/ # Cn	. n	. n	. n	.Cq q q qs  A9d: _ d:!_ 7_ 	B$d:-_%.d:1B"d%A_(B d%7_-8d%;1d,_0-Bd_3
	D#d,_6=_6Ad_;
$A8d*`` A`&`
'`+Cd b
"b#;b
bb
#d:d%d	d%d:d"d: d:(d%0d3d6
d ``	b	Aa	db	%a=	7d=b	db
b

	dAcdd)d;ddd	d%d	dd	d%"d:%d7+d.,d73d:c                 *  K   t               } t               }t               j                         D ]  }| j	                  |      }|| j                  |      }|j                  xs dj                         sGt               j                  |d      }|r|j                  nd xs |j                  xs dj                         j                         }|r||v r|r|j                  |       	 t        |d       d {     y 7 # t        $ r Y w xY ww)Nr$   T)adopt_legacy_if_needed
   r  )r   rE  r   list_connected_tenant_idsbuild_service_sessionr<  r   r)   get_connectionr?  r*   addrf  r8  )tenant_storeseen_mailboxesr  r  rH  rI  r'  s          r.   &sync_all_ready_fiscal_document_inboxesrp    s    #%L"uN/1KKM 	44Y??<<YG&&,"335/1@@cg@h
4>
00DiXMcMcigipprxxz;.8{+	,W2FFF G 		s<   C'D*D:D;D?DD	DDDDr   )r+   r5  r6  r   )r9   r   r6  r7  )r9   r5  r6  zlist[object])rL   dict[str, str]r6  r   )r]   list[dict[str, str]]r6  r   )rf   r5  r6  r   )r{   zlist[tuple[str, bytes]]r6  r7  )r   r   r6  zasyncio.Lock)r   r4  r6  r   )r   r;  r6  rq  )r   rq  r   objectr6  r5  )r9   r5  r6  r   )r   r   r6  r   )rf   r   r   r   r]   rr  r6  r   )r   r   r   #list[FiscalDocumentInboxItemRecord]r6  r@   )rB   r;  r6  rr  r9  )r   r:  r   r   r   r   rR   r   r   r   r6  r7  )r  r   r  r@   r6  rt  )r6  None)B
__future__r   r   r6   r   r   email.utilsr   rZ   rr   r=   r$  r  r   fastapir   PILr   r	   app.core.configr
   $app.services.fiscal_document_servicer   r   r   %app.services.google_workspace_sessionr   r   #app.services.google_workspace_storer   app.services.menu_asset_servicer   r   r   app.services.tenant_storer   r   r   r>  r   r   r   __annotations__r   r&  rK   r/   r;   rC   rN   r`   ri   r   r   r   r   r   r   r   r   r   r   r   r   rf  rp  r   r0   r.   <module>r     s   "   ' -  	 	    !  ( 
 } J m m f f H A  02 , 1.0 + 0'* $ <
c
$<*m	 A	<,@ (,)8)8 )8 	)8
 %)8 )8X&& & 	&
 & & &2 LL L )	L^r0   