Skip to content
This repository has been archived by the owner on Apr 25, 2023. It is now read-only.

Commit

Permalink
Merge pull request #730 from alonisser/master
Browse files Browse the repository at this point in the history
minor fix for mistaking in members links optimizations
  • Loading branch information
alonisser authored Oct 1, 2016
2 parents 9290f17 + 506ce12 commit 399d145
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 17 deletions.
14 changes: 10 additions & 4 deletions committees/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ def annotations(self):
"%s.committee_id=%%s" % meeting_tn],
params=[self.id]).distinct()

def members_by_presence(self, ids=None, from_date=None):
def members_by_presence(self, ids=None, from_date=None, current_only=False):
"""Return the members with computed presence percentage.
If ids is not provided, this will return committee members. if ids is
provided, this will return presence data for the given members.
Expand All @@ -131,9 +131,15 @@ def filter_this_year(res_set):
if ids is not None:
members = list(Member.objects.filter(id__in=ids))
else:
members = list((self.members.filter(is_current=True) |
self.chairpersons.filter(is_current=True) |
self.replacements.filter(is_current=True)).distinct())
if current_only:
members = list((self.members.filter(is_current=True) |
self.chairpersons.filter(is_current=True) |
self.replacements.filter(is_current=True)).distinct())
else:
# What we actually would like to have is only member, active **during** that period
members = list((self.members.all() |
self.chairpersons.all() |
self.replacements.all()).distinct())

d = Knesset.objects.current_knesset().start_date if from_date is None else from_date
meetings_with_mks = self.meetings.filter(
Expand Down
14 changes: 7 additions & 7 deletions committees/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,13 +96,13 @@ def get_context_data(self, *args, **kwargs):
def _build_context_data(self, cached_context, cm):
cached_context['chairpersons'] = cm.chairpersons.all()
cached_context['replacements'] = cm.replacements.all()
members = cm.members_by_presence()
links = Link.objects.for_model(Member).values()
members = cm.members_by_presence(current_only=True)
links = list(Link.objects.for_model(Member))
links_by_member = {}
for k, g in itertools.groupby(links, lambda x: x['object_pk']):
for k, g in itertools.groupby(links, lambda x: x.object_pk):
links_by_member[str(k)] = list(g)
for member in members:
member.links = links_by_member.get(str(member.pk), [])
member.cached_links = links_by_member.get(str(member.pk), [])
cached_context['members'] = members
recent_meetings, more_meetings_available = cm.recent_meetings(limit=self.SEE_ALL_THRESHOLD)
cached_context['meetings_list'] = recent_meetings
Expand Down Expand Up @@ -208,12 +208,12 @@ def get_context_data(self, *args, **kwargs):
members = cm.committee.members_by_presence(ids=meeting_members_ids)

context['hide_member_presence'] = False
links = Link.objects.for_model(Member).values()
links = list(Link.objects.for_model(Member))
links_by_member = {}
for k, g in itertools.groupby(links, lambda x: x['object_pk']):
for k, g in itertools.groupby(links, lambda x: x.object_pk):
links_by_member[str(k)] = list(g)
for member in members:
member.links = links_by_member.get(str(member.pk), [])
member.cached_links = links_by_member.get(str(member.pk), [])
context['members'] = members

meeting_text = [cm.topics] + [part.body for part in cm.parts.all()]
Expand Down
7 changes: 7 additions & 0 deletions knesset/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,13 @@

TEST_RUNNER = 'knesset.common_test_runner.KnessetTestRunner'

DEVSERVER_MODULES = (
# 'devserver.modules.sql.SQLRealTimeModule',
'devserver.modules.sql.SQLSummaryModule',
'devserver.modules.profile.ProfileSummaryModule',
# 'devserver.modules.profile.MemoryUseModule'
)

try:
from local_settings import *
except ImportError:
Expand Down
13 changes: 11 additions & 2 deletions laws/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

import difflib
import logging

import itertools
import tagging
import voting
from actstream import action
Expand All @@ -23,7 +25,7 @@
from django.db.models import Q
from tagging.models import Tag, TaggedItem

from agendas.models import Agenda, UserSuggestedVote
from agendas.models import Agenda, UserSuggestedVote, Link
from laws.vote_choices import BILL_STAGE_CHOICES
from ok_tag.views import BaseTagMemberListView
from auxiliary.mixins import CsvView
Expand Down Expand Up @@ -360,7 +362,14 @@ def get_context_data(self, *args, **kwargs):
userprofile = None

# compute data for user votes on this bill
context['proposers'] = bill.proposers.select_related('current_party')
proposers = bill.proposers.select_related('current_party')
links = list(Link.objects.for_model(Member))
links_by_member = {}
for k, g in itertools.groupby(links, lambda x: x.object_pk):
links_by_member[str(k)] = list(g)
for proposer in proposers:
proposer.cached_links = links_by_member.get(str(proposer.pk), [])
context['proposers'] = proposers
votes = voting.models.Vote.objects.get_object_votes(bill)
if 1 not in votes: votes[1] = 0
if -1 not in votes: votes[-1] = 0
Expand Down
8 changes: 4 additions & 4 deletions links/templatetags/links_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@

@register.inclusion_tag('links/_object_links.html')
def object_links(obj):
if hasattr(obj, 'links'):
obj_links = obj.links
if hasattr(obj, 'cached_links'):
obj_links = obj.cached_links
else:
obj_links = Link.objects.for_model(obj)
return {'links': obj_links, 'MEDIA_URL': settings.MEDIA_URL}
Expand All @@ -21,8 +21,8 @@ def object_icon_links(obj):
key = "%s.%s.%s" % (obj._meta.app_label, obj._meta.module_name, obj.pk)
obj_links = cache.get(key, None) # look in the cache first
if obj_links is None: # if not found in cache
if hasattr(obj, 'links'):
obj_links = obj.links
if hasattr(obj, 'cached_links'):
obj_links = obj.cached_links
else:
obj_links = Link.objects.for_model(obj) # get it from db
cache.set(key, obj_links, settings.LONG_CACHE_TIME) # and save to cache
Expand Down

0 comments on commit 399d145

Please sign in to comment.