def does_match(self, content_filter, article, filters=None):
        if not content_filter:
            return True  # a non-existing filter matches every thing

        filter_condition_service = get_resource_service("filter_conditions")
        expressions = []
        for index, expression in enumerate(
                content_filter.get("content_filter", [])):
            if not expression.get("expression"):
                raise SuperdeskApiError.badRequestError(
                    _("Filter statement {index} does not have a filter condition"
                      ).format(index=index + 1))
            filter_conditions = []
            if "fc" in expression.get("expression", {}):
                for f in expression["expression"]["fc"]:
                    fc = (filters.get("filter_conditions", {}).get(
                        f, {}).get("fc") if filters else
                          filter_condition_service.find_one(req=None, _id=f))
                    filter_condition = FilterCondition.parse(fc)
                    filter_conditions.append(
                        filter_condition.does_match(article))
            if "pf" in expression.get("expression", {}):
                for f in expression["expression"]["pf"]:
                    current_filter = (filters.get("content_filters", {}).get(
                        f, {}).get("cf") if filters else super().find_one(
                            req=None, _id=f))
                    filter_conditions.append(
                        self.does_match(current_filter, article))

            expressions.append(all(filter_conditions))
        return any(expressions)
    def build_mongo_query(self, doc):
        filter_condition_service = get_resource_service("filter_conditions")
        expressions = []
        for expression in doc.get("content_filter", []):
            filter_conditions = []
            if "fc" in expression.get("expression", {}):
                for f in expression["expression"]["fc"]:
                    current_filter = FilterCondition.parse(
                        filter_condition_service.find_one(req=None, _id=f))
                    mongo_query = current_filter.get_mongo_query()
                    filter_conditions.append(mongo_query)
            if "pf" in expression.get("expression", {}):
                for f in expression["expression"]["pf"]:
                    current_filter = super().find_one(req=None, _id=f)
                    mongo_query = self.build_mongo_query(current_filter)
                    filter_conditions.append(mongo_query)

            if len(filter_conditions) > 1:
                expressions.append({"$and": filter_conditions})
            else:
                expressions.extend(filter_conditions)

        if len(expressions) > 1:
            return {"$or": expressions}
        else:
            return expressions[0]
    def _get_elastic_query(self, doc, matching=True):
        expressions_list = []
        if matching:
            expressions = {"should": expressions_list}
        else:
            expressions = {"must_not": expressions_list}

        filter_condition_service = get_resource_service("filter_conditions")
        for expression in doc.get("content_filter", []):
            filter_conditions = {
                "must": [],
                "must_not": [{
                    "term": {
                        "state": "spiked"
                    }
                }]
            }
            if "fc" in expression.get("expression", {}):
                for f in expression["expression"]["fc"]:
                    current_filter = FilterCondition.parse(
                        filter_condition_service.find_one(req=None, _id=f))
                    elastic_query = current_filter.get_elastic_query()
                    if current_filter.contains_not():
                        filter_conditions["must_not"].append(elastic_query)
                    else:
                        filter_conditions["must"].append(elastic_query)
            if "pf" in expression.get("expression", {}):
                for f in expression["expression"]["pf"]:
                    current_filter = super().find_one(req=None, _id=f)
                    elastic_query = self._get_elastic_query(current_filter)
                    filter_conditions["must"].append(elastic_query)

            expressions_list.append({"bool": filter_conditions})
        return {"bool": expressions}
Exemplo n.º 4
0
    def build_mongo_query(self, doc):
        filter_condition_service = get_resource_service('filter_conditions')
        expressions = []
        for expression in doc.get('content_filter', []):
            filter_conditions = []
            if 'fc' in expression.get('expression', {}):
                for f in expression['expression']['fc']:
                    current_filter = FilterCondition.parse(
                        filter_condition_service.find_one(req=None, _id=f))
                    mongo_query = current_filter.get_mongo_query()
                    filter_conditions.append(mongo_query)
            if 'pf' in expression.get('expression', {}):
                for f in expression['expression']['pf']:
                    current_filter = super().find_one(req=None, _id=f)
                    mongo_query = self.build_mongo_query(current_filter)
                    filter_conditions.append(mongo_query)

            if len(filter_conditions) > 1:
                expressions.append({'$and': filter_conditions})
            else:
                expressions.extend(filter_conditions)

        if len(expressions) > 1:
            return {'$or': expressions}
        else:
            return expressions[0]
    def build_mongo_query(self, doc):
        filter_condition_service = get_resource_service("filter_conditions")
        expressions = []
        for expression in doc.get("content_filter", []):
            filter_conditions = []
            if "fc" in expression.get("expression", {}):
                for f in expression["expression"]["fc"]:
                    current_filter = FilterCondition.parse(filter_condition_service.find_one(req=None, _id=f))
                    mongo_query = current_filter.get_mongo_query()
                    filter_conditions.append(mongo_query)
            if "pf" in expression.get("expression", {}):
                for f in expression["expression"]["pf"]:
                    current_filter = super().find_one(req=None, _id=f)
                    mongo_query = self.build_mongo_query(current_filter)
                    filter_conditions.append(mongo_query)

            if len(filter_conditions) > 1:
                expressions.append({"$and": filter_conditions})
            else:
                expressions.extend(filter_conditions)

        if len(expressions) > 1:
            return {"$or": expressions}
        else:
            return expressions[0]
Exemplo n.º 6
0
    def _get_elastic_query(self, doc, matching=True):
        expressions_list = []
        if matching:
            expressions = {'should': expressions_list}
        else:
            expressions = {'must_not': expressions_list}

        filter_condition_service = get_resource_service('filter_conditions')
        for expression in doc.get('content_filter', []):
            filter_conditions = {'must': [], 'must_not': [{"term": {"state": "spiked"}}]}
            if 'fc' in expression.get('expression', {}):
                for f in expression['expression']['fc']:
                    current_filter = FilterCondition.parse(filter_condition_service.find_one(req=None, _id=f))
                    elastic_query = current_filter.get_elastic_query()
                    if current_filter.contains_not():
                        filter_conditions['must_not'].append(elastic_query)
                    else:
                        filter_conditions['must'].append(elastic_query)
            if 'pf' in expression.get('expression', {}):
                for f in expression['expression']['pf']:
                    current_filter = super().find_one(req=None, _id=f)
                    elastic_query = self._get_elastic_query(current_filter)
                    filter_conditions['must'].append(elastic_query)

            expressions_list.append({'bool': filter_conditions})
        return {'bool': expressions}
    def _get_elastic_query(self, doc, matching=True):
        expressions_list = []
        if matching:
            expressions = {'should': expressions_list}
        else:
            expressions = {'must_not': expressions_list}

        filter_condition_service = get_resource_service('filter_conditions')
        for expression in doc.get('content_filter', []):
            filter_conditions = {'must': [], 'must_not': [{"term": {"state": "spiked"}}]}
            if 'fc' in expression.get('expression', {}):
                for f in expression['expression']['fc']:
                    current_filter = FilterCondition.parse(filter_condition_service.find_one(req=None, _id=f))
                    elastic_query = current_filter.get_elastic_query()
                    if current_filter.contains_not():
                        filter_conditions['must_not'].append(elastic_query)
                    else:
                        filter_conditions['must'].append(elastic_query)
            if 'pf' in expression.get('expression', {}):
                for f in expression['expression']['pf']:
                    current_filter = super().find_one(req=None, _id=f)
                    elastic_query = self._get_elastic_query(current_filter)
                    filter_conditions['must'].append(elastic_query)

            expressions_list.append({'bool': filter_conditions})
        return {'bool': expressions}
    def build_mongo_query(self, doc):
        filter_condition_service = get_resource_service('filter_conditions')
        expressions = []
        for expression in doc.get('content_filter', []):
            filter_conditions = []
            if 'fc' in expression.get('expression', {}):
                for f in expression['expression']['fc']:
                    current_filter = FilterCondition.parse(filter_condition_service.find_one(req=None, _id=f))
                    mongo_query = current_filter.get_mongo_query()
                    filter_conditions.append(mongo_query)
            if 'pf' in expression.get('expression', {}):
                for f in expression['expression']['pf']:
                    current_filter = super().find_one(req=None, _id=f)
                    mongo_query = self.build_mongo_query(current_filter)
                    filter_conditions.append(mongo_query)

            if len(filter_conditions) > 1:
                expressions.append({'$and': filter_conditions})
            else:
                expressions.extend(filter_conditions)

        if len(expressions) > 1:
            return {'$or': expressions}
        else:
            return expressions[0]
    def does_match(self, content_filter, article):
        if not content_filter:
            return True  # a non-existing filter matches every thing

        filter_condition_service = get_resource_service("filter_conditions")
        expressions = []
        for expression in content_filter.get("content_filter", []):
            filter_conditions = []
            if "fc" in expression.get("expression", {}):
                for f in expression["expression"]["fc"]:
                    filter_condition = FilterCondition.parse(filter_condition_service.find_one(req=None, _id=f))
                    filter_conditions.append(filter_condition.does_match(article))
            if "pf" in expression.get("expression", {}):
                for f in expression["expression"]["pf"]:
                    current_filter = super().find_one(req=None, _id=f)
                    filter_conditions.append(self.does_match(current_filter, article))

            expressions.append(all(filter_conditions))
        return any(expressions)
    def does_match(self, content_filter, article):
        if not content_filter:
            return True  # a non-existing filter matches every thing

        filter_condition_service = get_resource_service('filter_conditions')
        expressions = []
        for expression in content_filter.get('content_filter', []):
            filter_conditions = []
            if 'fc' in expression.get('expression', {}):
                for f in expression['expression']['fc']:
                    filter_condition = FilterCondition.parse(filter_condition_service.find_one(req=None, _id=f))
                    filter_conditions.append(filter_condition.does_match(article))
            if 'pf' in expression.get('expression', {}):
                for f in expression['expression']['pf']:
                    current_filter = super().find_one(req=None, _id=f)
                    filter_conditions.append(self.does_match(current_filter, article))

            expressions.append(all(filter_conditions))
        return any(expressions)
Exemplo n.º 11
0
    def does_match(self, content_filter, article):
        if not content_filter:
            return True  # a non-existing filter matches every thing

        filter_condition_service = get_resource_service('filter_conditions')
        expressions = []
        for expression in content_filter.get('content_filter', []):
            filter_conditions = []
            if 'fc' in expression.get('expression', {}):
                for f in expression['expression']['fc']:
                    filter_condition = FilterCondition.parse(
                        filter_condition_service.find_one(req=None, _id=f))
                    filter_conditions.append(
                        filter_condition.does_match(article))
            if 'pf' in expression.get('expression', {}):
                for f in expression['expression']['pf']:
                    current_filter = super().find_one(req=None, _id=f)
                    filter_conditions.append(
                        self.does_match(current_filter, article))

            expressions.append(all(filter_conditions))
        return any(expressions)
    def _get_elastic_query(self, doc, matching=True):
        expressions_list = []
        if matching:
            expressions = {"should": expressions_list}
        else:
            expressions = {"must_not": expressions_list}

        filter_condition_service = get_resource_service("filter_conditions")
        for expression in doc.get("content_filter", []):
            filter_conditions = {"must": []}
            if "fc" in expression.get("expression", {}):
                for f in expression["expression"]["fc"]:
                    current_filter = FilterCondition.parse(filter_condition_service.find_one(req=None, _id=f))
                    elastic_query = current_filter.get_elastic_query()
                    filter_conditions["must"].append(elastic_query)
            if "pf" in expression.get("expression", {}):
                for f in expression["expression"]["pf"]:
                    current_filter = super().find_one(req=None, _id=f)
                    elastic_query = self._get_elastic_query(current_filter)
                    filter_conditions["must"].append(elastic_query)

            expressions_list.append({"bool": filter_conditions})
        return {"bool": expressions}