Ejemplo n.º 1
0
Archivo: proxy.py Proyecto: wyn/collab
    def onGotItem(self, item):
        """
        Process the given item and broadcast outcome
        Needs to respond to stop messages by collecting the answer together and then passing them on

        API calls need to be distinguished from subsystem messages
        
        """
        d = defer.Deferred()
        logs = sim.Logger()
        node = item.nodeIdentifier
        el = item.firstChildElement()
        params = sim.getParameters(el, logs)
        if not params:
            # not an item for this component
            d = defer.succeed(None)

        # API calls
        if params.cmd == 'stop':
            d = self.api_onGotStop(params)

        elif params.cmd == 'start':
            portfolio = port.getPortfolio(el, logs)
            d = self.api_onGotStart(params, portfolio, node)

        elif params.cmd == 'results':
            dists = sim.getDistributions(el, logs)
            d = self.api_broadcastResults(params, dists)

        elif params.cmd == 'info':
            progress = sim.getProgress(el, logs)
            if progress:
                d = self.api_broadcastProgress(params, progress)

        return d
Ejemplo n.º 2
0
    def onGotDistribution(self, params, item, logger):
        dists = sim.getDistributions(item, logger)
        progress = sim.getProgress(item, logger)

        def gen():
            # want to lock down any errors raised inside this as it will be used in a L{task.CooperativeTask}
            if not (progress and dists):
                d = self.broadcastLogs(logger, params)
                d.addErrback(self._errback, logger, params)
                yield d
            else:
                for name, dist in dists.histograms.iteritems():
                    d = self.handleDistribution(params, name, dist, progress)
                    d.addErrback(self._errback, logger, params)
                    yield d

        return self.coop.coiterate(gen())