changing django_filters types in the ES filters by graphene types

This commit is contained in:
Alejandro Nunez Capote 2019-05-31 22:43:08 -04:00
parent fc186ea23d
commit 5b4d8144ee
2 changed files with 11 additions and 6 deletions

View File

@ -1,15 +1,13 @@
"""Filters to ElasticSearch""" """Filters to ElasticSearch"""
from collections import OrderedDict from collections import OrderedDict
from django_filters import CharFilter
from elasticsearch_dsl import Q from elasticsearch_dsl import Q
from graphene import String
class StringFilterES(object): # pylint: disable=R0902 class StringFilterES(object): # pylint: disable=R0902
"""String Fields specific to ElasticSearch.""" """String Fields specific to ElasticSearch."""
default_expr = 'contain' default_expr = 'contain'
filter_class = CharFilter
variants = { variants = {
"contain": lambda name, value: Q('match', "contain": lambda name, value: Q('match',
**{name: { **{name: {
@ -27,6 +25,7 @@ class StringFilterES(object): # pylint: disable=R0902
""" """
assert name or attr, "At least the field name or the field attr should be passed" assert name or attr, "At least the field name or the field attr should be passed"
self.field_name = name or attr.replace('.', '_') self.field_name = name or attr.replace('.', '_')
self.argument = String().Argument()
self.fields = self.generate_fields() self.fields = self.generate_fields()
def generate_fields(self): def generate_fields(self):
@ -40,6 +39,6 @@ class StringFilterES(object): # pylint: disable=R0902
for variant in self.variants: for variant in self.variants:
variant_name = self.field_name if variant in ["default", self.default_expr] \ variant_name = self.field_name if variant in ["default", self.default_expr] \
else "%s_%s" % (self.field_name, variant) else "%s_%s" % (self.field_name, variant)
fields[variant_name] = self.filter_class(field_name=variant_name) fields[variant_name] = self.argument
return fields return fields

View File

@ -1,4 +1,5 @@
import six import six
from graphene import Argument
from .filterset import custom_filterset_factory, setup_filterset from .filterset import custom_filterset_factory, setup_filterset
@ -12,8 +13,13 @@ def get_filtering_args_from_filterset(filterset_class, type):
args = {} args = {}
for name, filter_field in six.iteritems(filterset_class.base_filters): for name, filter_field in six.iteritems(filterset_class.base_filters):
field_type = convert_form_field(filter_field.field).Argument()
field_type.description = filter_field.label if not isinstance(filter_field, Argument):
field_type = convert_form_field(filter_field.field).Argument()
field_type.description = filter_field.label
else:
field_type = filter_field
args[name] = field_type args[name] = field_type
return args return args