コード例 #1
0
    def apply_routing_scheme(self, ingest_item, provider, routing_scheme):
        """
        applies routing scheme and applies appropriate action (fetch, publish) to the item
        :param item: ingest item to which routing scheme needs to applied.
        :param provider: provider for which the routing scheme is applied.
        :param routing_scheme: routing scheme.
        """
        rules = routing_scheme.get('rules', [])
        if not rules:
            logger.warning(
                "Routing Scheme % for provider % has no rules configured." %
                (provider.get('name'), routing_scheme.get('name')))

        for rule in self.__get_scheduled_routing_rules(rules):
            if RoutingRuleValidator().is_valid_rule(ingest_item,
                                                    rule.get('filter', {})):
                self.__fetch(ingest_item,
                             rule.get('actions', {}).get('fetch', []))
                self.__publish(ingest_item,
                               rule.get('actions', {}).get('publish', []))
                if rule.get('actions', {}).get('exit', False):
                    break
            else:
                logger.info(
                    "Routing rule %s of Routing Scheme %s for Provider %s did not match for item %s"
                    % (rule.get('name'), routing_scheme.get('name'),
                       provider.get('name'), ingest_item.get('_id')))