§
    Þ`Â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__© ó    ú`/home/lighthouse/esp32-dev/.cache/wearable-shell-0.6a/server/device_gateway/control/approvals.pyr   r      s*   € € € € € € àÐÐÑØÐÐÑÐÐr   r   c                  ór   — e Zd Zdd„Zd„ Z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   c               ó   ‡‡— 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 ¬	¦  «        }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   )Úapproval_idÚagentÚ
session_idÚ
project_idÚkindÚtitleÚdetailr)   r*   Ú
created_atÚ
expires_ati€  ÚPENDING)ÚlenÚlist_pendingr   Úanyr   ÚvaluesÚasyncioÚget_running_loopr   Únowr   Úutcr
   r   Úhexr   Úcreate_futurer/   Úlistr   Ústater%   )r   r0   r1   r2   r3   r4   r5   r)   r*   Úloopr?   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Øðñ ô ˆõ .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   r/   Úentrys      r   rK   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 )r8   )r   rD   r0   r1   )r+   r,   r0   r1   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   r0   r1   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 )Nr8   FT)r   rD   r   ÚdoneÚ
set_resultr%   )r   rM   rD   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               ó  — |                       |¦  «        }|dvs-|�+|j        dk    s |�:| j                              |¦  «        |k    rt                               d¦  «         dS |                      | j        |         |dk    rdnd¦  «        S )N)ÚapproveÚrejectr8   z8ignored invalid, stale or unauthorized approval responseFrY   ÚAPPROVEDÚREJECTED)rK   rD   r   ÚloggerÚwarningrT   r   )r   r/   ÚdecisionrW   r   s        r   ÚresolvezApprovalRegistry.resolveP   s—   € Ø—8’8˜KÑ(Ô(ˆØÐ1Ð1Ð1°XÐ5EÈÌÐ[dÒIdÐIdØ%Ð1°dÔ6H×6LÒ6LÐM^Ñ6_Ô6_ÐcnÒ6nÐ6nÝ�NŠNÐUÑVÔVÐVØ�5Ø�{Š{˜4œ<¨Ô4ÀHÐPYÒDYÐDY°j°jÐ_iÑjÔjÐjr   c                ó€   — | j                              |¦  «        }t          |o|                      |d¦  «        ¦  «        S ©NÚ	CANCELLED)r   rK   ÚboolrT   rL   s      r   ÚcancelzApprovalRegistry.cancelX   s8   € Ø”× Ò  Ñ-Ô-ˆÝ�EÐ=˜dŸkšk¨%°Ñ=Ô=Ñ>Ô>Ð>r   c                ó¤   — t          | j                             ¦   «         ¦  «        D ](}|j        j        |k    r|                      |d¦  «         Œ)d S rb   )rC   r   r<   r   r)   rT   )r   r)   rM   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:   re   r/   )r   r0   r1   r   s       r   Úcancel_sessionzApprovalRegistry.cancel_sessiona   sC   € Ø×)Ò)¨%°Ñ<Ô<ð 	.ð 	.ˆHØ�KŠK˜Ô,Ñ-Ô-Ð-Ð-ð	.ð 	.r   c              ƒ  ód   K  — t          j        | j        |j                 j        ¦  «        ƒ d {V —†S r#   )r=   Úshieldr   r/   r   ©r   r   s     r   r   zApprovalRegistry.waite   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_dumprl   s     r   ÚwirezApprovalRegistry.wireh   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:   r0   r1   rD   r4   r5   Úwaiting_reason)r   ÚsessionÚpendings      r   ÚoverlayzApprovalRegistry.overlayk   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 rb   )rC   r   r<   rT   r   Úclear)r   rM   s     r   ÚclosezApprovalRegistry.closer   sY   € Ý˜$œ,×-Ò-Ñ/Ô/Ñ0Ô0ð 	,ð 	,ˆEØ�KŠK˜˜{Ñ+Ô+Ð+Ð+ØÔ× Ò Ñ"Ô"Ð"Ð"Ð"r   )NN)r   r   r   r!   r%   rG   rK   r:   rT   rV   r`   re   rg   ri   r   rt   rz   r}   r   r   r   r   r      s  € € € € € ð0ð 0ð 0ð 0ðð ð ðð ð ð,1ð 1ð 1ðQð Qð Qð Qð
ð ð ðð ð ð CGð kð kð kð kð kð?ð ?ð ?ð0ð 0ð 0ð
.ð .ð .ðOð Oð Oðdð dð dðð ð ð#ð #ð #ð #ð #r   r   )Ú__doc__Ú
__future__r   r=   ÚloggingÚcollectionsr   Údataclassesr   r   r   Úuuidr   Úmodelsr
   r   Ú	getLoggerr   r]   r   r   r   r   r   ú<module>r†      s  ðØ SÐ SØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø !Ð !Ð !Ð !Ð !Ð !Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð à *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à	ˆÔ	˜8Ñ	$Ô	$€ð ðð ð ð ð ñ ô ñ „ðð
_#ð _#ð _#ð _#ð _#ñ _#ô _#ð _#ð _#ð _#r   