Ë
    oj,  ã                   ó�   — 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y)z]
Persistently cached objects for PB.

Maintainer: Glyph Lefkowitz

Future Plans: None known.
é    N)Údefer)ÚbananaÚflavorsÚjellyc                   ó4   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚPublishablez6An object whose cached state persists across sessions.c                 ó2   — | j                  «        || _        y )N)Ú	republishÚpublishedID)Úselfr   s     ú8/usr/lib/python3/dist-packages/twisted/spread/publish.pyÚ__init__zPublishable.__init__   s   € Ø�‰ÔØ&ˆÕó    c                 ó6   — t        j                   «       | _        y)z=Set the timestamp to current and (TODO) update all observers.N)ÚtimeÚ	timestamp©r   s    r   r
   zPublishable.republish   s   € äŸ™›ˆ�r   c                 ó$   — | j                  |«      S )ú
(internal))ÚgetStateToPublishFor©r   Úperspectives     r   Úview_getStateToPublishz"Publishable.view_getStateToPublish   s   € à×(Ñ(¨Ó5Ð5r   c                 ó"   — | j                  «       S )z:Implement me to special-case your state for a perspective.)ÚgetStateToPublishr   s     r   r   z Publishable.getStateToPublishFor#   s   € à×%Ñ%Ó'Ð'r   c                 ó2   — 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¹nÑ"LÓMÐMr   c                 ó¼   — |r'|j                   }|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+   s`   € áØ×/Ñ/ˆEØ×*Ñ*Ó,×8Ñ8‰EàˆEØˆEô ×'Ñ'¨°TÓ:Ø×+Ñ+Ø ØØŸ™ñ
ð 	
r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r
   r   r   r   r*   © r   r   r   r      s$   „ Ù@ò'ò%ò6ò(ò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y	)ÚRemotePublishedz6The local representation of remote Publishable object.r   c                 óx   — dj                  | j                  | j                  t        | j                  «      |«      S )Nz{}-{}-{}.{})Úformatr"   r   Ústrr   )r   Úexts     r   ÚgetFileNamezRemotePublished.getFileNameC   s6   € Ø×#Ñ#Ø�L‰LØ×ÑÜ�× Ñ Ó!Øó	
ð 	
r   c                 ó  — | j                   j                  |«       g | _        	 t        | j	                  «       d«      5 }|j                  «       }d d d «       t        j                  t        j                  «      «      }|j                  | j                  k(  }|r#| j                  j                   «       d| _        y | j                  j                  d«      j!                  | j                  «       y # 1 sw Y   Œ¤xY w# t        $ r d}Y Œsw xY w)NÚrbr   é   r   )Ú__dict__ÚupdateÚ_activationListenersÚopenr6   Úreadr   Úunjellyr   Údecoder   ÚOSErrorÚ_cbGotUpdateÚ_wasCleanWhenLoadedr!   Ú
callRemoteÚaddCallbacks)r   ÚstateÚdataFileÚdataÚnewselfÚrecents         r   ÚsetCopyableStatez RemotePublished.setCopyableStateK   sÙ   € Ø�‰×Ñ˜UÔ#Ø$&ˆÔ!ð	9Ü�d×&Ñ&Ó(¨$Ó/ð '°8Ø—}‘}“�÷'ô
 —m‘m¤F§M¡M°$Ó$7Ó8ˆGØ×&Ñ&¨$¯.©.Ñ8ˆFÙØ×Ñ˜g×.Ñ.Ô/Ø'(ˆDÕ$à�K‰K×"Ñ"Ð#6Ó7×DÑDÀT×EVÑEVÕW÷'ð 'ûäò 	ØŠFð	ús(   ¤C> ¾C2ÁC> Ã2C;Ã7C> Ã>DÄDc                 óX   — | j                   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                 ót  — | j                   j                  |«       d| _        | j                  D ]
  } || «       Œ g | _        | j	                  «        t        | j                  «       d«      5 }|j                  t        j                  t        j                  | «      «      «       d d d «       y # 1 sw Y   y xY w)Nr9   Úwb)r:   r;   rO   r<   Ú	activatedr=   r6   Úwriter   Úencoder   )r   ÚnewStateÚlistenerrG   s       r   rB   zRemotePublished._cbGotUpdateg   s’   € Ø�‰×Ñ˜XÔ&ØˆÔà×1Ñ1ò 	ˆHÙ�T�Nð	à$&ˆÔ!Ø�‰ÔÜ�$×"Ñ"Ó$ dÓ+ð 	=¨xØ�N‰Nœ6Ÿ=™=¬¯©°TÓ):Ó;Ô<÷	=÷ 	=ñ 	=ús   Á-8B.Â.B7c                  ó   — y)znImplement this method if you want to be notified when your
        publishable subclass is activated.
        Nr/   r   s    r   rU   zRemotePublished.activatedr   s   � r   c                 ód   — | j                   r	 || «       y| j                  j                  |«       y)zZExternally register for notification when this publishable has received all relevant data.N)rO   r<   Úappend)r   Úcallbacks     r   ÚcallWhenActivatedz!RemotePublished.callWhenActivatedw   s&   € à×ÒÙ�T�Nà×%Ñ%×,Ñ,¨XÕ6r   N)Úpub)r+   r,   r-   r.   rO   rC   r6   rK   rR   rB   rU   r^   r/   r   r   r1   r1   =   s/   „ Ù@à€KØÐó
òXò"	ò	=òó
7r   r1   c                 ót   — t        j                  «       }| 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   ÚDeferredrE   Ú	_pubReadyÚerrback)ÚdÚd2s     r   Ú	whenReadyrg      s-   € ô 
�‰Ó	€BØ‡N�N”9˜bŸj™j¸°u€NÔ=Ø€Ir   c                 ó:   — | j                  |j                  «       y)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      sH   ðñ
ó å "ß 1Ñ 1ô&
�'×#Ñ#ô &
ôR?7�g×)Ñ)ô ?7òDó*r   