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')))