Пример #1
0
class AddonPromotedQueryParam(AddonQueryMultiParam):
    query_param = 'promoted'
    reverse_dict = PROMOTED_API_NAME_TO_IDS
    valid_values = PROMOTED_API_NAME_TO_IDS.values()

    def get_values(self):
        values = super().get_values()
        # The values are lists of ids so flatten into a single list
        return list({y for x in values for y in x})

    def get_app(self):
        return (AddonAppQueryParam(self.request).get_value() if
                AddonAppQueryParam.query_param in self.request.GET else None)

    def get_es_query(self):
        query = [Q(self.operator, **{'promoted.group_id': self.get_values()})]

        if app := self.get_app():
            # If a specific application isn't set then application_id is None,
            # but ES doesn't store None values - it just doesn't store the
            # field for that record - so we have to use NOT 'exists' to check
            # for None.
            query.append(
                Q('term', **{'promoted.application_id': app})
                | ~Q('exists', field='promoted.application_id'))

        return query
Пример #2
0
class AddonPromotedQueryParam(AddonQueryMultiParam):
    query_param = 'promoted'
    reverse_dict = PROMOTED_API_NAME_TO_IDS
    valid_values = PROMOTED_API_NAME_TO_IDS.values()

    def get_values(self):
        values = super().get_values()
        # The values are lists of ids so flatten into a single list
        return list({y for x in values for y in x})

    def get_app(self):
        return (AddonAppQueryParam(self.query_data).get_value()
                if AddonAppQueryParam.query_param in self.query_data else None)

    def get_es_query(self):
        query = [Q(self.operator, **{'promoted.group_id': self.get_values()})]

        if app := self.get_app():
            query.append(Q('term', **{'promoted.approved_for_apps': app}))

        return query