"""
Mixins.
"""
from ..constants import (
SEPARATOR_LOOKUP_NAME,
SEPARATOR_LOOKUP_FILTER,
SEPARATOR_LOOKUP_COMPLEX_VALUE,
SEPARATOR_LOOKUP_COMPLEX_MULTIPLE_VALUE,
)
__title__ = 'django_elasticsearch_dsl_drf.filter_backends.mixins'
__author__ = 'Artur Barseghyan <artur.barseghyan@gmail.com>'
__copyright__ = '2017-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('FilterBackendMixin',)
[docs]class FilterBackendMixin(object):
"""Filter backend mixin."""
[docs] @classmethod
def split_lookup_name(cls, value, maxsplit=-1):
"""Split lookup value.
:param value: Value to split.
:param maxsplit: The `maxsplit` option of `string.split`.
:type value: str
:type maxsplit: int
:return: Lookup value split into a list.
:rtype: list
"""
return value.split(SEPARATOR_LOOKUP_NAME, maxsplit)
[docs] @classmethod
def split_lookup_filter(cls, value, maxsplit=-1):
"""Split lookup filter.
:param value: Value to split.
:param maxsplit: The `maxsplit` option of `string.split`.
:type value: str
:type maxsplit: int
:return: Lookup filter split into a list.
:rtype: list
"""
return value.split(SEPARATOR_LOOKUP_FILTER, maxsplit)
[docs] @classmethod
def split_lookup_complex_value(cls, value, maxsplit=-1):
"""Split lookup complex value.
:param value: Value to split.
:param maxsplit: The `maxsplit` option of `string.split`.
:type value: str
:type maxsplit: int
:return: Lookup filter split into a list.
:rtype: list
"""
return value.split(SEPARATOR_LOOKUP_COMPLEX_VALUE, maxsplit)
[docs] @classmethod
def split_lookup_complex_multiple_value(cls, value, maxsplit=-1):
"""Split lookup complex multiple value.
:param value: Value to split.
:param maxsplit: The `maxsplit` option of `string.split`.
:type value: str
:type maxsplit: int
:return: Lookup filter split into a list.
:rtype: list
"""
return value.split(SEPARATOR_LOOKUP_COMPLEX_MULTIPLE_VALUE, maxsplit)
[docs] @classmethod
def apply_filter(cls, queryset, options=None, args=None, kwargs=None):
"""Apply filter.
:param queryset:
:param options:
:param args:
:param kwargs:
:return:
"""
if args is None:
args = []
if kwargs is None:
kwargs = {}
return queryset.filter(*args, **kwargs)
[docs] @classmethod
def apply_query(cls, queryset, options=None, args=None, kwargs=None):
"""Apply query.
:param queryset:
:param options:
:param args:
:param kwargs:
:return:
"""
if args is None:
args = []
if kwargs is None:
kwargs = {}
return queryset.query(*args, **kwargs)