Improving timeline API performance
parent
b75937942d
commit
19f6f7f2b1
|
@ -76,15 +76,23 @@ class TimelineViewSet(ReadOnlyListViewSet):
|
||||||
qs = self.get_timeline(obj)
|
qs = self.get_timeline(obj)
|
||||||
|
|
||||||
if request.GET.get("only_relevant", None) is not None:
|
if request.GET.get("only_relevant", None) is not None:
|
||||||
qs = qs.exclude(event_type="issues.issue.change", data__at_values_diff="{}")
|
qs = qs.extra(where=[
|
||||||
qs = qs.exclude(event_type="tasks.task.change", data__at_values_diff="{}")
|
"""
|
||||||
qs = qs.exclude(event_type="userstories.userstory.change", data__at_values_diff="{}")
|
NOT(
|
||||||
qs = qs.exclude(event_type="wiki.wikipage.change", data__at_values_diff="{}")
|
data::text LIKE '%%\"values_diff\": {}%%'
|
||||||
qs = qs.exclude(event_type="issues.issue.delete")
|
AND
|
||||||
qs = qs.exclude(event_type="tasks.task.delete")
|
event_type::text = ANY('{issues.issue.change,
|
||||||
qs = qs.exclude(event_type="userstories.userstory.delete")
|
tasks.task.change,
|
||||||
qs = qs.exclude(event_type="wiki.wikipage.delete")
|
userstories.userstory.change,
|
||||||
qs = qs.exclude(event_type="projects.project.change")
|
wiki.wikipage.change}'::text[])
|
||||||
|
)
|
||||||
|
"""])
|
||||||
|
|
||||||
|
qs = qs.exclude(event_type__in=["issues.issue.delete",
|
||||||
|
"tasks.task.delete",
|
||||||
|
"userstories.userstory.delete",
|
||||||
|
"wiki.wikipage.delete",
|
||||||
|
"projects.project.change"])
|
||||||
|
|
||||||
return self.response_for_queryset(qs)
|
return self.response_for_queryset(qs)
|
||||||
|
|
||||||
|
|
|
@ -130,10 +130,9 @@ def filter_timeline_for_user(timeline, user):
|
||||||
# Filtering private projects where user is member
|
# Filtering private projects where user is member
|
||||||
if not user.is_anonymous():
|
if not user.is_anonymous():
|
||||||
for membership in user.cached_memberships:
|
for membership in user.cached_memberships:
|
||||||
for content_type_key, content_type in content_types.items():
|
data_content_types = list(filter(None, [content_types.get(a, None) for a in membership.role.permissions]))
|
||||||
if content_type_key in membership.role.permissions or membership.is_owner:
|
data_content_types.append(membership_content_type)
|
||||||
tl_filter |= Q(project=membership.project, data_content_type=content_type)
|
tl_filter |= Q(project=membership.project, data_content_type__in=data_content_types)
|
||||||
tl_filter |= Q(project=membership.project, data_content_type=membership_content_type)
|
|
||||||
|
|
||||||
timeline = timeline.filter(tl_filter)
|
timeline = timeline.filter(tl_filter)
|
||||||
return timeline
|
return timeline
|
||||||
|
|
Loading…
Reference in New Issue