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