def _notifyOfTupleUpdateInMainOne(self, tupleSelector: TupleSelector):
        tsStr = tupleSelector.toJsonStr()
        if tsStr not in self._observerDataByTupleSelector:
            return

        # Filter out the offline observables
        onlineUuids = set(VortexFactory.getRemoteVortexUuids())
        observers = self._observerDataByTupleSelector[tsStr].observers
        for od in list(observers):
            if od.vortexUuid not in onlineUuids:
                observers.remove(od)

        # Get / update the list of observing UUIDs
        if not observers:
            del self._observerDataByTupleSelector[tsStr]
            return

        # Create the vortexMsg
        filt = dict(tupleSelector=tupleSelector)
        filt.update(self._filt)
        vortexMsg = yield self._createVortexMsg(filt, tupleSelector)

        # We can have multiple Observable clients on the one vortex, so make sure
        # we only send one message for these.
        destVortexUuids = set([od.vortexUuid for od in observers])

        # Send the vortex messages
        for destVortexUuid in destVortexUuids:
            d = VortexFactory.sendVortexMsg(vortexMsgs=vortexMsg,
                                            destVortexUuid=destVortexUuid)
            d.addErrback(vortexLogFailure, logger)
 def makeVortexMsg(self, filt: dict, tupleSelector: TupleSelector) -> Deferred:
     # Uncomment this to print the SQL being created
     #
     # criterias = tupleSelector..get('criteria', [])
     # newestDateTime = tupleSelector..get('newestDateTime')
     # oldestDateTime = tupleSelector..get('oldestDateTime')
     #
     # sql = self._makeSql(criterias, 0, newestDateTime, oldestDateTime)
     # logger.info(sql)
     logger.debug(tupleSelector.toJsonStr())
     return (yield runPyInPg(logger,
                             self._dbSessionCreator,
                             self._loadInPg,
                             self._importTuples,
                             filt=filt,
                             tupleSelectorStr=tupleSelector.toJsonStr())).encode()
Пример #3
0
    def _makeCache(self,
                   tupleSelector: TupleSelector) -> _CachedSubscribedData:
        tsStr = tupleSelector.toJsonStr()
        if tsStr in self.__cache:
            return self.__cache[tsStr]

        cache = _CachedSubscribedData(tupleSelector)
        self.__cache[tsStr] = cache
        return cache
    def _getMappedTupleSelectors(
            self, tupleSelector: TupleSelector) -> List[TupleSelector]:

        # Get all tuple selectors
        allTupleSelectors = [
            data.tupleSelector
            for data in self._observerDataByTupleSelector.values()
        ]

        # Create a dict so we end up with only unique ones
        tupleSelectorByStr = {tupleSelector.toJsonStr(): tupleSelector}

        # Run through the mappers
        for mapper in self._tupleSelectorUpdateMappers:
            mappedSelectors = mapper.mapTupleSelector(tupleSelector,
                                                      allTupleSelectors)
            if mappedSelectors:
                tupleSelectorByStr.update(
                    {ts.toJsonStr(): ts
                     for ts in mappedSelectors})

        # Return a list of tuple selectors
        return list(tupleSelectorByStr.values())
 def hasTupleSubscribers(self, tupleSelector: TupleSelector):
     return tupleSelector.toJsonStr() in self._observerDataByTupleSelector
Пример #6
0
 def _hasTupleSelector(self, tupleSelectorAny: TupleSelector) -> bool:
     return tupleSelectorAny.toJsonStr() in self.__cache
Пример #7
0
 def _getCache(
         self,
         tupleSelector: TupleSelector) -> Optional[_CachedSubscribedData]:
     return self.__cache.get(tupleSelector.toJsonStr())