§
    Ètºf,  ã                   óŠ   — d Z ddlZddlmZ ddlmZmZmZ  G d„ dej        ¦  «        Z	 G d„ dej
        ¦  «        Zd	„ Zd
„ ZdS )z]
Persistently cached objects for PB.

Maintainer: Glyph Lefkowitz

Future Plans: None known.
é    N)Údefer)ÚbananaÚflavorsÚjellyc                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚPublishablez6An object whose cached state persists across sessions.c                 ó<   — |                       ¦   «          || _        d S )N)Ú	republishÚpublishedID)Úselfr   s     úU/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/spread/publish.pyÚ__init__zPublishable.__init__   s    € Ø�ŠÑÔÐØ&ˆÔÐÐó    c                 ó6   — t          j         ¦   «         | _        dS )z=Set the timestamp to current and (TODO) update all observers.N)ÚtimeÚ	timestamp©r   s    r   r
   zPublishable.republish   s   € åœ™œˆŒˆˆr   c                 ó,   — |                       |¦  «        S )ú
(internal))ÚgetStateToPublishFor©r   Úperspectives     r   Úview_getStateToPublishz"Publishable.view_getStateToPublish   s   € à×(Ò(¨Ñ5Ô5Ð5r   c                 ó*   — |                       ¦   «         S )z:Implement me to special-case your state for a perspective.)ÚgetStateToPublishr   s     r   r   z Publishable.getStateToPublishFor#   s   € à×%Ò%Ñ'Ô'Ð'r   c                 ó0   — t          d| j        z  ¦  «        ‚)zBImplement me to return state to copy as part of the publish phase.z%s.getStateToPublishFor)ÚNotImplementedErrorÚ	__class__r   s    r   r   zPublishable.getStateToPublish'   s   € å!Ð";¸d¼nÑ"LÑMÔMÐMr   c                 óš   — |r!|j         }|                     ¦   «         j        }nd}d}t          j        || ¦  «        | j        ||| j        dœS )z6Get all necessary metadata to keep a clientside cache.ÚNone)Úremoter   r   Úservicer   )ÚperspectiveNameÚ
getServiceÚserviceNamer   Ú	ViewPointr   r   )r   r   ÚobserverÚpnameÚsnames        r   ÚgetStateToCacheAndObserveForz(Publishable.getStateToCacheAndObserveFor+   sd   € àð 	ØÔ/ˆEØ×*Ò*Ñ,Ô,Ô8ˆEˆEàˆEØˆEõ Ô'¨°TÑ:Ô:ØÔ+Ø ØØœð
ð 
ð 	
r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r
   r   r   r   r*   © r   r   r   r      sw   € € € € € Ø@Ð@ð'ð 'ð 'ð%ð %ð %ð6ð 6ð 6ð(ð (ð (ðNð Nð Nð
ð 
ð 
ð 
ð 
r   r   c                   ó@   — e Zd ZdZdZdZdd„Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )ÚRemotePublishedz6The local representation of remote Publishable object.r   Úpubc                 ój   — d                      | j        | j        t          | j        ¦  «        |¦  «        S )Nz{}-{}-{}.{})Úformatr"   r   Ústrr   )r   Úexts     r   ÚgetFileNamezRemotePublished.getFileNameC   s6   € Ø×#Ò#ØŒLØÔÝ�Ô Ñ!Ô!Øñ	
ô 
ð 	
r   c                 ó&  — | j                              |¦  «         g | _        	 t          |                      ¦   «         d¦  «        5 }|                     ¦   «         }d d d ¦  «         n# 1 swxY w Y   t          j        t          j	        |¦  «        ¦  «        }|j
        | j
        k    }n# t          $ r d}Y nw xY w|r#|                      |j         ¦  «         d| _        d S | j                             d¦  «                             | j        ¦  «         d S )NÚrbr   é   r   )Ú__dict__ÚupdateÚ_activationListenersÚopenr7   Úreadr   Úunjellyr   Údecoder   ÚOSErrorÚ_cbGotUpdateÚ_wasCleanWhenLoadedr!   Ú
callRemoteÚaddCallbacks)r   ÚstateÚdataFileÚdataÚnewselfÚrecents         r   ÚsetCopyableStatez RemotePublished.setCopyableStateK   sP  € ØŒ×Ò˜UÑ#Ô#Ð#Ø$&ˆÔ!ð	9Ý�d×&Ò&Ñ(Ô(¨$Ñ/Ô/ð '°8Ø—}’}‘”�ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'õ
 ”m¥F¤M°$Ñ$7Ô$7Ñ8Ô8ˆGØÔ&¨$¬.Ò8ˆFˆFøõ	 ð 	ð 	ð 	ØˆFˆFˆFð	øøøð
 ð 	XØ×Ò˜gÔ.Ñ/Ô/Ð/Ø'(ˆDÔ$Ð$Ð$àŒK×"Ò"Ð#6Ñ7Ô7×DÒDÀTÔEVÑWÔWÐWÐWÐWs5   £"B( ÁA&ÁB( Á&A*Á*B( Á-A*Á.B( Â(B7Â6B7c                 óV   — | j                              ¦   «         }|d= |d= |d= |d= |d= |S )NÚbrokerr!   Úluidr=   ÚisActivated)r;   Úcopy)r   Úothers     r   Ú__getstate__zRemotePublished.__getstate__\   s@   € Ø”×"Ò"Ñ$Ô$ˆà�(ˆOØ�(ˆOØ�&ˆMàÐ(Ð)Ø�-Ð Øˆr   c                 ó�  — | j                              |¦  «         d| _        | j        D ]} || ¦  «         Œg | _        |                      ¦   «          t          |                      ¦   «         d¦  «        5 }|                     t          j	        t          j
        | ¦  «        ¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr:   Úwb)r;   r<   rP   r=   Ú	activatedr>   r7   Úwriter   Úencoder   )r   ÚnewStateÚlistenerrH   s       r   rC   zRemotePublished._cbGotUpdateg   sü   € ØŒ×Ò˜XÑ&Ô&Ð&ØˆÔàÔ1ð 	ð 	ˆHØˆH�T‰NŒNˆNˆNØ$&ˆÔ!Ø�ŠÑÔÐÝ�$×"Ò"Ñ$Ô$ dÑ+Ô+ð 	=¨xØ�NŠN�6œ=­¬°TÑ):Ô):Ñ;Ô;Ñ<Ô<Ð<ð	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=ð 	=ð 	=s   Á4:B;Â;B?ÃB?c                 ó   — dS )znImplement this method if you want to be notified when your
        publishable subclass is activated.
        Nr/   r   s    r   rV   zRemotePublished.activatedr   s   € € € r   c                 ób   — | j         r || ¦  «         dS | j                             |¦  «         dS )zZExternally register for notification when this publishable has received all relevant data.N)rP   r=   Úappend)r   Úcallbacks     r   ÚcallWhenActivatedz!RemotePublished.callWhenActivatedw   s;   € àÔð 	7ØˆH�T‰NŒNˆNˆNˆNàÔ%×,Ò,¨XÑ6Ô6Ð6Ð6Ð6r   N)r2   )r+   r,   r-   r.   rP   rD   r7   rL   rS   rC   rV   r_   r/   r   r   r1   r1   =   s‡   € € € € € Ø@Ð@à€KØÐð
ð 
ð 
ð 
ðXð Xð Xð"	ð 	ð 	ð	=ð 	=ð 	=ðð ð ð
7ð 7ð 7ð 7ð 7r   r1   c                 ór   — t          j        ¦   «         }|                      t          |j        |f¬¦  «         |S )aD  
    Wrap a deferred returned from a pb method in another deferred that
    expects a RemotePublished as a result.  This will allow you to wait until
    the result is really available.

    Idiomatic usage would look like::

        publish.whenReady(serverObject.getMeAPublishable()).addCallback(lookAtThePublishable)
    )ÚcallbackArgs)r   ÚDeferredrF   Ú	_pubReadyÚerrback)ÚdÚd2s     r   Ú	whenReadyrg      s2   € õ 
ŒÑ	Ô	€BØ‡N‚N•9˜bœj¸°u€NÑ=Ô=Ð=Ø€Ir   c                 ó:   — |                       |j        ¦  «         dS )r   N)r_   r^   )Úresultrf   s     r   rc   rc   Ž   s   € à
×Ò˜Rœ[Ñ)Ô)Ð)Ð)Ð)r   )r.   r   Útwisted.internetr   Útwisted.spreadr   r   r   Ú	Cacheabler   ÚRemoteCacher1   rg   rc   r/   r   r   ú<module>rn      sÎ   ðð
ð ð €€€à "Ð "Ð "Ð "Ð "Ð "Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1ð&
ð &
ð &
ð &
ð &
�'Ô#ñ &
ô &
ð &
ðR?7ð ?7ð ?7ð ?7ð ?7�gÔ)ñ ?7ô ?7ð ?7ðDð ð ð*ð *ð *ð *ð *r   