mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-07-13 17:52:19 +03:00
create a ProcessorFactory
This commit is contained in:
parent
fa0de7b334
commit
3778806bae
|
@ -1,6 +1,6 @@
|
||||||
"""Filters to ElasticSearch"""
|
"""Filters to ElasticSearch"""
|
||||||
from graphene import String, Boolean, Int
|
from graphene import String, Boolean, Int
|
||||||
from graphene_django.elasticsearch.filter.processors import PROCESSORS
|
from graphene_django.elasticsearch.filter.processors import ProcessorFactory
|
||||||
|
|
||||||
|
|
||||||
class FilterES(object):
|
class FilterES(object):
|
||||||
|
@ -31,26 +31,14 @@ class FilterES(object):
|
||||||
self.processor = None
|
self.processor = None
|
||||||
if self.lookup_expressions:
|
if self.lookup_expressions:
|
||||||
for variant in self.lookup_expressions:
|
for variant in self.lookup_expressions:
|
||||||
if variant in PROCESSORS:
|
self.processor = ProcessorFactory.make_processor(variant, self, self.processor)
|
||||||
self.processor = self.build_processor(variant)
|
|
||||||
else:
|
|
||||||
raise ValueError('We do not have processor: %s.' % variant)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.processor = self.build_processor(self.default_processor)
|
self.processor = ProcessorFactory.make_processor(self.default_processor, self, self.processor)
|
||||||
|
|
||||||
self.argument = argument or self.default_argument
|
self.argument = argument or self.default_argument
|
||||||
self.fields = self.processor.generate_field()
|
self.fields = self.processor.generate_field()
|
||||||
|
|
||||||
def build_processor(self, variant):
|
|
||||||
"""
|
|
||||||
Create a new processor based on the name
|
|
||||||
:param variant: Processor name
|
|
||||||
:return: Returns a Processor instance
|
|
||||||
"""
|
|
||||||
processor_class = PROCESSORS[variant]
|
|
||||||
return processor_class(self, self.processor)
|
|
||||||
|
|
||||||
def attach_processor(self, observer):
|
def attach_processor(self, observer):
|
||||||
"""
|
"""
|
||||||
Generating a query based on the arguments passed to graphene field
|
Generating a query based on the arguments passed to graphene field
|
||||||
|
|
|
@ -234,14 +234,31 @@ class GteProcessor(Processor):
|
||||||
return Q("range", **{name: {'gte': value}})
|
return Q("range", **{name: {'gte': value}})
|
||||||
|
|
||||||
|
|
||||||
PROCESSORS = {
|
class ProcessorFactory(object):
|
||||||
"contains": ContainsProcessor,
|
processors = {
|
||||||
"term": TermProcessor,
|
"contains": ContainsProcessor,
|
||||||
"regex": RegexProcessor,
|
"term": TermProcessor,
|
||||||
"phrase": PhraseProcessor,
|
"regex": RegexProcessor,
|
||||||
"prefix": PrefixProcessor,
|
"phrase": PhraseProcessor,
|
||||||
"in": InProcessor,
|
"prefix": PrefixProcessor,
|
||||||
"exits": ExitsProcessor,
|
"in": InProcessor,
|
||||||
"lte": LteProcessor,
|
"exits": ExitsProcessor,
|
||||||
"gte": GteProcessor,
|
"lte": LteProcessor,
|
||||||
}
|
"gte": GteProcessor,
|
||||||
|
}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def make_processor(cls, variant, filter_es, parent_processor):
|
||||||
|
"""
|
||||||
|
Create a new processor based on the name
|
||||||
|
:param variant: Processor name
|
||||||
|
:param filter_es: Target filter
|
||||||
|
:param parent_processor: Parent in the chain
|
||||||
|
:return: Returns a Processor instance
|
||||||
|
"""
|
||||||
|
if variant in cls.processors:
|
||||||
|
processor_class = cls.processors[variant]
|
||||||
|
return processor_class(filter_es, parent_processor)
|
||||||
|
|
||||||
|
else:
|
||||||
|
raise ValueError('We do not have processor: %s.' % variant)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user