def _getAllVisibleDiscounts(cls, actions, entities, announced):
        composer = ActionComposer()
        visibleCards = {_VISIBLE_CARDS.ACTIONS: [],
         _VISIBLE_CARDS.ANNOUNCED: []}
        if actions:
            affectedActions = set()
            actionEntities = entities.get('actionEntities', None)
            actionNames = entities.get('actions', None)
            actionSteps = entities.get('steps', None)
            if actionEntities and actionNames and actionSteps:
                for name, step, _ in actionEntities.values():
                    affectedActions.add((actionNames[name], actionSteps[step]))

            for action in actions:
                for actionInfo in getActionInfoData(action):
                    if actionInfo.visualPriority not in _ACTIONS_PRIORITY_LEVEL.ALL_VISIBLE:
                        continue
                    aiName = actionInfo.event.getID()
                    aiStep = actionInfo.discount.getName()
                    if not actionInfo.isDiscountVisible():
                        continue
                    if aiStep in _INTERSECTED_ACTIONS_LIST:
                        if (aiName, aiStep) in affectedActions:
                            composer.add(actionInfo)
                    composer.add(actionInfo)

        visibleCards[_VISIBLE_CARDS.ACTIONS] = composer.getActions()
        for announce in announced:
            infoList = getAnnouncedActionInfo(announce)
            if infoList:
                visibleCards[_VISIBLE_CARDS.ANNOUNCED].append(infoList)

        return visibleCards
    def __update(self):
        actions = self.__eventsCache.getActions(self.__eventFilter())
        for aID, action in actions.items():
            for actionInfo in getActionInfoData(action):
                items = actionInfo.discount.parse()
                self.__items.update({aID: items})

        self.__actions = actions
        if self.actions:
            self.__settings.update(self.actions)
        self.__notifyAboutExpiration()
Example #3
0
    def getAllVisibleDiscounts(cls, actions, entities, announced):
        """
        :param actions: actions list from server
        :param entities: dict
            {'actionsEntities': (index from 'actions', index from 'step', intersected actions (bool)),
             'actions': (list of active actions),
             'steps': (list of active steps),
            }
        :param announced: future actions
        :return: dict of actions for view
        """
        visibleCards = {
            _VISIBLE_CARDS.ACTIONS: [],
            _VISIBLE_CARDS.ANNOUNCED: []
        }
        composer = ActionComposer()
        if actions:
            affectedActions = set()
            actionEntities = entities.get('actionEntities', None)
            actionNames = entities.get('actions', None)
            actionSteps = entities.get('steps', None)
            if actionEntities and actionNames and actionSteps:
                for name, step, _ in actionEntities.values():
                    affectedActions.add((actionNames[name], actionSteps[step]))

            for action in actions:
                for actionInfo in getActionInfoData(action):
                    if actionInfo.visualPriority not in _ACTIONS_PRIORITY_LEVEL.ALL_VISIBLE:
                        continue
                    aiName = actionInfo.event.getID()
                    aiStep = actionInfo.discount.getName()
                    if not actionInfo.isDiscountVisible():
                        continue
                    if aiStep in _INTERSECTED_ACTIONS_LIST:
                        if (aiName, aiStep) in affectedActions:
                            composer.add(actionInfo)
                    else:
                        composer.add(actionInfo)

        for announce in announced:
            infoList = getAnnouncedActionInfo(announce)
            if infoList:
                visibleCards[_VISIBLE_CARDS.ANNOUNCED].append(infoList)

        visibleCards[_VISIBLE_CARDS.ACTIONS] = sorted(
            composer.getActions(), key=methodcaller('getFinishTime'))
        visibleCards[_VISIBLE_CARDS.ANNOUNCED] = sorted(
            visibleCards[_VISIBLE_CARDS.ANNOUNCED],
            key=methodcaller('getStartTime'))
        return visibleCards
def getAllActionsInfoIterator(actions, entities):
    actionEntities = entities.get('actionEntities', None)
    actionNames = entities.get('actions', None)
    actionSteps = entities.get('steps', None)
    affectedActions = set()
    if actionEntities and actionNames and actionSteps:
        affectedActions = {(actionNames[name], actionSteps[step])
                           for name, step, _ in actionEntities.values()}
    for action in actions:
        for actionInfo in getActionInfoData(action):
            if actionInfo.visualPriority not in _ACTIONS_PRIORITY_LEVEL.ALL_VISIBLE:
                continue
            if not actionInfo.isDiscountVisible():
                continue
            aiStep = actionInfo.discount.getName()
            aiName = actionInfo.event.getID()
            if aiStep in _INTERSECTED_ACTIONS_LIST and (
                    aiName, aiStep) not in affectedActions:
                continue
            yield actionInfo

    return