Skip to content

Commit cbec6d4

Browse files
committed
Feedbacks | Events | fixing queryset to use single criteria
1 parent e56afa2 commit cbec6d4

File tree

2 files changed

+32
-15
lines changed

2 files changed

+32
-15
lines changed

core/common/mixins.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -508,12 +508,8 @@ def sources_url(self):
508508
def collections_url(self):
509509
return self.uri + 'collections/'
510510

511-
def get_repo_events(self, private=False):
512-
def get_events_for(entity):
513-
return entity.events.filter(public=True) if private else entity.events
514-
515-
queryset = self.__class__.objects.none()
516-
511+
def get_repo_events_criteria(self, private=False):
512+
criteria = None
517513
sources = self.source_set.filter(is_active=True)
518514
collections = self.collection_set.filter(is_active=True)
519515

@@ -522,11 +518,25 @@ def get_events_for(entity):
522518
collections = self.collection_set.filter(public_access__in=[ACCESS_TYPE_VIEW, ACCESS_TYPE_EDIT])
523519

524520
for source in sources:
525-
queryset = queryset.union(get_events_for(source))
521+
if criteria is None:
522+
criteria = Q(referenced_object_url=source.uri)
523+
else:
524+
criteria |= Q(referenced_object_url=source.uri)
526525
for collection in collections:
527-
queryset = queryset.union(get_events_for(collection))
526+
if criteria is None:
527+
criteria = Q(referenced_object_url=collection.uri)
528+
else:
529+
criteria |= Q(referenced_object_url=collection.uri)
528530

529-
return queryset
531+
return criteria
532+
533+
def get_repo_events(self, private=False):
534+
from core.events.models import Event
535+
criteria = self.get_repo_events_criteria(private)
536+
if criteria is None:
537+
return Event.objects.none()
538+
queryset = Event.objects.filter(criteria)
539+
return queryset if private else queryset.filter(public=True)
530540

531541

532542
class SourceChildMixin(ChecksumModel):

core/events/models.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,20 @@ def get_events_for_following(cls, following_queryset, private=False, **event_kwa
4747

4848
@classmethod
4949
def get_user_organization_events(cls, user, private=False):
50-
queryset = cls.objects.none()
50+
criterion = None
5151
for org in user.organizations.filter():
52-
queryset = queryset.union(
53-
org.events.filter(public=True) if private else org.events
54-
).union(org.get_repo_events(private))
55-
56-
return queryset
52+
criteria = Event.object_criteria(org.uri)
53+
repo_events_criteria = org.get_repo_events_criteria(private)
54+
if repo_events_criteria is not None:
55+
criteria |= repo_events_criteria
56+
if criterion is None:
57+
criterion = criteria
58+
else:
59+
criterion |= criteria
60+
61+
queryset = Event.objects.filter(criterion)
62+
63+
return queryset if private else queryset.filter(public=True)
5764

5865
@classmethod
5966
def get_user_all_events(cls, user, private=False):

0 commit comments

Comments
 (0)