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"""
from collections import OrderedDict
from django_filters import CharFilter
from elasticsearch_dsl import Q
from graphene import String
class StringFilterES(object): # pylint: disable=R0902
"""String Fields specific to ElasticSearch."""
default_expr = 'contain'
filter_class = CharFilter
variants = {
"contain": lambda name, value: Q('match',
**{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"
self.field_name = name or attr.replace('.', '_')
self.argument = String().Argument()
self.fields = self.generate_fields()
def generate_fields(self):
@ -40,6 +39,6 @@ class StringFilterES(object): # pylint: disable=R0902
for variant in self.variants:
variant_name = self.field_name if variant in ["default", self.default_expr] \
else "%s_%s" % (self.field_name, variant)
fields[variant_name] = self.filter_class(field_name=variant_name)
fields[variant_name] = self.argument
return fields

View File

@ -1,4 +1,5 @@
import six
from graphene import Argument
from .filterset import custom_filterset_factory, setup_filterset
@ -12,8 +13,13 @@ def get_filtering_args_from_filterset(filterset_class, type):
args = {}
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
return args