ó
    xÿËj”  ã                   ó8  • S r SSKrSSKrSSKrSSKrSSKrSSKJrJr  SSK	J
r
  \R                  " S5      r\R                  " 5        S\R                  " 5       R                  SS  3rSrS	rS
\S\4S jrS
\SS4S jrS
\S\4S jrS
\S\/ \S   4   SS4S jrg)uF  
Ã‰lection d'un worker Â« leader Â» pour les tÃ¢ches de fond.

Avec plusieurs workers uvicorn, chacun exÃ©cuterait le nettoyage RGPD, le backup
et l'organizer en double. Un verrou en base (bail de 60 s renouvelÃ© toutes les
20 s) garantit qu'un seul worker les exÃ©cute ; si le leader tombe, un autre
reprend automatiquement.
é    N)Ú	AwaitableÚCallable)Úget_dbzmeeconic.leaderÚ-é   g      N@g      4@ÚnameÚreturnc           	      ób  • [         R                   " 5       n[        5        nUR                  SU [        U[        -   45      R
                  nU(       a
   S S S 5        gUR                  S[        U[        -   U [        U45      R
                  n[        U5      sS S S 5        $ ! , (       d  f       g = f)NzHINSERT IGNORE INTO leader_locks (name, owner, expires_at) VALUES (?,?,?)TzXUPDATE leader_locks SET owner=?, expires_at=? WHERE name=? AND (owner=? OR expires_at<?))Útimer   ÚexecuteÚ_OWNERÚ_LEASEÚrowcountÚbool)r   ÚnowÚconnÚcreatedÚtakens        ÚND:\Ingenieria\TRABAJOS ONLINE\Projects\11- Photo School\backend\core\leader.pyÚ_try_acquirer      sŒ   € Ü
�)Š)‹+€Cô 
Œ�TØ—,‘,ØVØ”6˜3¤™<Ð(ó*ç*2©(ð 	ö Ø÷ 
ˆð —‘ØfÜ�Sœ6‘\ 4¬°Ð5ó7ç7?±xð 	ô �E‹{÷ 
��ús    3B Á:B Â 
B.c                 ó¾   •  [        5        nUR                  SU [        45        UR                  5         S S S 5        g ! , (       d  f       g = f! [         a     g f = f)Nz1DELETE FROM leader_locks WHERE name=? AND owner=?)r   r   r   ÚcommitÚ	Exception)r   r   s     r   Ú_releaser   )   sH   € ðÜŒX˜Ø�L‰LÐLÈtÔU[ÈnÔ]Ø�K‰KŒM÷ �XŽXûô ó Ùðús+   ‚
A Œ)>µA ¾
AÁA ÁA Á
AÁAc                 ó.  •  [        5        nUR                  SU 45      R                  5       nS S S 5        [        W=(       a.    US   [        :H  =(       a    US   [
        R
                  " 5       :„  5      $ ! , (       d  f       NN= f! [         a     gf = f)Nz7SELECT owner, expires_at FROM leader_locks WHERE name=?ÚownerÚ
expires_atF)r   r   Úfetchoner   r   r   r   )r   r   Úrows      r   Ú	is_leaderr    2   sz   € ðÜŒX˜Ø—,‘,ÐXÐ[_ÐZaÓb×kÑkÓmˆC÷ ä�C×V˜C ™L¬FÑ2×V°s¸<Ñ7HÌ4Ï9Ê9Ë;Ñ7VÓWÐW÷ �Xûô ó Ùðús(   ‚
B Œ"A6®AB Á6
BÂ B Â
BÂBÚfactoryc              ƒ   ó  #   • Sn   [         R                  " [        U 5      I Sh  v•N nU(       a²  Ub  UR                  5       (       aš  Ubc  UR                  5       (       aN  UR                  5       (       d9  UR                  5       (       a$  [        R                  SXR                  5       5        [         R                  " U" 5       SU  3S9n[        R                  SU 5        OEU(       d>  Ub;  UR                  5       (       d&  UR                  5         [        R                  S	U 5        [         R                  " [        5      I Sh  v•N   GMG   GN(! [         a#  n[        R                  SX5        Sn SnAGNNSnAff = f N:! [         R                   al    UbC  UR                  5       (       d.  UR                  5         [         R                   " USS
9I Sh  v•N    [         R                  " ["        U 5      I Sh  v•N    e f = f7f)uB   ExÃ©cute `factory()` tant que ce worker dÃ©tient le verrou `name`.NTzElection '%s' failed: %sFu.   Task %s stopped by an error: %s â€” restartingzbg-)r   u    Ce worker est leader de Â« %s Â»u   Lock '%s' lost â€” task stopped)Úreturn_exceptions)ÚasyncioÚ	to_threadr   r   ÚlogÚerrorÚdoneÚ	cancelledÚ	exceptionÚcreate_taskÚinfoÚcancelÚwarningÚsleepÚ_RENEWÚCancelledErrorÚgatherr   )r   r!   ÚtaskÚheldÚes        r   Úrun_as_leaderr6   ;   ss  é € à $€DðØðÜ$×.Ò.¬|¸TÓB×B�ö ˜™¨¯©¯©ØÑ#¨¯	©	¯©¸D¿N¹N×<LÑ<LÐQU×Q_ÑQ_×QaÑQaÜ—I‘IÐNÐPT×VdÑVdÓVfÔgÜ×*Ò*©7«9¸SÀÀ¸<ÑH�Ü—‘Ð;¸TÕBÞ˜dÑ.°t·y±y·{±{Ø—‘”Ü—‘Ð=¸tÔDÜ—-’-¤Ó'×'Ð'ò âBøÜó Ü—	‘	Ð4°dÔ>Ø–ûðúñ (øÜ×!Ñ!ó ØÑ D§I¡I§K¡KØ�K‰KŒMÜ—.’. ¸Ñ>×>Ñ>Ü×Ò¤¨$Ó/×/Ñ/Øðüst   ‚H†F ˆE ¦E§E «DF ÅFÅF ÅE Å
E>ÅE9Å3F Å9E>Å>F ÆAHÇGÇ#HÇ;G>Ç<HÈH)Ú__doc__r$   ÚloggingÚosr   ÚuuidÚtypingr   r   Úcore.dbr   Ú	getLoggerr&   ÚgetpidÚuuid4Úhexr   r   r0   Ústrr   r   r   r    r6   © ó    r   Ú<module>rD      sÇ   ðñó Û Û 	Û Û ß &å à×ÒÐ)Ó*€à�IŠI‹Kˆ=˜˜$Ÿ*š*›,×*Ñ*¨2¨AÐ.Ð/Ð	0€Ø	€Ø	€ð�sð ˜tô ð �3ð ˜4ô ð�Cð ˜Dô ð˜cð ¨H°R¸À4¹Ð5HÑ,Ið Èdõ rC   