| Index: third_party/twisted_8_1/twisted/spread/publish.py
|
| diff --git a/third_party/twisted_8_1/twisted/spread/publish.py b/third_party/twisted_8_1/twisted/spread/publish.py
|
| deleted file mode 100644
|
| index 0f031fdd2fbf2adcbb13351e53b0db273622be67..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/spread/publish.py
|
| +++ /dev/null
|
| @@ -1,142 +0,0 @@
|
| -# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -
|
| -"""
|
| -Persistently cached objects for PB.
|
| -
|
| -Maintainer: U{Glyph Lefkowitz<mailto:glyph@twistedmatrix.com>}
|
| -
|
| -Future Plans: None known.
|
| -"""
|
| -
|
| -# Twisted imports
|
| -from twisted.internet import defer
|
| -
|
| -# sibling imports
|
| -import jelly
|
| -import banana
|
| -import flavors
|
| -
|
| -# System Imports
|
| -import time
|
| -
|
| -class Publishable(flavors.Cacheable):
|
| - """An object whose cached state persists across sessions.
|
| - """
|
| - def __init__(self, publishedID):
|
| - self.republish()
|
| - self.publishedID = publishedID
|
| -
|
| - def republish(self):
|
| - """Set the timestamp to current and (TODO) update all observers.
|
| - """
|
| - self.timestamp = time.time()
|
| -
|
| - def view_getStateToPublish(self, perspective):
|
| - '(internal)'
|
| - return self.getStateToPublishFor(perspective)
|
| -
|
| - def getStateToPublishFor(self, perspective):
|
| - """Implement me to special-case your state for a perspective.
|
| - """
|
| - return self.getStateToPublish()
|
| -
|
| - def getStateToPublish(self):
|
| - """Implement me to return state to copy as part of the publish phase.
|
| - """
|
| - raise NotImplementedError("%s.getStateToPublishFor" % self.__class__)
|
| -
|
| - def getStateToCacheAndObserveFor(self, perspective, observer):
|
| - """Get all necessary metadata to keep a clientside cache.
|
| - """
|
| - if perspective:
|
| - pname = perspective.perspectiveName
|
| - sname = perspective.getService().serviceName
|
| - else:
|
| - pname = "None"
|
| - sname = "None"
|
| -
|
| - return {"remote": flavors.ViewPoint(perspective, self),
|
| - "publishedID": self.publishedID,
|
| - "perspective": pname,
|
| - "service": sname,
|
| - "timestamp": self.timestamp}
|
| -
|
| -class RemotePublished(flavors.RemoteCache):
|
| - """The local representation of remote Publishable object.
|
| - """
|
| - isActivated = 0
|
| - _wasCleanWhenLoaded = 0
|
| - def getFileName(self, ext='pub'):
|
| - return ("%s-%s-%s.%s" %
|
| - (self.service, self.perspective, str(self.publishedID), ext))
|
| -
|
| - def setCopyableState(self, state):
|
| - self.__dict__.update(state)
|
| - self._activationListeners = []
|
| - try:
|
| - data = open(self.getFileName()).read()
|
| - except IOError:
|
| - recent = 0
|
| - else:
|
| - newself = jelly.unjelly(banana.decode(data))
|
| - recent = (newself.timestamp == self.timestamp)
|
| - if recent:
|
| - self._cbGotUpdate(newself.__dict__)
|
| - self._wasCleanWhenLoaded = 1
|
| - else:
|
| - self.remote.callRemote('getStateToPublish').addCallbacks(self._cbGotUpdate)
|
| -
|
| - def __getstate__(self):
|
| - other = self.__dict__.copy()
|
| - # Remove PB-specific attributes
|
| - del other['broker']
|
| - del other['remote']
|
| - del other['luid']
|
| - # remove my own runtime-tracking stuff
|
| - del other['_activationListeners']
|
| - del other['isActivated']
|
| - return other
|
| -
|
| - def _cbGotUpdate(self, newState):
|
| - self.__dict__.update(newState)
|
| - self.isActivated = 1
|
| - # send out notifications
|
| - for listener in self._activationListeners:
|
| - listener(self)
|
| - self._activationListeners = []
|
| - self.activated()
|
| - open(self.getFileName(), "wb").write(banana.encode(jelly.jelly(self)))
|
| -
|
| - def activated(self):
|
| - """Implement this method if you want to be notified when your
|
| - publishable subclass is activated.
|
| - """
|
| -
|
| - def callWhenActivated(self, callback):
|
| - """Externally register for notification when this publishable has received all relevant data.
|
| - """
|
| - if self.isActivated:
|
| - callback(self)
|
| - else:
|
| - self._activationListeners.append(callback)
|
| -
|
| -def whenReady(d):
|
| - """
|
| - 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)
|
| - """
|
| - d2 = defer.Deferred()
|
| - d.addCallbacks(_pubReady, d2.errback,
|
| - callbackArgs=(d2,))
|
| - return d2
|
| -
|
| -def _pubReady(result, d2):
|
| - '(internal)'
|
| - result.callWhenActivated(d2.callback)
|
|
|