§
    µYÄj  ã                  óÎ   — d Z ddlmZ ddlZddlZddlm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  ej        e¦  «        Ze G d
„ d¦  «        ¦   «         Z G d„ d¦  «        ZdS )zMOne event-loop-owned, in-memory approval registry shared by every adapter/UI.é    )ÚannotationsN)ÚOrderedDict)Ú	dataclass)ÚdatetimeÚtimezone)Úuuid4é   )ÚApprovalÚControlErrorc                  ó$   — e Zd ZU ded<   ded<   dS )ÚPendingr
   Úapprovalzasyncio.FutureÚfutureN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úf/home/lighthouse/esp32-dev/.cache/watch-codex-quota-startup/server/device_gateway/control/approvals.pyr   r      s*   € € € € € € àÐÐÑØÐÐÑÐÐr   r   c                  óx   — e Zd Zdd„Zd„ Zddœd„Zd„ Zdd„Zd„ Zd	„ Z	dd
œd„Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚApprovalRegistryNc                óV   — d| _         || _        t          ¦   «         | _        i | _        d S )NÚwait)Útimeout_policyÚ	on_changer   ÚentriesÚpresentations)ÚselfÚtimeoutr   s      r   Ú__init__zApprovalRegistry.__init__   s,   € à$ˆÔØ"ˆŒÝ2=±-´-ˆŒð .0ˆÔÐÐr   c                ó@   — | j         r|                       ¦   «          d S d S ©N)r   ©r   s    r   ÚchangedzApprovalRegistry.changed    s,   € ØŒ>ð 	Ø�NŠNÑÔÐÐÐð	ð 	r   )Úchoicesc       	        ó
  ‡‡— t          |                      ¦   «         ¦  «        dk    rt          dd¦  «        ‚t          ˆˆfd„| j                             ¦   «         D ¦   «         ¦  «        rt          dd¦  «        ‚t          j        ¦   «         }
t          j	        t          j        ¦  «        }t          t          ¦   «         j        |||||d d…         |d d…         ‰‰|d |	pd	d
g¬¦  «        }t          ||
                     ¦   «         ¦  «        | j        |j        <   t%          | j        ¦  «        D ]?}t          | j        ¦  «        dk    r n$| j        |         j        j        dk    r| j        |= Œ@|                      ¦   «          |S )Né€   ztoo many pending approvalsi­  c              3  óX   •K  — | ]$}|j         j        ‰k    o|j         j        ‰k    V — Œ%d S r#   )r   ÚownerÚrequest_identity)Ú.0Úer*   r+   s     €€r   ú	<genexpr>z*ApprovalRegistry.create.<locals>.<genexpr>'   sQ   øè è € ð /ð /Øð ŒzÔ 5Ò(Ð\¨Q¬ZÔ-HÐL\Ò-\ð /ð /ð /ð /ð /ð /r   z#duplicate approval request identityi™  é    i   ÚapproveÚreject)Úapproval_idÚagentÚ
session_idÚ
project_idÚkindÚtitleÚdetailr*   r+   Ú
created_atÚ
expires_atr&   i€  ÚPENDING)ÚlenÚlist_pendingr   Úanyr   ÚvaluesÚasyncioÚget_running_loopr   Únowr   Úutcr
   r   Úhexr   Úcreate_futurer2   Úlistr   Ústater%   )r   r3   r4   r5   r6   r7   r8   r*   r+   r&   ÚlooprB   r   Úkeys          ``     r   ÚcreatezApprovalRegistry.create$   s“  øø€ Ýˆt× Ò Ñ"Ô"Ñ#Ô# sÒ*Ð*ÝÐ;¸SÑAÔAÐAÝð /ð /ð /ð /ð /Øœ×+Ò+Ñ-Ô-ð/ñ /ô /ñ /ô /ð 	KåÐDÀcÑJÔJÐJÝÔ'Ñ)Ô)ˆÝŒl�8œ<Ñ(Ô(ˆÝ­©¬¬¸5ÈZØ!¨°E¸$¸3¸$´KÈÈuÐPTÈuÌØÐ*:ÀsØ WÐ%E°¸HÐ0EðGñ Gô Gˆõ .5°X¸t×?QÒ?QÑ?SÔ?SÑ-TÔ-TˆŒ�XÔ)Ñ*å˜œÑ%Ô%ð 	&ð 	&ˆCÝ�4”<Ñ Ô  CÒ'Ð'Ø�ØŒ|˜CÔ Ô)Ô/°9Ò<Ð<Ø”L Ð%øØ�Š‰ŒˆØˆr   c                óz   — t          |t          ¦  «        r| j                             |¦  «        nd }|r|j        nd S r#   )Ú
isinstanceÚstrr   Úgetr   ©r   r2   Úentrys      r   rN   zApprovalRegistry.get:   s=   € Ý1;¸KÍÑ1MÔ1MÐW�”× Ò  Ñ-Ô-Ð-ÐSWˆØ!&Ð0ˆuŒ~ˆ~¨DÐ0r   c                óR   ‡‡— ˆˆfd„| j                              ¦   «         D ¦   «         S )Nc                ó†   •— g | ]=}|j         j        d k    r+‰�|j         j        ‰k    r‰�|j         j        ‰k    ¯6|j         ‘Œ>S )r;   )r   rG   r3   r4   )r,   r-   r3   r4   s     €€r   ú
<listcomp>z1ApprovalRegistry.list_pending.<locals>.<listcomp>?   s`   ø€ ð Qð Qð Q˜q¸Q¼ZÔ=MÐQZÒ=ZÐ=ZØ�] a¤jÔ&6¸%Ò&?Ð&?ØÐ'¨1¬:Ô+@ÀJÒ+NÐ+Nð ”
à+NÐ+NÐ+Nr   )r   r?   )r   r3   r4   s    ``r   r=   zApprovalRegistry.list_pending>   sJ   øø€ ðQð Qð Qð Qð Q D¤L×$7Ò$7Ñ$9Ô$9ð Qñ Qô Qð 	Qr   c                óÐ   — |j         j        dk    rdS ||j         _        |j                             ¦   «         s|j                             |¦  «         |                      ¦   «          dS )Nr;   FT)r   rG   r   ÚdoneÚ
set_resultr%   )r   rP   rG   s      r   ÚfinishzApprovalRegistry.finishC   s_   € ØŒ>Ô 9Ò,Ð,Ø�5Ø$ˆŒÔØŒ|× Ò Ñ"Ô"ð 	+ØŒL×#Ò# EÑ*Ô*Ð*Ø�Š‰ŒˆØˆtr   c                ó   — dS )z<Compatibility seam: 0.4.0 only supports timeout_policy=wait.Nr   r$   s    r   ÚexpirezApprovalRegistry.expireL   s   € àˆr   )Údevice_connectionc               ón  — |                       |¦  «        }|r|dv r|dk    rdnd}||j        v r|}|�4||j        vs+|j        dk    s |�:| j                              |¦  «        |k    rt                               d¦  «         dS ||_        |                      | j        |         |dv rd	n|d
v rdnd¦  «        S )N)r0   r1   r0   ÚacceptÚdecliner;   z8ignored invalid, stale or unauthorized approval responseF)r0   r\   ÚacceptForSessionÚAPPROVED)r1   r]   ÚREJECTEDÚ	CANCELLED)	rN   r&   rG   r   ÚloggerÚwarningÚdecisionrW   r   )r   r2   rd   rZ   r   Únatives         r   ÚresolvezApprovalRegistry.resolveP   s  € Ø—8’8˜KÑ(Ô(ˆØð 	:˜Ð$8Ð8Ð8Ø'¨Ò2Ð2�8�8¸	ˆFØ˜Ô)Ð)Ð)°6¨(ØÐ °Ô0@Ð @Ð @ÀHÄNÐV_ÒD_ÐD_Ø%Ð1°dÔ6H×6LÒ6LÐM^Ñ6_Ô6_ÐcnÒ6nÐ6nÝ�NŠNÐUÑVÔVÐVØ�5Ø"ˆÔØ�{Š{˜4œ<¨Ô4ÀHÐPwÐDwÐDw°j°jð  LTð  Xlð  Llð  Llð  ~Hð  ~Hð  r}ñ  ~ô  ~ð  	~r   c                ó€   — | j                              |¦  «        }t          |o|                      |d¦  «        ¦  «        S ©Nra   )r   rN   ÚboolrW   rO   s      r   ÚcancelzApprovalRegistry.cancel\   s8   € Ø”× Ò  Ñ-Ô-ˆÝ�EÐ=˜dŸkšk¨%°Ñ=Ô=Ñ>Ô>Ð>r   c                ó¤   — t          | j                             ¦   «         ¦  «        D ](}|j        j        |k    r|                      |d¦  «         Œ)d S rh   )rF   r   r?   r   r*   rW   )r   r*   rP   s      r   Úcancel_ownerzApprovalRegistry.cancel_owner`   sV   € Ý˜$œ,×-Ò-Ñ/Ô/Ñ0Ô0ð 	0ð 	0ˆEØŒ~Ô# uÒ,Ð,Ø—’˜E ;Ñ/Ô/Ð/øð	0ð 	0r   c                ól   — |                       ||¦  «        D ]}|                      |j        ¦  «         Œd S r#   )r=   rj   r2   )r   r3   r4   r   s       r   Úcancel_sessionzApprovalRegistry.cancel_sessione   sC   € Ø×)Ò)¨%°Ñ<Ô<ð 	.ð 	.ˆHØ�KŠK˜Ô,Ñ-Ô-Ð-Ð-ð	.ð 	.r   c              ƒ  ód   K  — t          j        | j        |j                 j        ¦  «        ƒ d {V —†S r#   )r@   Úshieldr   r2   r   ©r   r   s     r   r   zApprovalRegistry.waiti   s5   è è € Ý”^ D¤L°Ô1EÔ$FÔ$MÑNÔNÐNÐNÐNÐNÐNÐNÐNr   c                ó>   — ddi|                      d¬¦  «        ¥dd i¥S )NÚtypeÚapproval_requestÚjson)ÚmodeÚ
expires_in)Ú
model_dumprq   s     r   ÚwirezApprovalRegistry.wirel   s0   € ØÐ*Ðc¨h×.AÒ.AÀvÐ.AÑ.NÔ.NÐcÐP\Ð^bÐcÐcÐcr   c                óž   — |                       |j        |j        ¦  «        }|r*d|_        |d         j        dz   |d         j        z   |_        |S )NÚWAITING_APPROVALr   z: )r=   r3   r4   rG   r7   r8   Úwaiting_reason)r   ÚsessionÚpendings      r   ÚoverlayzApprovalRegistry.overlayo   sQ   € Ø×#Ò# G¤M°7Ô3EÑFÔFˆØð 	QØ.ˆGŒMØ%,¨Q¤ZÔ%5¸Ñ%<¸wÀq¼zÔ?PÑ%PˆGÔ"Øˆr   c                ó¶   — t          | j                             ¦   «         ¦  «        D ]}|                      |d¦  «         Œ| j                             ¦   «          d S rh   )rF   r   r?   rW   r   Úclear)r   rP   s     r   ÚclosezApprovalRegistry.closev   sY   € Ý˜$œ,×-Ò-Ñ/Ô/Ñ0Ô0ð 	,ð 	,ˆEØ�KŠK˜˜{Ñ+Ô+Ð+Ð+ØÔ× Ò Ñ"Ô"Ð"Ð"Ð"r   )NN)r   r   r   r!   r%   rJ   rN   r=   rW   rY   rf   rj   rl   rn   r   ry   r   r‚   r   r   r   r   r      s0  € € € € € ð0ð 0ð 0ð 0ðð ð ð nrð ð ð ð ð ð,1ð 1ð 1ðQð Qð Qð Qð
ð ð ðð ð ð CGð 
~ð 
~ð 
~ð 
~ð 
~ð?ð ?ð ?ð0ð 0ð 0ð
.ð .ð .ðOð Oð Oðdð dð dðð ð ð#ð #ð #ð #ð #r   r   )Ú__doc__Ú
__future__r   r@   ÚloggingÚcollectionsr   Údataclassesr   r   r   Úuuidr   Úmodelsr
   r   Ú	getLoggerr   rb   r   r   r   r   r   ú<module>r‹      s  ðØ SÐ SØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø !Ð !Ð !Ð !Ð !Ð !Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð à *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à	ˆÔ	˜8Ñ	$Ô	$€ð ðð ð ð ð ñ ô ñ „ðð
c#ð c#ð c#ð c#ð c#ñ c#ô c#ð c#ð c#ð c#r   