
    h,                         S r SSKrSSKJr  SSKJrJrJr   " S S\R                  5      r	 " S S\R                  5      rS	 rS
 rg)z]
Persistently cached objects for PB.

Maintainer: Glyph Lefkowitz

Future Plans: None known.
    N)defer)bananaflavorsjellyc                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)Publishable   z6An object whose cached state persists across sessions.c                 0    U R                  5         Xl        g )N)	republishpublishedID)selfr   s     ]/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/spread/publish.py__init__Publishable.__init__   s    &    c                 8    [         R                   " 5       U l        g)z=Set the timestamp to current and (TODO) update all observers.N)time	timestampr   s    r   r   Publishable.republish   s    r   c                 $    U R                  U5      $ )
(internal))getStateToPublishForr   perspectives     r   view_getStateToPublish"Publishable.view_getStateToPublish   s    ((55r   c                 "    U R                  5       $ )z:Implement me to special-case your state for a perspective.)getStateToPublishr   s     r   r    Publishable.getStateToPublishFor#   s    %%''r   c                 2    [        SU R                  -  5      e)zBImplement me to return state to copy as part of the publish phase.z%s.getStateToPublishFor)NotImplementedError	__class__r   s    r   r   Publishable.getStateToPublish'   s    !";dnn"LMMr   c                     U(       a'  UR                   nUR                  5       R                  nOSnSn[        R                  " X5      U R
                  UUU R                  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   getStateToCacheAndObserveFor(Publishable.getStateToCacheAndObserveFor+   s^    //E**,88EEE '':++ 
 	
r   )r   r   N)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   r0   __static_attributes__ r   r   r   r      s$    @'%6(N
r   r   c                   H    \ rS rSrSrSrSrSS jrS rS r	S r
S rS	 rS
rg)RemotePublished=   z6The local representation of remote Publishable object.r   c                 x    SR                  U R                  U R                  [        U R                  5      U5      $ )Nz{}-{}-{}.{})formatr(   r   strr   )r   exts     r   getFileNameRemotePublished.getFileNameC   s6    ##LL  !	
 	
r   c                 8   U R                   R                  U5        / U l         [        U R	                  5       S5       nUR                  5       nS S S 5        [        R                  " [        R                  " W5      5      nUR                  U R                  :H  nU(       a#  U R                  WR                   5        SU l        g U R                  R                  S5      R!                  U R                  5        g ! , (       d  f       N= f! [         a    Sn N~f = f)Nrbr      r   )__dict__update_activationListenersopenr@   readr   unjellyr   decoder   OSError_cbGotUpdate_wasCleanWhenLoadedr'   
callRemoteaddCallbacks)r   statedataFiledatanewselfrecents         r   setCopyableState RemotePublished.setCopyableStateK   s    U#$&!	9d&&($/8}} 0
 mmFMM$$78G&&$..8Fg../'(D$KK""#67DDTEVEVW 0/ 	F	s(   D
 C9D
 9
DD
 
DDc                 X    U R                   R                  5       nUS	 US	 US	 US	 US	 U$ )Nbrokerr'   luidrG   isActivated)rE   copy)r   others     r   __getstate__RemotePublished.__getstate__\   s?    ""$(O(O&M()- r   c                    U R                   R                  U5        SU l        U R                   H  nU" U 5        M     / U l        U R	                  5         [        U R                  5       S5       nUR                  [        R                  " [        R                  " U 5      5      5        S S S 5        g ! , (       d  f       g = f)NrD   wb)rE   rF   r[   rG   	activatedrH   r@   writer   encoder   )r   newStatelistenerrR   s       r   rM   RemotePublished._cbGotUpdateg   s    X&11HTN 2$&!$""$d+xNN6==T):;< ,++s   /:B22
C c                     g)z^Implement this method if you want to be notified when your
publishable subclass is activated.
Nr8   r   s    r   rb   RemotePublished.activatedr   s    r   c                 n    U R                   (       a	  U" U 5        gU R                  R                  U5        g)zZExternally register for notification when this publishable has received all relevant data.N)r[   rG   append)r   callbacks     r   callWhenActivated!RemotePublished.callWhenActivatedw   s&    TN%%,,X6r   )rG   rN   r[   N)pub)r2   r3   r4   r5   r6   r[   rN   r@   rV   r^   rM   rb   rm   r7   r8   r   r   r:   r:   =   s/    @K
X"		=
7r   r:   c                 p    [         R                  " 5       nU R                  [        UR                  U4S9  U$ )a,  
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   DeferredrP   	_pubReadyerrback)dd2s     r   	whenReadyrw      s-     
	BNN9bjjuN=Ir   c                 :    U R                  UR                  5        g)r   N)rm   rl   )resultrv   s     r   rs   rs      s    
R[[)r   )r6   r   twisted.internetr   twisted.spreadr   r   r   	Cacheabler   RemoteCacher:   rw   rs   r8   r   r   <module>r~      sH   
  " 1 1&
'## &
R?7g)) ?7D*r   