home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- __docformat__ = 'restructuredtext en'
- import os
- import time
- import cPickle as pickle
- from twisted.python import components, log, failure
- from twisted.python.failure import Failure
- from twisted.internet import defer, reactor, threads
- from twisted.internet.interfaces import IProtocolFactory
- from zope.interface import Interface, implements, Attribute
- from twisted.internet.base import DelayedCall
- DelayedCall.debug = True
- from foolscap import Referenceable, DeadReferenceError
- from foolscap.referenceable import RemoteReference
- from IPython.kernel.pbutil import packageFailure, unpackageFailure
- from IPython.kernel.util import printer
- from IPython.kernel.twistedutil import gatherBoth
- from IPython.kernel import newserialized
- from IPython.kernel.error import ProtocolError
- from IPython.kernel import controllerservice
- from IPython.kernel.controllerservice import IControllerBase
- from IPython.kernel.engineservice import IEngineBase, IEngineQueued, EngineService, StrictDict
- from IPython.kernel.pickleutil import can, canDict, canSequence, uncan, uncanDict, uncanSequence
-
- class IFCEngine(Interface):
- pass
-
-
- class FCEngineReferenceFromService(Referenceable, object):
- implements(IFCEngine)
-
- def __init__(self, service):
- self.service = service
- self.collectors = { }
-
-
- def remote_get_id(self):
- return self.service.id
-
-
- def remote_set_id(self, id):
- self.service.id = id
-
-
- def _checkProperties(self, result):
- dosync = self.service.properties.modified
- self.service.properties.modified = False
- if dosync:
- pass
- return (pickle.dumps(self.service.properties, 2), result)
-
-
- def remote_execute(self, lines):
- d = self.service.execute(lines)
- d.addErrback(packageFailure)
- d.addCallback(self._checkProperties)
- d.addErrback(packageFailure)
- return d
-
-
- def remote_push(self, pNamespace):
-
- try:
- namespace = pickle.loads(pNamespace)
- except:
- return defer.fail(failure.Failure()).addErrback(packageFailure)
-
- return self.service.push(namespace).addErrback(packageFailure)
-
-
- def remote_pull(self, keys):
- d = self.service.pull(keys)
- d.addCallback(pickle.dumps, 2)
- d.addErrback(packageFailure)
- return d
-
-
- def remote_push_function(self, pNamespace):
-
- try:
- namespace = pickle.loads(pNamespace)
- except:
- return defer.fail(failure.Failure()).addErrback(packageFailure)
-
- namespace = uncanDict(namespace, globals())
- return self.service.push_function(namespace).addErrback(packageFailure)
-
-
- def remote_pull_function(self, keys):
- d = self.service.pull_function(keys)
- if len(keys) > 1:
- d.addCallback(canSequence)
- elif len(keys) == 1:
- d.addCallback(can)
-
- d.addCallback(pickle.dumps, 2)
- d.addErrback(packageFailure)
- return d
-
-
- def remote_get_result(self, i = None):
- return self.service.get_result(i).addErrback(packageFailure)
-
-
- def remote_reset(self):
- return self.service.reset().addErrback(packageFailure)
-
-
- def remote_kill(self):
- return self.service.kill().addErrback(packageFailure)
-
-
- def remote_keys(self):
- return self.service.keys().addErrback(packageFailure)
-
-
- def remote_push_serialized(self, pNamespace):
-
- try:
- namespace = pickle.loads(pNamespace)
- except:
- return defer.fail(failure.Failure()).addErrback(packageFailure)
-
- d = self.service.push_serialized(namespace)
- return d.addErrback(packageFailure)
-
-
- def remote_pull_serialized(self, keys):
- d = self.service.pull_serialized(keys)
- d.addCallback(pickle.dumps, 2)
- d.addErrback(packageFailure)
- return d
-
-
- def remote_set_properties(self, pNamespace):
-
- try:
- namespace = pickle.loads(pNamespace)
- except:
- return defer.fail(failure.Failure()).addErrback(packageFailure)
-
- return self.service.set_properties(namespace).addErrback(packageFailure)
-
-
- def remote_get_properties(self, keys = None):
- d = self.service.get_properties(keys)
- d.addCallback(pickle.dumps, 2)
- d.addErrback(packageFailure)
- return d
-
-
- def remote_has_properties(self, keys):
- d = self.service.has_properties(keys)
- d.addCallback(pickle.dumps, 2)
- d.addErrback(packageFailure)
- return d
-
-
- def remote_del_properties(self, keys):
- d = self.service.del_properties(keys)
- d.addErrback(packageFailure)
- return d
-
-
- def remote_clear_properties(self):
- d = self.service.clear_properties()
- d.addErrback(packageFailure)
- return d
-
-
- components.registerAdapter(FCEngineReferenceFromService, IEngineBase, IFCEngine)
-
- class EngineFromReference(object):
- implements(IEngineBase)
-
- def __init__(self, reference):
- self.reference = reference
- self._id = None
- self._properties = StrictDict()
- self.currentCommand = None
-
-
- def callRemote(self, *args, **kwargs):
-
- try:
- return self.reference.callRemote(*args, **kwargs)
- except DeadReferenceError:
- self.notifier()
- self.stopNotifying(self.notifier)
- return defer.fail()
-
-
-
- def get_id(self):
- return self._id
-
-
- def set_id(self, id):
- self._id = id
- return self.callRemote('set_id', id)
-
- id = property(get_id, set_id)
-
- def syncProperties(self, r):
-
- try:
- (psync, result) = r
- except (ValueError, TypeError):
- return r
-
- if psync:
- log.msg('sync properties')
- pick = self.checkReturnForFailure(psync)
- if isinstance(pick, failure.Failure):
- self.properties = pick
- return pick
- self.properties = pickle.loads(pick)
-
- return result
-
-
- def _set_properties(self, dikt):
- self._properties.clear()
- self._properties.update(dikt)
-
-
- def _get_properties(self):
- if isinstance(self._properties, failure.Failure):
- self._properties.raiseException()
-
- return self._properties
-
- properties = property(_get_properties, _set_properties)
-
- def execute(self, lines):
- d = self.callRemote('execute', lines)
- d.addCallback(self.syncProperties)
- return d.addCallback(self.checkReturnForFailure)
-
-
- def push(self, namespace):
-
- try:
- package = pickle.dumps(namespace, 2)
- except:
- return defer.fail(failure.Failure())
-
- if isinstance(package, failure.Failure):
- return defer.fail(package)
- d = self.callRemote('push', package)
- return d.addCallback(self.checkReturnForFailure)
-
-
- def pull(self, keys):
- d = self.callRemote('pull', keys)
- d.addCallback(self.checkReturnForFailure)
- d.addCallback(pickle.loads)
- return d
-
-
- def push_function(self, namespace):
-
- try:
- package = pickle.dumps(canDict(namespace), 2)
- except:
- return defer.fail(failure.Failure())
-
- if isinstance(package, failure.Failure):
- return defer.fail(package)
- d = self.callRemote('push_function', package)
- return d.addCallback(self.checkReturnForFailure)
-
-
- def pull_function(self, keys):
- d = self.callRemote('pull_function', keys)
- d.addCallback(self.checkReturnForFailure)
- d.addCallback(pickle.loads)
- if len(keys) == 1:
- d.addCallback(uncan, globals())
- elif len(keys) > 1:
- d.addCallback(uncanSequence, globals())
-
- return d
-
-
- def get_result(self, i = None):
- return self.callRemote('get_result', i).addCallback(self.checkReturnForFailure)
-
-
- def reset(self):
- self._refreshProperties = True
- d = self.callRemote('reset')
- d.addCallback(self.syncProperties)
- return d.addCallback(self.checkReturnForFailure)
-
-
- def kill(self):
- d = self.callRemote('kill')
- d.addCallback(self.syncProperties)
- d.addCallback(self.checkReturnForFailure)
- d.addErrback(self.killBack)
- return d
-
-
- def killBack(self, f):
- log.msg('filling engine: %s' % f)
-
-
- def keys(self):
- return self.callRemote('keys').addCallback(self.checkReturnForFailure)
-
-
- def set_properties(self, properties):
-
- try:
- package = pickle.dumps(properties, 2)
- except:
- return defer.fail(failure.Failure())
-
- if isinstance(package, failure.Failure):
- return defer.fail(package)
- d = self.callRemote('set_properties', package)
- return d.addCallback(self.checkReturnForFailure)
- return d
-
-
- def get_properties(self, keys = None):
- d = self.callRemote('get_properties', keys)
- d.addCallback(self.checkReturnForFailure)
- d.addCallback(pickle.loads)
- return d
-
-
- def has_properties(self, keys):
- d = self.callRemote('has_properties', keys)
- d.addCallback(self.checkReturnForFailure)
- d.addCallback(pickle.loads)
- return d
-
-
- def del_properties(self, keys):
- d = self.callRemote('del_properties', keys)
- d.addCallback(self.checkReturnForFailure)
- return d
-
-
- def clear_properties(self):
- d = self.callRemote('clear_properties')
- d.addCallback(self.checkReturnForFailure)
- return d
-
-
- def push_serialized(self, namespace):
-
- try:
- package = pickle.dumps(namespace, 2)
- except:
- return defer.fail(failure.Failure())
-
- if isinstance(package, failure.Failure):
- return defer.fail(package)
- d = self.callRemote('push_serialized', package)
- return d.addCallback(self.checkReturnForFailure)
-
-
- def pull_serialized(self, keys):
- d = self.callRemote('pull_serialized', keys)
- d.addCallback(self.checkReturnForFailure)
- d.addCallback(pickle.loads)
- return d
-
-
- def checkReturnForFailure(self, r):
- return unpackageFailure(r)
-
-
- components.registerAdapter(EngineFromReference, RemoteReference, IEngineBase)
-
- class IFCControllerBase(Interface):
-
- def remote_register_engine(self, engineReference, id = None, pid = None, pproperties = None):
- pass
-
-
-
- class FCRemoteEngineRefFromService(Referenceable):
- implements(IFCControllerBase)
-
- def __init__(self, service):
- self.service = service
-
-
- def remote_register_engine(self, engine_reference, id = None, pid = None, pproperties = None):
- engine = IEngineBase(engine_reference)
- if pproperties:
- engine.properties = pickle.loads(pproperties)
-
- remote_engine = IEngineQueued(engine)
- peer_address = engine_reference.tracker.broker.transport.getPeer()
- ip = peer_address.host
- port = peer_address.port
- reg_dict = self.service.register_engine(remote_engine, id, ip, port, pid)
-
- def notify(*args):
- return self.service.unregister_engine(reg_dict['id'])
-
- engine_reference.tracker.broker.notifyOnDisconnect(notify)
- engine.notifier = notify
- engine.stopNotifying = engine_reference.tracker.broker.dontNotifyOnDisconnect
- return reg_dict
-
-
- components.registerAdapter(FCRemoteEngineRefFromService, IControllerBase, IFCControllerBase)
-