§
    €“AjV  ã                  óú   — U d 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ZdZeZed	ed
z  ddœededz  ddœiZded<   d'd„Zd(d„Zd(d„Zd(d„Zd)d„Zd*d„Zd+d„Zd,d„Z G d „ d!e¦  «        Zd-d$„Zd.d%„Zd&S )/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Ú
Productionzcopropriete.dbzdb-badge-prod)ÚlabelÚpathÚbadge_classzImport (test)zimport-test.dbzdb-badge-importz dict[str, dict[str, str | Path]]ÚDATABASE_PROFILESÚreturnúdict[str, str]c                 ó$   — d„ t           D ¦   «         S )Nc                ó.   — i | ]}|t          |¦  «        “ŒS © )Úprofile_uri)Ú.0Úkeys     ú:/var/www/stessy.org/copro_gestion/app/database_profiles.pyú
<dictcomp>z$sqlalchemy_binds.<locals>.<dictcomp>"   s"   € Ð?Ð?Ð? cˆC•˜SÑ!Ô!Ð?Ð?Ð?ó    )r   r   r   r   Úsqlalchemy_bindsr   !   s   € Ø?Ð?Õ->Ð?Ñ?Ô?Ð?r   r   Ústrc                ó�   — | t           vrt          } t          t           |          d         ¦  «                             ¦   «         }d|› �S )Nr   z
sqlite:///)r   ÚDEFAULT_PROFILEr   Úresolve)r   r   s     r   r   r   %   sE   € Ø
Õ#Ð#Ð#ÝˆÝÕ! #Ô& vÔ.Ñ/Ô/×7Ò7Ñ9Ô9€DØ˜ÐÐÐr   c                ó~   — t          t                               | t          t                   ¦  «        d         ¦  «        S )Nr   ©r   r   Úgetr   ©r   s    r   Úprofile_labelr%   ,   s,   € ÝÕ ×$Ò$ SÕ*;½OÔ*LÑMÔMÈgÔVÑWÔWÐWr   c                ó~   — t          t                               | t          t                   ¦  «        d         ¦  «        S )Nr   r"   r$   s    r   Úprofile_badge_classr'   0   s2   € ÝÝ×Ò˜cÕ#4µ_Ô#EÑFÔFÀ}ÔUñô ð r   r   c                óB   — t          t          |          d         ¦  «        S )Nr   )r   r   r$   s    r   Úprofile_pathr)   6   s   € ÝÕ! #Ô& vÔ.Ñ/Ô/Ð/r   c                 ó„   — t          ¦   «         st          S t          j        dt          ¦  «        } | t          vrt          S | S )NÚ
db_profile)r   r   r   r#   r   r$   s    r   Úsession_profile_keyr,   :   s>   € ÝÑ Ô ð ÝÐÝ
Œ+�l¥OÑ
4Ô
4€CØ
Õ#Ð#Ð#ÝÐØ€Jr   ÚNonec                ó€   — | t           vrt          } | t          d<   t          j        dd ¦  «         t	          ¦   «          d S )Nr+   Úcopropriete_id)r   r   r   ÚpopÚclear_db_sessionr$   s    r   Úset_session_profiler2   C   sB   € Ø
Õ#Ð#Ð#ÝˆØ…GˆLÑÝ„KÐ  $Ñ'Ô'Ð'ÝÑÔÐÐÐr   c                 óh   — 	 ddl m}  | j                             ¦   «          dS # t          $ r Y dS w xY w)uR   Ã‰vite les objets ORM attachÃ©s Ã  l'ancienne base aprÃ¨s un changement de profil.r   ©ÚdbN)Ú
app.modelsr5   r   ÚremoveÚ	Exceptionr4   s    r   r1   r1   K   sU   € ðØ!Ð!Ð!Ð!Ð!Ð!à
Œ
×ÒÑÔÐÐÐøÝð ð ð Øˆˆðøøøs   ‚# £
1°1c                  ó$   ‡ — e Zd ZdZdˆ fd„	Zˆ xZS )ÚProfileRoutingSessionuC   Route les requÃªtes ORM vers prod ou import selon la session Flask.Nc                ó¦   •— t          ¦   «         r&t          ¦   «         }| j        j        }||v r||         S  t	          ¦   «         j        d|||dœ|¤ŽS )N)ÚmapperÚclauseÚbindr   )r   r,   Ú_dbÚenginesÚsuperÚget_bind)Úselfr<   r=   r>   Úkwargsr   r@   Ú	__class__s          €r   rB   zProfileRoutingSession.get_bindX   s_   ø€ ÝÑ Ô ð 	$Ý%Ñ'Ô'ˆCØ”hÔ&ˆGØ�gˆ~ˆ~Ø˜s”|Ð#Ø�u‰wŒwÔÐR v°fÀ4ÐRÐRÈ6ÐRÐRÐRr   )NNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   Ú__classcell__)rE   s   @r   r:   r:   U   sM   ø€ € € € € ØMÐMðSð Sð Sð Sð Sð Sð Sð Sð Sð Sr   r:   Úappr   c                ó8   — t          |¦  «        }|| j        d<   |S )zQEnregistre le profil en session (le moteur est choisi par ProfileRoutingSession).Ú_ACTIVE_DB_PROFILE)r   Úconfig)rK   r5   r   Úuris       r   Úactivate_profilerP   a   s!   € å
�cÑ
Ô
€CØ'*€C„JÐ#Ñ$Ø€Jr   c                ó0   ‡ ‡— ‰ j         ˆ ˆfd„¦   «         }d S )Nc                 óB   •— t          ‰ ‰t          ¦   «         ¦  «         d S )N)rP   r,   )rK   r5   s   €€r   Ú_remember_database_profilez;register_database_hooks.<locals>._remember_database_profilei   s"   ø€ å˜˜bÕ"5Ñ"7Ô"7Ñ8Ô8Ð8Ð8Ð8r   )Úbefore_request)rK   r5   rS   s   `` r   Úregister_database_hooksrU   h   s:   øø€ ØÔð9ð 9ð 9ð 9ð 9ñ Ôð9ð 9ð 9r   N)r   r   )r   r   r   r   )r   r   r   r   )r   r   )r   r   r   r-   )r   r-   )rK   r   r   r   r   r   )rK   r   r   r-   )rI   Ú
__future__r   Úpathlibr   Úflaskr   r   r   Úflask_sqlalchemy.sessionr   Ú
FSQSessionrN   r	   ÚPROFILE_PRODÚPROFILE_IMPORTr   r   Ú__annotations__r   r   r%   r'   r)   r,   r2   r1   r:   rP   rU   r   r   r   ú<module>r^      sï  ððð ð ð
 #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø :Ð :Ð :Ð :Ð :Ð :à Ð Ð Ð Ð Ð à€Ø€Ø€ð ØØÐ+Ñ+Ø&ðð ð
 Ø ØÐ+Ñ+Ø(ðð ð7Ð ð ð ð ñ ð@ð @ð @ð @ðð ð ð ðXð Xð Xð Xðð ð ð ð0ð 0ð 0ð 0ðð ð ð ðð ð ð ðð ð ð ð	Sð 	Sð 	Sð 	Sð 	S˜Jñ 	Sô 	Sð 	Sðð ð ð ð9ð 9ð 9ð 9ð 9ð 9r   