Skip to content

Commit

Permalink
#142: Remove duplicated constructor for DB filters
Browse files Browse the repository at this point in the history
  • Loading branch information
MRichards99 committed Jul 31, 2020
1 parent 8ac7efc commit b6224db
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 34 deletions.
39 changes: 5 additions & 34 deletions common/database/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,8 @@
IncludeFilter

class DatabaseWhereFilter(WhereFilter):
precedence = 1

def __init__(self, field, value, operation):
self.field = field
self.included_field = None
self.included_included_field = None
self._set_filter_fields()
self.value = value
self.operation = operation

def _set_filter_fields(self):
if self.field.count(".") == 1:
self.included_field = self.field.split(".")[1]
self.field = self.field.split(".")[0]

if self.field.count(".") == 2:
self.included_included_field = self.field.split(".")[2]
self.included_field = self.field.split(".")[1]
self.field = self.field.split(".")[0]
super().__init__(field, value, operation)

def apply_filter(self, query):
try:
Expand Down Expand Up @@ -58,11 +41,8 @@ def apply_filter(self, query):


class DatabaseDistinctFieldFilter(DistinctFieldFilter):
precedence = 0

def __init__(self, fields):
# This allows single string distinct filters
self.fields = fields if type(fields) is list else [fields]
super().__init__(fields)

def apply_filter(self, query):
query.is_distinct_fields_query = True
Expand All @@ -75,11 +55,8 @@ def apply_filter(self, query):


class DatabaseOrderFilter(OrderFilter):
precedence = 2

def __init__(self, field, direction):
self.field = field
self.direction = direction
super().__init__(field, direction)

def apply_filter(self, query):
if self.direction.upper() == "ASC":
Expand All @@ -93,18 +70,14 @@ def apply_filter(self, query):


class DatabaseSkipFilter(SkipFilter):
precedence = 3

def __init__(self, skip_value):
self.skip_value = skip_value
super().__init__(skip_value)

def apply_filter(self, query):
query.base_query = query.base_query.offset(self.skip_value)


class DatabaseLimitFilter(LimitFilter):
precedence = 4

def __init__(self, limit_value):
self.limit_value = limit_value

Expand All @@ -113,10 +86,8 @@ def apply_filter(self, query):


class DatabaseIncludeFilter(IncludeFilter):
precedence = 5

def __init__(self, included_filters):
self.included_filters = included_filters["include"]
super().__init__(included_filters)

def apply_filter(self, query):
if not query.include_related_entities:
Expand Down
6 changes: 6 additions & 0 deletions common/database/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,12 @@ class QueryFilterFactory(object):
def get_query_filter(filter):
"""
Given a filter return a matching Query filter object
This factory is not in common.filters so the created filter can be for the correct backend.
Moving the factory into that file would mean the filters would be based off the abstract
classes (because they're in the same file) which won't enable filters to be unique to the
backend
:param filter: dict - The filter to create the QueryFilter for
:return: The QueryFilter object created
"""
Expand Down

0 comments on commit b6224db

Please sign in to comment.