Source code for graphene_elastic.filter_backends.score.common

import graphene
from graphene import Float

from ..base import BaseBackend

__author__ = 'Artur Barseghyan <artur.barseghyan@gmail.com>'
__copyright__ = '2019-2022 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = (
    'ScoreFilterBackend',
)


def score_resolver(parent, args, context=None, info=None):
    """Score resolver.

    :param parent:
    :param args:
    :param context:
    :param info:
    :return:
    """
    return parent.meta._d_.get('score')


class ScoreField(Float):
    """Score field."""


[docs]class ScoreFilterBackend(BaseBackend): """Score filter backend. Sample query would be: query { allPostDocuments( search:{content:{value:"since"}, title:{value:"decide"}} ) { edges { node { title content score } cursor } } } """ prefix = 'score' has_query_fields = False score_field_name = 'score' @property def score_fields(self): """Score filter fields.""" return {self.score_field_name: '_score'}
[docs] def field_belongs_to(self, field_name): """Check if given filter field belongs to the backend. :param field_name: :return: """ return field_name in self.score_fields
[docs] def filter(self, queryset): """Filter. :param queryset: :return: """ return queryset
[docs] def get_backend_document_fields(self): return { self.score_field_name: graphene.Field( ScoreField, resolver=score_resolver ), }