+
    €“AjV  ã            	      ó:  a € 0 t $ R t^ RIHt ^ RIHt ^ RIHtHtH	t	 ^ RI
Ht ^ RIHt RtRt]t]RR	R
]R,          RR/]RRR
]R,          RR//tR]R&   R R ltR R ltR R ltR R ltR R ltR R ltR R  ltR! R" lt ! R# R$]4      tR% R& ltR' R( ltR)# )*uÊ   Profils SQLite : deux fichiers fixes, choisis Ã  la connexion.

Le choix est stockÃ© en session (`db_profile`). ProfileRoutingSession
dirige les requÃªtes ORM vers le bon fichier pour toute la session.
)Úannotations)ÚPath)ÚFlaskÚhas_request_contextÚsession)ÚSession)ÚDATA_DIRÚprodÚimportÚlabelÚ
ProductionÚpathzcopropriete.dbÚbadge_classzdb-badge-prodzImport (test)zimport-test.dbzdb-badge-importz dict[str, dict[str, str | Path]]ÚDATABASE_PROFILESc               ó   € V ^8„  d   QhRR/# )é   Úreturnzdict[str, str]© )Úformats   "Ú<R:\var\www\stessy.org\copro_gestion\app\database_profiles.pyÚ__annotate__r   !   s   € ÷ @ñ @˜.ñ @ó    c                 óJ   € \          U u/ uF  q \        V 4      bK  	  up # u up i ©N)r   Úprofile_uri©Úkeys    r   Úsqlalchemy_bindsr   !   s$   € Ý->Ó?Ñ-> c”˜SÓ!Ò!Ñ->Ñ?Ð?ùÒ?s   ‰ c               ó    € V ^8„  d   QhRRRR/# ©r   r   Ústrr   r   )r   s   "r   r   r   %   s   € ÷ ñ �Sð ˜Sñ r   c                ó„   € V \         9  d   \        p \        \         V ,          R ,          4      P                  4       pRV 2# )r   z
sqlite:///)r   ÚDEFAULT_PROFILEr   Úresolve)r   r   s   & r   r   r   %   s;   € Ø
Ô#Ô#ÜˆÜÔ! #Õ& vÕ.Ó/×7Ñ7Ó9€DØ˜�vÐÐr   c               ó    € V ^8„  d   QhRRRR/# r   r   )r   s   "r   r   r   ,   s   € ÷ Xñ X�sð X˜sñ Xr   c                ól   € \        \        P                  V \        \        ,          4      R ,          4      # )r   ©r    r   Úgetr"   r   s   &r   Úprofile_labelr(   ,   s&   € ÜÔ ×$Ñ$ SÔ*;¼OÕ*LÓMÈgÕVÓWÐWr   c               ó    € V ^8„  d   QhRRRR/# r   r   )r   s   "r   r   r   0   s   € ÷ ñ ˜Sð  Sñ r   c                ól   € \        \        P                  V \        \        ,          4      R ,          4      # )r   r&   r   s   &r   Úprofile_badge_classr+   0   s*   € ÜÜ×Ñ˜cÔ#4´_Õ#EÓFÀ}ÕUóð r   c               ó    € V ^8„  d   QhRRRR/# )r   r   r    r   r   r   )r   s   "r   r   r   6   s   € ÷ 0ñ 0�cð 0˜dñ 0r   c                ó<   € \        \        V ,          R ,          4      # )r   )r   r   r   s   &r   Úprofile_pathr.   6   s   € ÜÔ! #Õ& vÕ.Ó/Ð/r   c               ó   € V ^8„  d   QhRR/# )r   r   r    r   )r   s   "r   r   r   :   s   € ÷ ñ ˜Sñ r   c                 óŠ   € \        4       '       g   \        # \        P                  ! R \        4      p V \        9  d   \        # V # )Ú
db_profile)r   r"   r   r'   r   r   s    r   Úsession_profile_keyr2   :   s5   € Ü× Ò ÜÐÜ
�+Š+�l¤OÓ
4€CØ
Ô#Ô#ÜÐØ€Jr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r    r   ÚNoner   )r   s   "r   r   r   C   s   € ÷ ñ ˜Sð  Tñ r   c                ó|   € V \         9  d   \        p V \        R &   \        P                  ! RR4       \	        4        R# )r1   Úcopropriete_idN)r   r"   r   ÚpopÚclear_db_sessionr   s   &r   Úset_session_profiler9   C   s/   € Ø
Ô#Ô#ÜˆØ„GˆLÑÜ‡K‚KÐ  $Ô'ÜÖr   c               ó   € V ^8„  d   QhRR/# )r   r   r4   r   )r   s   "r   r   r   K   s   € ÷ ñ ˜$ñ r   c                 ól   €  ^ RI Hp  V P                  P                  4        R#   \         d     R# i ; i)uR   Ã‰vite les objets ORM attachÃ©s Ã  l'ancienne base aprÃ¨s un changement de profil.©ÚdbN)Ú
app.modelsr=   r   ÚremoveÚ	Exceptionr<   s    r   r8   r8   K   s,   € ðÝ!à
�
‰
×ÑÖøÜô Úðús   ‚ $ ¤3²3c                  ó0   a € ] tR t^UtRtRV 3R lltRtV ;t# )ÚProfileRoutingSessionuC   Route les requÃªtes ORM vers prod ou import selon la session Flask.c           	     	ó¬   <€ \        4       '       d/   \        4       pV P                  P                  pWV9   d	   We,          # \        SV `  ! RR VRVRV/VB # )ÚmapperÚclauseÚbindr   )r   r2   Ú_dbÚenginesÚsuperÚget_bind)ÚselfrD   rE   rF   Úkwargsr   rH   Ú	__class__s   &&&&,  €r   rJ   ÚProfileRoutingSession.get_bindX   sR   ø€ Ü× Ò Ü%Ó'ˆCØ—h‘h×&Ñ&ˆGØŒ~Ø•|Ð#Ü‰wÒÑR vÐR°fÐRÀ4ÐRÈ6ÑRÐRr   r   )NNN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rJ   Ú__static_attributes__Ú__classcell__)rM   s   @r   rB   rB   U   s   ø† ÙM÷Sõ Sr   rB   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úappr   r   r    r   r   )r   s   "r   r   r   a   s!   € ÷ ñ ˜%ð ¨#ð °#ñ r   c                ó8   € \        V4      pW P                  R&   V# )zQEnregistre le profil en session (le moteur est choisi par ProfileRoutingSession).Ú_ACTIVE_DB_PROFILE)r   Úconfig)rW   r=   r   Úuris   &&& r   Úactivate_profiler\   a   s   € ä
�cÓ
€CØ'*‡J�JÐ#Ñ$Ø€Jr   c               ó    € V ^8„  d   QhRRRR/# )r   rW   r   r   r4   r   )r   s   "r   r   r   h   s   € ÷ 9ñ 9 ð 9¨tñ 9r   c                ó6   a a€ S P                   V V3R  l4       pR# )c                 ó2   <€ \        S S\        4       4       R # r   )r\   r2   )rW   r=   s   €€r   Ú_remember_database_profileÚ;register_database_hooks.<locals>._remember_database_profilei   s   ø€ ä˜˜bÔ"5Ó"7Ö8r   N)Úbefore_request)rW   r=   r`   s   ff r   Úregister_database_hooksrc   h   s   ù€ Ø×Ñõ9ó ò9r   N)Ú__conditional_annotations__rS   Ú
__future__r   Úpathlibr   Úflaskr   r   r   Úflask_sqlalchemy.sessionr   Ú
FSQSessionrZ   r   ÚPROFILE_PRODÚPROFILE_IMPORTr"   r   Ú__annotations__r   r   r(   r+   r.   r2   r9   r8   rB   r\   rc   )rd   s   @r   Ú<module>rm      s¿   øðôõ
 #å ç 5Ñ 5Ý :å à€Ø€Ø€ð Ø�Ø�Ð+Õ+Ø�ðð
 Ø�Ø�Ð+Õ+ØÐ(ðð7Ð Ð3ó õ@õõXõõ0õõõô	S˜Jô 	Sõ÷9r   