code refactor

stable
Héctor Fernández Cascallar 2019-01-17 17:02:26 +01:00 committed by Alex Hermida
parent 2bdd652ea7
commit e736846562
1 changed files with 35 additions and 64 deletions

View File

@ -401,11 +401,7 @@ class BaseRelatedFieldsFilter(FilterBackend):
return list(values)
def _get_queryparams(self, params, mode=''):
if mode == 'exclude':
param_name = self.exclude_param_name
else:
param_name = self.param_name or self.filter_name
param_name = self.exclude_param_name if mode == 'exclude' else self.param_name or self.filter_name
raw_value = params.get(param_name, None)
if raw_value:
value = self._prepare_filter_data(raw_value)
@ -415,27 +411,20 @@ class BaseRelatedFieldsFilter(FilterBackend):
qs_isnull_kwargs = {"{}__isnull".format(self.filter_name): True}
return Q(**qs_in_kwargs) | Q(**qs_isnull_kwargs)
else:
return {"{}__in".format(self.filter_name): value}
return Q(**{"{}__in".format(self.filter_name): value})
return None
def filter_queryset(self, request, queryset, view):
query = self._get_queryparams(request.QUERY_PARAMS)
exclude_query = None
if self.exclude_param_name:
exclude_query = self._get_queryparams(request.QUERY_PARAMS, mode='exclude')
operations = {
"filter": queryset.filter,
"exclude": queryset.exclude,
}
if query:
if isinstance(query, dict):
queryset = queryset.filter(**query)
else:
queryset = queryset.filter(query)
if exclude_query:
if isinstance(exclude_query, dict):
queryset = queryset.exclude(**exclude_query)
else:
queryset = queryset.exclude(exclude_query)
for mode, qs_method in operations.items():
query = self._get_queryparams(request.QUERY_PARAMS, mode=mode)
if query:
queryset = qs_method(query)
return super().filter_queryset(request, queryset, view)
@ -455,11 +444,7 @@ class AssignedUsersFilter(FilterModelAssignedUsers, BaseRelatedFieldsFilter):
exclude_param_name = 'exclude_assigned_users'
def _get_queryparams(self, params, mode=''):
if mode == 'exclude':
param_name = self.exclude_param_name
else:
param_name = self.param_name or self.filter_name
param_name = self.exclude_param_name if mode == 'exclude' else self.param_name or self.filter_name
raw_value = params.get(param_name, None)
if raw_value:
value = self._prepare_filter_data(raw_value)
@ -487,7 +472,6 @@ class StatusesFilter(BaseRelatedFieldsFilter):
exclude_param_name = 'exclude_status'
class IssueTypesFilter(BaseRelatedFieldsFilter):
filter_name = 'type'
param_name = 'type'
@ -516,10 +500,8 @@ class TagsFilter(FilterBackend):
self.exclude_param_name = exclude_param_name
def _get_tags_queryparams(self, params, mode=''):
if mode == 'exclude':
tags = params.get(self.exclude_param_name, None)
else:
tags = params.get(self.filter_name, None)
param_name = self.exclude_param_name if mode == "exclude" else self.filter_name
tags = params.get(param_name, None)
if tags:
return tags.split(",")
@ -527,14 +509,15 @@ class TagsFilter(FilterBackend):
return None
def filter_queryset(self, request, queryset, view):
query_tags = self._get_tags_queryparams(request.QUERY_PARAMS)
exclude_query_tags = self._get_tags_queryparams(request.QUERY_PARAMS, mode='exclude')
operations = {
"filter": queryset.filter,
"exclude": queryset.exclude,
}
if query_tags:
queryset = queryset.filter(tags__contains=query_tags)
if exclude_query_tags:
queryset = queryset.exclude(tags__contains=exclude_query_tags)
for mode, qs_method in operations.items():
query = self._get_tags_queryparams(request.QUERY_PARAMS, mode=mode)
if query:
queryset = qs_method(tags__contains=query)
return super().filter_queryset(request, queryset, view)
@ -677,25 +660,18 @@ class RoleFilter(BaseRelatedFieldsFilter):
def filter_queryset(self, request, queryset, view):
Membership = apps.get_model('projects', 'Membership')
query = self._get_queryparams(request.QUERY_PARAMS)
exclude_query = self._get_queryparams(request.QUERY_PARAMS, mode='exclude')
if query:
if isinstance(query, dict):
memberships = Membership.objects.filter(**query).values_list("user_id", flat=True)
queryset = queryset.filter(assigned_to__in=memberships)
else:
operations = {
"filter": queryset.filter,
"exclude": queryset.exclude,
}
for mode, qs_method in operations.items():
query = self._get_queryparams(request.QUERY_PARAMS, mode=mode)
if query:
memberships = Membership.objects.filter(query).values_list("user_id", flat=True)
if memberships:
queryset = queryset.filter(assigned_to__in=memberships)
if exclude_query:
if isinstance(exclude_query, dict):
memberships = Membership.objects.filter(**exclude_query).values_list("user_id", flat=True)
else:
memberships = Membership.objects.filter(exclude_query).values_list("user_id", flat=True)
if memberships:
queryset = queryset.exclude(assigned_to__in=memberships)
if memberships:
queryset = qs_method(assigned_to__in=memberships)
return FilterBackend.filter_queryset(self, request, queryset, view)
@ -715,15 +691,10 @@ class UserStoriesRoleFilter(FilterModelAssignedUsers, BaseRelatedFieldsFilter):
for mode, qs_method in operations.items():
query = self._get_queryparams(request.QUERY_PARAMS, mode=mode)
if not query:
continue
if isinstance(query, dict):
memberships = Membership.objects.filter(**query).values_list("user_id", flat=True)
else:
if query:
memberships = Membership.objects.filter(query).values_list("user_id", flat=True)
if memberships:
user_story_model = apps.get_model("userstories", "UserStory")
queryset = qs_method(self.get_assigned_users_filter(user_story_model, memberships))
if memberships:
user_story_model = apps.get_model("userstories", "UserStory")
queryset = qs_method(self.get_assigned_users_filter(user_story_model, memberships))
return FilterBackend.filter_queryset(self, request, queryset, view)