コード例 #1
0
 def _getVideosToDownload(self):
     ret = []
     object_type = ContentType.objects.get_for_model(Committee)
     videos = Video.objects.filter(content_type__pk=object_type.id, group="mms").order_by("id")
     for video in videos:
         qs = get_videos_queryset(video, group="youtube_upload", ignoreHide=True)
         if qs.count() == 0:
             ret.append(video)
     return ret
コード例 #2
0
 def _getVideosToDownload(self):
     ret=[]
     object_type=ContentType.objects.get_for_model(Committee)
     videos=Video.objects.filter(content_type__pk=object_type.id,group='mms').order_by('id')
     for video in videos:
         qs=get_videos_queryset(video,group='youtube_upload',ignoreHide=True)
         if qs.count()==0:
             ret.append(video)
     return ret
コード例 #3
0
class MemberResource(BaseResource):
    ''' The Parliament Member API '''
    class Meta(BaseResource.Meta):

        queryset = Member.objects.all().select_related('current_party')

        allowed_methods = ['get']
        ordering = [
            'name',
            'is_current',
            'bills_stats_proposed',
            'bills_stats_pre',
            'bills_stats_first',
            'bills_stats_approved',
        ]
        filtering = dict(
            name=ALL,
            is_current=ALL,
        )
        excludes = ['website', 'backlinks_enabled', 'area_of_residence']
        list_fields = ['name', 'id', 'img_url']
        include_absolute_url = True

    party_name = fields.CharField()
    party_url = fields.CharField()

    videos = fields.ToManyField(VideoResource,
                                attribute=lambda b: get_videos_queryset(b.obj),
                                null=True)
    links = fields.ToManyField(
        LinkResource,
        attribute=lambda b: Link.objects.for_model(b.obj),
        full=True,
        null=True)
    bills_uri = fields.CharField()
    agendas_uri = fields.CharField()

    def dehydrate_bills_uri(self, bundle):
        return '%s?%s' % (reverse(
            'api_dispatch_list',
            kwargs={
                'resource_name': 'bill',
                'api_name': 'v2',
            }), urllib.urlencode(dict(proposer=bundle.obj.id)))

    def dehydrate_gender(self, bundle):
        return bundle.obj.get_gender_display()

    def dehydrate_agendas_uri(self, bundle):
        return reverse('api_dispatch_detail',
                       kwargs={
                           'resource_name': 'member-agendas',
                           'api_name': 'v2',
                           'pk': bundle.obj.id
                       })

    def dehydrate_party_name(self, bundle):
        return bundle.obj.current_party.name

    def dehydrate_party_url(self, bundle):
        return bundle.obj.current_party.get_absolute_url()

    fields.ToOneField(PartyResource, 'current_party', full=True)
コード例 #4
0
 def _hideMemberAboutVideos(self, member):
     videos = get_videos_queryset(member, group='about')
     for video in videos:
         video.hide = True
         video.save()
コード例 #5
0
ファイル: views.py プロジェクト: amitzini/Open-Knesset
    def get_context_data(self, **kwargs):
        context = super(MemberDetailView, self).get_context_data(**kwargs)
        member = context['object']
        d = Knesset.objects.current_knesset().start_date
        if self.request.user.is_authenticated():
            p = self.request.user.profiles.get()
            watched = member in p.members
            cached_context = None
        else:
            watched = False
            cached_context = cache.get('mk_%d' % member.id)

        if cached_context is None:
            presence = {}
            self.calc_percentile(member, presence,
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours_percentile')
            self.calc_percentile(member, presence,
                                 'average_monthly_committee_presence',
                                 'average_monthly_committee_presence',
                                 'average_monthly_committee_presence_percentile')

            bills_statistics = {}
            self.calc_bill_stats(member, bills_statistics, 'proposed')
            self.calc_bill_stats(member, bills_statistics, 'pre')
            self.calc_bill_stats(member, bills_statistics, 'first')
            self.calc_bill_stats(member, bills_statistics, 'approved')

            agendas = self.get_agenda_data(member)

            factional_discipline = VoteAction.objects.select_related(
                'vote').filter(member=member,
                               against_party=True,
                               vote__time__gt=d)

            votes_against_own_bills = VoteAction.objects.select_related(
                'vote').filter(member=member,
                               against_own_bill=True,
                               vote__time__gt=d)

            general_discipline_params = {'member': member, 'vote__time__gt': d}
            is_coalition = member.current_party.is_coalition
            if is_coalition:
                general_discipline_params['against_coalition'] = True
            else:
                general_discipline_params['against_opposition'] = True
            general_discipline = VoteAction.objects.filter(
                **general_discipline_params).select_related('vote')

            about_videos = get_videos_queryset(member, group='about')[:1]
            if len(about_videos):
                about_video = about_videos[0]
                about_video_embed_link = about_video.embed_link
                about_video_image_link = about_video.image_link
            else:
                about_video_embed_link = ''
                about_video_image_link = ''

            related_videos = get_videos_queryset(member, group='related')
            related_videos = related_videos.filter(
                Q(published__gt=date.today() - timedelta(days=30))
                | Q(sticky=True)
            ).order_by('sticky').order_by('-published')[:5]

            actions = actor_stream(member)

            for a in actions:
                a.actor = member

            legislation_actions = actor_stream(member).filter(
                verb__in=('proposed', 'joined'))

            # this ugly code groups all the committee actions according to plenum and committee
            # it stop iterating when both committee and plenum actions reach the maximum (MEMBER_INITIAL_DATA)
            # it also stops iterating when reaching 20 iterations
            committee_actions_more = {'committee': False, 'plenum': False}
            committee_actions = {'committee': [], 'plenum': []}
            i = 0
            for action in actor_stream(member).filter(verb='attended'):
                i = i + 1
                if i == 20:
                    break
                committee_type = (action and action.target and
                                  action.target.committee and
                                  action.target.committee.type)
                if committee_type in ['plenum', 'committee']:
                    if len(committee_actions[committee_type]) == self.MEMBER_INITIAL_DATA:
                        committee_actions_more[committee_type] = True
                        if committee_actions_more['plenum'] == True and committee_actions_more[
                            'committee'] == True:
                            break
                    else:
                        committee_actions[committee_type].append(action)

            committees_presence = []
            has_protocols_not_published = False
            committees = chain(member.committees.all(),
                               member.chaired_committees.all(),
                               )
            for committee in committees:
                committee_member = committee.members_by_presence(ids=[member.id])[0]
                committees_presence.append({"committee": committee,
                                            "presence": committee_member.meetings_percentage})
                if committee.protocol_not_published:
                    has_protocols_not_published = True

            committees_presence.sort(cmp=lambda x, y: y["presence"] - x["presence"])

            mmm_documents = member.mmm_documents.order_by('-publication_date')

            content_type = ContentType.objects.get_for_model(Member)
            num_followers = Follow.objects.filter(
                object_id=member.pk,
                content_type=content_type).count()

            protocol_part_annotation_actions = Action.objects.filter(
                actor_content_type=ContentType.objects.get_for_model(Person),
                actor_object_id__in=member.person.values_list('pk', flat=True),
                verb='got annotation for protocol part'
            )

            # since parties are prefetch_releated, will list and slice them
            previous_parties = list(member.parties.all())[1:]
            cached_context = {
                'watched_member': watched,
                'num_followers': num_followers,
                'actions_more': actions.count() > self.MEMBER_INITIAL_DATA,
                'actions': actions[:self.MEMBER_INITIAL_DATA],
                'legislation_actions_more': legislation_actions.count() > self.MEMBER_INITIAL_DATA,
                'legislation_actions': legislation_actions[:self.MEMBER_INITIAL_DATA],
                'committee_actions_more': committee_actions_more['committee'],
                'committee_actions': committee_actions['committee'],
                'plenum_actions_more': committee_actions_more['plenum'],
                'plenum_actions': committee_actions['plenum'],
                'mmm_documents_more': mmm_documents.count() > self.MEMBER_INITIAL_DATA,
                'mmm_documents': mmm_documents[:self.MEMBER_INITIAL_DATA],
                'bills_statistics': bills_statistics,
                'agendas': agendas,
                'presence': presence,
                'current_knesset_start_date': date(2009, 2, 24),
                'factional_discipline': factional_discipline,
                'votes_against_own_bills': votes_against_own_bills,
                'general_discipline': general_discipline,
                'about_video_embed_link': about_video_embed_link,
                'about_video_image_link': about_video_image_link,
                'related_videos': related_videos,
                'num_related_videos': related_videos.count(),
                'INITIAL_DATA': self.MEMBER_INITIAL_DATA,
                'previous_parties': previous_parties,
                'committees_presence': committees_presence,
                'protocol_part_annotation_actions': protocol_part_annotation_actions,
                'has_protocols_not_published': has_protocols_not_published,
            }

            if not self.request.user.is_authenticated():
                cache.set('mk_%d' % member.id, cached_context,
                          settings.LONG_CACHE_TIME)

        context.update(cached_context)
        return context
コード例 #6
0
 def _getVideos(self, getVideosQuerysetParams, filterParams):
     return get_videos_queryset(**getVideosQuerysetParams).filter(**filterParams)
コード例 #7
0
ファイル: views.py プロジェクト: pninaelias/Open-Knesset
    def get_context_data (self, **kwargs):
        context = super(MemberDetailView, self).get_context_data(**kwargs)
        member = context['object']
        verbs = None
        if 'verbs' in self.request.GET:
            verbs_form = VerbsForm(self.request.GET)
            if verbs_form.is_valid():
                verbs = verbs_form.cleaned_data['verbs']
        if verbs==None:
            verbs = ('proposed', 'posted')
            verbs_form = VerbsForm({'verbs': verbs})
        if self.request.user.is_authenticated():
            p = self.request.user.get_profile()
            watched = member in p.members
            cached_context = None
        else:
            watched = False
            cached_context = cache.get('mk_%d_%s' % (member.id,
                                                     '_'.join(verbs)))

        if cached_context is None:
            presence = {}
            self.calc_percentile(member, presence,
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours_percentile' )
            self.calc_percentile(member, presence,
                                 'average_monthly_committee_presence',
                                 'average_monthly_committee_presence',
                                 'average_monthly_committee_presence_percentile' )

            bills_statistics = {}
            self.calc_bill_stats(member,bills_statistics,'proposed')
            self.calc_bill_stats(member,bills_statistics,'pre')
            self.calc_bill_stats(member,bills_statistics,'first')
            self.calc_bill_stats(member,bills_statistics,'approved')

            bills_tags = Tag.objects.usage_for_queryset(member.bills.all(),counts=True)
            #bills_tags.sort(key=lambda x:x.count,reverse=True)
            bills_tags = calculate_cloud(bills_tags)

            if self.request.user.is_authenticated():
                agendas = Agenda.objects.get_selected_for_instance(member, user=self.request.user, top=3, bottom=3)
            else:
                agendas = Agenda.objects.get_selected_for_instance(member, user=None, top=3, bottom=3)
            agendas = agendas['top'] + agendas['bottom']
            for agenda in agendas:
                agenda.watched=False
            if self.request.user.is_authenticated():
                watched_agendas = self.request.user.get_profile().agendas
                for watched_agenda in watched_agendas:
                    if watched_agenda in agendas:
                        agendas[agendas.index(watched_agenda)].watched = True
                    else:
                        watched_agenda.score = watched_agenda.member_score(member)
                        watched_agenda.watched = True
                        agendas.append(watched_agenda)
            agendas.sort(key=attrgetter('score'), reverse=True)

            factional_discipline = VoteAction.objects.select_related(
                'vote').filter(member = member, against_party=True)

            votes_against_own_bills = VoteAction.objects.select_related(
                'vote').filter(member=member, against_own_bill=True)

            general_discipline_params = { 'member' : member }
            is_coalition = member.current_party.is_coalition
            if is_coalition:
                general_discipline_params['against_coalition'] = True
            else:
                general_discipline_params['against_opposition'] = True
            general_discipline = VoteAction.objects.filter(
                **general_discipline_params).select_related('vote')

            about_videos=get_videos_queryset(member,group='about')[:1]
            if len(about_videos):
                about_video=about_videos[0]
                about_video_embed_link=about_video.embed_link
                about_video_image_link=about_video.image_link
            else:
                about_video_embed_link=''
                about_video_image_link=''

            related_videos=get_videos_queryset(member,group='related')
            related_videos=related_videos.filter(
                Q(published__gt=date.today()-timedelta(days=30))
                | Q(sticky=True)
            ).order_by('sticky').order_by('-published')[:5]

            actions = actor_stream(member).filter(
                verb__in=verbs)
            for a in actions:
                a.actor = member
            cached_context = {'watched_member': watched,
                'actions':actions,
                'verbs_form': verbs_form,
                'bills_statistics':bills_statistics,
                'bills_tags':bills_tags,
                'agendas':agendas,
                'presence':presence,
                'factional_discipline':factional_discipline,
                'votes_against_own_bills':votes_against_own_bills,
                'general_discipline':general_discipline,
                'about_video_embed_link':about_video_embed_link,
                'about_video_image_link':about_video_image_link,
                'related_videos':related_videos,
                'num_related_videos':related_videos.count()
               }
            if not self.request.user.is_authenticated():
                cache.set('mk_%d_%s' % (member.id, '_'.join(verbs)),
                                        cached_context,
                                        settings.LONG_CACHE_TIME)
        context.update(cached_context)
        return context
コード例 #8
0
 def _isVideoAlreadyUploaded(self,video):
     qs=get_videos_queryset(video,group='youtube_upload',ignoreHide=True)
     return qs.count()>0
コード例 #9
0
class MemberResource(BaseResource):
    ''' The Parliament Member API '''
    class Meta(BaseResource.Meta):

        queryset = Member.objects.exclude(
            current_party__isnull=True).select_related('current_party')

        allowed_methods = ['get']
        ordering = [
            'name',
            'is_current',
            'bills_stats_proposed',
            'bills_stats_pre',
            'bills_stats_first',
            'bills_stats_approved',
        ]

        filtering = dict(
            name=ALL,
            is_current=ALL,
        )

        excludes = ['website', 'backlinks_enabled', 'area_of_residence']
        list_fields = ['name', 'id', 'img_url', 'is_current']
        include_absolute_url = True

    party_name = fields.CharField()
    party_url = fields.CharField()
    mmms_count = fields.IntegerField(null=True)
    votes_count = fields.IntegerField(null=True)
    video_about = fields.ToManyField(
        VideoResource,
        attribute=lambda b: get_videos_queryset(b.obj, group='about'),
        null=True,
        full=True)
    videos_related = fields.ToManyField(
        VideoResource,
        attribute=lambda b: get_videos_queryset(b.obj, group='related'),
        null=True)
    links = fields.ToManyField(
        LinkResource,
        attribute=lambda b: Link.objects.for_model(b.obj),
        full=True,
        null=True)
    bills_uri = fields.CharField()
    agendas_uri = fields.CharField()
    committees = fields.ListField()
    detailed_roles = fields.ToManyField(
        RoleResource,
        attribute=lambda b: Person.objects.get(mk=b.obj).roles.all(),
        full=True,
        null=True)
    fields.ToOneField(PartyResource, 'current_party', full=True)
    average_weekly_presence_rank = fields.IntegerField()

    def obj_get_list(self, bundle, **kwargs):
        simple = super(MemberResource, self).obj_get_list(bundle, **kwargs)

        if hasattr(bundle.request, 'GET'):
            # Grab a mutable copy.
            filters = bundle.request.GET.copy()

        # Update with the provided kwargs.
        filters.update(kwargs)
        name = filters.get('name')
        if name and not simple:
            try:
                return Member.objects.filter(person__aliases__name=name)
            except PersonAlias.DoesNotExist:
                return simple
        return simple

    def dehydrate_committees(self, bundle):
        temp_list = bundle.obj.committee_meetings.exclude(
            committee__type='plenum')
        temp_list = temp_list.values("committee", "committee__name").annotate(
            Count("id")).order_by('-id__count')[:5]
        return (map(
            lambda item:
            (item['committee__name'],
             reverse('committee-detail', args=[item['committee']])),
            temp_list))

    def dehydrate_bills_uri(self, bundle):
        return '%s?%s' % (reverse(
            'api_dispatch_list',
            kwargs={
                'resource_name': 'bill',
                'api_name': 'v2',
            }), urllib.urlencode(dict(proposer=bundle.obj.id)))

    def dehydrate_gender(self, bundle):
        return bundle.obj.get_gender_display()

    def dehydrate_agendas_uri(self, bundle):
        return reverse('api_dispatch_detail',
                       kwargs={
                           'resource_name': 'member-agendas',
                           'api_name': 'v2',
                           'pk': bundle.obj.id
                       })

    def dehydrate_party_name(self, bundle):
        party = bundle.obj.current_party
        return party.name if party else None

    def dehydrate_party_url(self, bundle):
        party = bundle.obj.current_party
        return party.get_absolute_url() if party else None

    def dehydrate_mmms_count(self, bundle):
        _cache_key = 'api_v2_member_mmms_' + str(bundle.obj.pk)
        count = cache.get(_cache_key)

        if count is None:
            count = bundle.obj.mmm_documents.count()
            cache.set(_cache_key, count, 24 * 3600)

        return count

    def dehydrate_votes_count(self, bundle):
        _cache_key = 'api_v2_member_votes_' + str(bundle.obj.pk)
        count = cache.get(_cache_key)

        if count is None:
            count = bundle.obj.votes.count()
            cache.set(_cache_key, count, 24 * 3600)

        return count

    def dehydrate_average_weekly_presence_rank(self, bundle):
        ''' Calculate the distribution of presence and place the user on a 5 level scale '''
        SCALE = 5
        member = bundle.obj

        rel_location = cache.get('average_presence_location_%d' % member.id)
        if not rel_location:

            presence_list = sorted(
                map(lambda member: member.average_weekly_presence_hours,
                    Member.objects.all()))
            presence_groups = int(math.ceil(len(presence_list) / float(SCALE)))

            # Generate cache for all members
            for mk in Member.objects.all():
                avg = mk.average_weekly_presence_hours
                if avg:
                    mk_location = 1 + (presence_list.index(avg) /
                                       presence_groups)
                else:
                    mk_location = 0

                cache.set('average_presence_location_%d' % mk.id, mk_location,
                          60 * 60 * 24)

                if mk.id == member.id:
                    rel_location = mk_location

        return rel_location

    def build_filters(self, filters=None):
        if filters is None:
            filters = {}

        try:
            knesset = int(filters.get('knesset', 0))
        except KeyError:
            knesset = 0

        orm_filters = super(MemberResource, self).build_filters(filters)

        if knesset:
            knesset = Knesset.objects.get(number=knesset)
            orm_filters['parties__knesset'] = knesset

        return orm_filters
コード例 #10
0
 def _getMemberExistingVideosCount(self,ignoreHide,member,source_id,source_type):
     qs=get_videos_queryset(member,ignoreHide=ignoreHide)
     qs=qs.filter(source_id=source_id,source_type=source_type)
     return qs.count()
コード例 #11
0
 def _isVideoAlreadyUploaded(self, video):
     qs = get_videos_queryset(video,
                              group='youtube_upload',
                              ignoreHide=True)
     return qs.count() > 0
コード例 #12
0
 def _getMemberExistingVideosCount(self, ignoreHide, member, source_id,
                                   source_type):
     qs = get_videos_queryset(member, ignoreHide=ignoreHide)
     qs = qs.filter(source_id=source_id, source_type=source_type)
     return qs.count()
コード例 #13
0
 def _isVideoExists(self, video):
     return get_videos_queryset(
         video['content_object'],
         ignoreHide=True).filter(source_id=video['source_id']).count() > 0
コード例 #14
0
 def _get_committee_num_mms_videos(self, comm, group, ignoreHide,
                                   embed_link):
     return get_videos_queryset(
         comm, group=group,
         ignoreHide=ignoreHide).filter(embed_link=embed_link).count()
コード例 #15
0
ファイル: views.py プロジェクト: tobyk100/Open-Knesset
    def get_context_data(self, **kwargs):
        context = super(MemberDetailView, self).get_context_data(**kwargs)
        member = context['object']
        d = Knesset.objects.current_knesset().start_date
        if self.request.user.is_authenticated():
            p = self.request.user.get_profile()
            watched = member in p.members
            cached_context = None
        else:
            watched = False
            cached_context = cache.get('mk_%d' % member.id)

        if cached_context is None:
            presence = {}
            self.calc_percentile(member, presence,
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours_percentile')
            self.calc_percentile(
                member, presence, 'average_monthly_committee_presence',
                'average_monthly_committee_presence',
                'average_monthly_committee_presence_percentile')

            bills_statistics = {}
            self.calc_bill_stats(member, bills_statistics, 'proposed')
            self.calc_bill_stats(member, bills_statistics, 'pre')
            self.calc_bill_stats(member, bills_statistics, 'first')
            self.calc_bill_stats(member, bills_statistics, 'approved')

            if self.request.user.is_authenticated():
                agendas = Agenda.objects.get_selected_for_instance(
                    member, user=self.request.user, top=3, bottom=3)
            else:
                agendas = Agenda.objects.get_selected_for_instance(member,
                                                                   user=None,
                                                                   top=3,
                                                                   bottom=3)
            agendas = agendas['top'] + agendas['bottom']
            for agenda in agendas:
                agenda.watched = False
                agenda.totals = agenda.get_mks_totals(member)
            if self.request.user.is_authenticated():
                watched_agendas = self.request.user.get_profile().agendas
                for watched_agenda in watched_agendas:
                    if watched_agenda in agendas:
                        agendas[agendas.index(watched_agenda)].watched = True
                    else:
                        watched_agenda.score = watched_agenda.member_score(
                            member)
                        watched_agenda.watched = True
                        agendas.append(watched_agenda)
            agendas.sort(key=attrgetter('score'), reverse=True)

            factional_discipline = VoteAction.objects.select_related(
                'vote').filter(member=member,
                               against_party=True,
                               vote__time__gt=d)

            votes_against_own_bills = VoteAction.objects.select_related(
                'vote').filter(member=member,
                               against_own_bill=True,
                               vote__time__gt=d)

            general_discipline_params = {'member': member, 'vote__time__gt': d}
            is_coalition = member.current_party.is_coalition
            if is_coalition:
                general_discipline_params['against_coalition'] = True
            else:
                general_discipline_params['against_opposition'] = True
            general_discipline = VoteAction.objects.filter(
                **general_discipline_params).select_related('vote')

            about_videos = get_videos_queryset(member, group='about')[:1]
            if len(about_videos):
                about_video = about_videos[0]
                about_video_embed_link = about_video.embed_link
                about_video_image_link = about_video.image_link
            else:
                about_video_embed_link = ''
                about_video_image_link = ''

            related_videos = get_videos_queryset(member, group='related')
            related_videos = related_videos.filter(
                Q(published__gt=date.today() - timedelta(days=30))
                | Q(sticky=True)).order_by('sticky').order_by('-published')[:5]

            actions = actor_stream(member)

            for a in actions:
                a.actor = member

            legislation_actions = actor_stream(member).filter(
                verb__in=('proposed', 'joined'))

            # this ugly code groups all the committee actions according to plenum and committee
            # it stop iterating when both committee and plenum actions reach the maximum (MEMBER_INITIAL_DATA)
            # it also stops iterating when reaching 20 iterations
            committee_actions_more = {'committee': False, 'plenum': False}
            committee_actions = {'committee': [], 'plenum': []}
            i = 0
            for action in actor_stream(member).filter(verb='attended'):
                i = i + 1
                if i == 20:
                    break
                committee_type = (action and action.target
                                  and action.target.committee
                                  and action.target.committee.type)
                if committee_type in ['plenum', 'committee']:
                    if len(committee_actions[committee_type]
                           ) == self.MEMBER_INITIAL_DATA:
                        committee_actions_more[committee_type] = True
                        if committee_actions_more[
                                'plenum'] == True and committee_actions_more[
                                    'committee'] == True:
                            break
                    else:
                        committee_actions[committee_type].append(action)

            committees_presence = []
            committees = chain(
                member.committees.all(),
                member.chaired_committees.all(),
            )
            for committee in committees:
                committee_member = committee.members_by_presence(
                    ids=[member.id])[0]
                committees_presence.append({
                    "committee":
                    committee,
                    "presence":
                    committee_member.meetings_percentage
                })

            committees_presence.sort(
                cmp=lambda x, y: y["presence"] - x["presence"])

            mmm_documents = member.mmm_documents.order_by('-publication_date')

            content_type = ContentType.objects.get_for_model(Member)
            num_followers = Follow.objects.filter(
                object_id=member.pk, content_type=content_type).count()

            # since parties are prefetch_releated, will list and slice them
            previous_parties = list(member.parties.all())[1:]
            cached_context = {
                'watched_member':
                watched,
                'num_followers':
                num_followers,
                'actions_more':
                actions.count() > self.MEMBER_INITIAL_DATA,
                'actions':
                actions[:self.MEMBER_INITIAL_DATA],
                'legislation_actions_more':
                legislation_actions.count() > self.MEMBER_INITIAL_DATA,
                'legislation_actions':
                legislation_actions[:self.MEMBER_INITIAL_DATA],
                'committee_actions_more':
                committee_actions_more['committee'],
                'committee_actions':
                committee_actions['committee'],
                'plenum_actions_more':
                committee_actions_more['plenum'],
                'plenum_actions':
                committee_actions['plenum'],
                'mmm_documents_more':
                mmm_documents.count() > self.MEMBER_INITIAL_DATA,
                'mmm_documents':
                mmm_documents[:self.MEMBER_INITIAL_DATA],
                'bills_statistics':
                bills_statistics,
                'agendas':
                agendas,
                'presence':
                presence,
                'current_knesset_start_date':
                date(2009, 2, 24),
                'factional_discipline':
                factional_discipline,
                'votes_against_own_bills':
                votes_against_own_bills,
                'general_discipline':
                general_discipline,
                'about_video_embed_link':
                about_video_embed_link,
                'about_video_image_link':
                about_video_image_link,
                'related_videos':
                related_videos,
                'num_related_videos':
                related_videos.count(),
                'INITIAL_DATA':
                self.MEMBER_INITIAL_DATA,
                'previous_parties':
                previous_parties,
                'committees_presence':
                committees_presence,
            }

            if not self.request.user.is_authenticated():
                cache.set('mk_%d' % member.id, cached_context,
                          settings.LONG_CACHE_TIME)

        context.update(cached_context)
        return context
コード例 #16
0
    def get_context_data(self, **kwargs):
        context = super(MemberDetailView, self).get_context_data(**kwargs)
        member = context['object']
        current_knesset_start_date = Knesset.objects.current_knesset(
        ).start_date
        if self.request.user.is_authenticated():
            profile = self.request.user.profiles.get()
            watched = profile.is_watching_member(member)
            cached_context = None
        else:
            watched = False
            cached_context = cache.get('mk_%d' % member.id)

        if cached_context is None:
            presence = {}
            self.calc_percentile(member, presence,
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours_percentile')
            self.calc_percentile(
                member, presence, 'average_monthly_committee_presence',
                'average_monthly_committee_presence',
                'average_monthly_committee_presence_percentile')

            bills_statistics = {}
            # TODO: can move to an offline job
            self.calc_bill_stats(member, bills_statistics, 'proposed')
            self.calc_bill_stats(member, bills_statistics, 'pre')
            self.calc_bill_stats(member, bills_statistics, 'first')
            self.calc_bill_stats(member, bills_statistics, 'approved')

            agendas = self.get_agenda_data(member)
            # TODO: Move to model or service
            factional_discipline = VoteAction.objects.select_related(
                'vote').filter(member=member,
                               against_party=True,
                               vote__time__gt=current_knesset_start_date)

            votes_against_own_bills = VoteAction.objects.select_related(
                'vote').filter(member=member,
                               against_own_bill=True,
                               vote__time__gt=current_knesset_start_date)

            general_discipline_params = {
                'member': member,
                'vote__time__gt': current_knesset_start_date
            }
            is_coalition = member.current_party.is_coalition
            if is_coalition:
                general_discipline_params['against_coalition'] = True
            else:
                general_discipline_params['against_opposition'] = True
            general_discipline = VoteAction.objects.filter(
                **general_discipline_params).select_related('vote')

            about_videos = get_videos_queryset(member, group='about')[:1]
            if len(about_videos):
                about_video = about_videos[0]
                about_video_embed_link = about_video.embed_link
                about_video_image_link = about_video.image_link
            else:
                about_video_embed_link = ''
                about_video_image_link = ''

            related_videos = get_videos_queryset(member, group='related')
            related_videos = related_videos.filter(
                Q(published__gt=date.today() - timedelta(days=30))
                | Q(sticky=True)).order_by('sticky').order_by('-published')[:5]

            actions = actor_stream(member)

            for a in actions:
                a.actor = member

            legislation_actions = actor_stream(member).filter(
                verb__in=('proposed', 'joined'))

            # this ugly code groups all the committee actions according to plenum and committee
            # it stop iterating when both committee and plenum actions reach the maximum (MEMBER_INITIAL_DATA)
            # it also stops iterating when reaching 20 iterations
            committee_actions_more = {'committee': False, 'plenum': False}
            committee_actions = {'committee': [], 'plenum': []}
            i = 0
            for action in actor_stream(member).filter(verb='attended'):
                i = i + 1
                if i == 20:
                    # JESUS what language are we writing here? and is this a way to do a "limit"?
                    break
                committee_type = (action and action.target
                                  and action.target.committee
                                  and action.target.committee.type)
                if committee_type in ['plenum', 'committee']:
                    if len(committee_actions[committee_type]
                           ) == self.MEMBER_INITIAL_DATA:
                        committee_actions_more[committee_type] = True
                        if committee_actions_more[
                                'plenum'] == True and committee_actions_more[
                                    'committee'] == True:
                            break
                    else:
                        committee_actions[committee_type].append(action)

            committees_presence = []
            has_protocols_not_published = False
            committees = member.get_active_committees()
            for committee in committees:
                committee_member = committee.members_by_presence(
                    ids=[member.id])[0]
                committees_presence.append({
                    "committee":
                    committee,
                    "presence":
                    committee_member.meetings_percentage
                })
                if committee.protocol_not_published:
                    has_protocols_not_published = True

            committees_presence.sort(
                cmp=lambda x, y: y["presence"] - x["presence"])

            mmm_documents = member.mmm_documents.order_by('-publication_date')

            content_type = ContentType.objects.get_for_model(Member)
            num_followers = Follow.objects.filter(
                object_id=member.pk, content_type=content_type).count()

            protocol_part_annotation_actions = Action.objects.filter(
                actor_content_type=ContentType.objects.get_for_model(Person),
                actor_object_id__in=member.person.values_list('pk', flat=True),
                verb='got annotation for protocol part')

            # since parties are prefetch_releated, will list and slice them
            previous_parties = list(member.parties.all())[1:]
            cached_context = {
                'watched_member':
                watched,
                'num_followers':
                num_followers,
                'actions_more':
                actions.count() > self.MEMBER_INITIAL_DATA,
                'actions':
                actions[:self.MEMBER_INITIAL_DATA],
                'legislation_actions_more':
                legislation_actions.count() > self.MEMBER_INITIAL_DATA,
                'legislation_actions':
                legislation_actions[:self.MEMBER_INITIAL_DATA],
                'committee_actions_more':
                committee_actions_more['committee'],
                'committee_actions':
                committee_actions['committee'],
                'plenum_actions_more':
                committee_actions_more['plenum'],
                'plenum_actions':
                committee_actions['plenum'],
                'mmm_documents_more':
                mmm_documents.count() > self.MEMBER_INITIAL_DATA,
                'mmm_documents':
                mmm_documents[:self.MEMBER_INITIAL_DATA],
                'bills_statistics':
                bills_statistics,
                'agendas':
                agendas,
                'presence':
                presence,
                # 'current_knesset_start_date': date(2009, 2, 24), #obviously wrong, but does not look like used in template
                'factional_discipline':
                factional_discipline,
                'votes_against_own_bills':
                votes_against_own_bills,
                'general_discipline':
                general_discipline,
                'about_video_embed_link':
                about_video_embed_link,
                'about_video_image_link':
                about_video_image_link,
                'related_videos':
                related_videos,
                'num_related_videos':
                related_videos.count(),
                'INITIAL_DATA':
                self.MEMBER_INITIAL_DATA,
                'previous_parties':
                previous_parties,
                'committees_presence':
                committees_presence,
                'protocol_part_annotation_actions':
                protocol_part_annotation_actions,
                'has_protocols_not_published':
                has_protocols_not_published,
            }

            if not self.request.user.is_authenticated():
                cache.set('mk_%d' % member.id, cached_context,
                          settings.LONG_CACHE_TIME)

        context.update(cached_context)
        return context
コード例 #17
0
ファイル: api.py プロジェクト: assaflavi/Open-Knesset
class MemberResource(BaseResource):
    ''' The Parliament Member API '''
    class Meta(BaseResource.Meta):

        queryset = Member.objects.exclude(
            current_party__isnull=True).select_related('current_party')

        allowed_methods = ['get']
        ordering = [
            'name',
            'is_current',
            'bills_stats_proposed',
            'bills_stats_pre',
            'bills_stats_first',
            'bills_stats_approved',
        ]

        filtering = dict(
            name=ALL,
            is_current=ALL,
        )

        excludes = ['website', 'backlinks_enabled', 'area_of_residence']
        list_fields = ['name', 'id', 'img_url', 'is_current']
        include_absolute_url = True

    party_name = fields.CharField()
    party_url = fields.CharField()
    mmms_count = fields.IntegerField(null=True)
    votes_count = fields.IntegerField(null=True)
    video_about = fields.ToManyField(
        VideoResource,
        attribute=lambda b: get_videos_queryset(b.obj, group='about'),
        null=True,
        full=True)
    videos_related = fields.ToManyField(
        VideoResource,
        attribute=lambda b: get_videos_queryset(b.obj, group='related'),
        null=True)
    links = fields.ToManyField(
        LinkResource,
        attribute=lambda b: Link.objects.for_model(b.obj),
        full=True,
        null=True)
    bills_uri = fields.CharField()
    agendas_uri = fields.CharField()
    committees = fields.ListField()

    def dehydrate_committees(self, bundle):
        temp_list = bundle.obj.committee_meetings.values(
            "committee",
            "committee__name").annotate(Count("id")).order_by('-id__count')[:5]
        return (map(
            lambda item:
            (item['committee__name'],
             reverse('committee-detail', args=[item['committee']])),
            temp_list))

    def dehydrate_bills_uri(self, bundle):
        return '%s?%s' % (reverse(
            'api_dispatch_list',
            kwargs={
                'resource_name': 'bill',
                'api_name': 'v2',
            }), urllib.urlencode(dict(proposer=bundle.obj.id)))

    def dehydrate_gender(self, bundle):
        return bundle.obj.get_gender_display()

    def dehydrate_agendas_uri(self, bundle):
        return reverse('api_dispatch_detail',
                       kwargs={
                           'resource_name': 'member-agendas',
                           'api_name': 'v2',
                           'pk': bundle.obj.id
                       })

    def dehydrate_party_name(self, bundle):
        return bundle.obj.current_party.name

    def dehydrate_party_url(self, bundle):
        return bundle.obj.current_party.get_absolute_url()

    def dehydrate_mmms_count(self, bundle):
        _cache_key = 'api_v2_member_mmms_' + str(bundle.obj.pk)
        count = cache.get(_cache_key)

        if count is None:
            count = bundle.obj.mmm_documents.count()
            cache.set(_cache_key, count, 24 * 3600)

        return count

    def dehydrate_votes_count(self, bundle):
        _cache_key = 'api_v2_member_votes_' + str(bundle.obj.pk)
        count = cache.get(_cache_key)

        if count is None:
            count = bundle.obj.votes.count()
            cache.set(_cache_key, count, 24 * 3600)

        return count

    fields.ToOneField(PartyResource, 'current_party', full=True)

    def build_filters(self, filters=None):
        if filters is None:
            filters = {}

        try:
            knesset = int(filters.get('knesset', 0))
        except KeyError:
            knesset = 0

        orm_filters = super(MemberResource, self).build_filters(filters)

        if knesset:
            knesset = Knesset.objects.get(number=knesset)
            orm_filters['parties__knesset'] = knesset

        return orm_filters
コード例 #18
0
ファイル: views.py プロジェクト: blackpanther/Open-Knesset
    def get_context_data(self, **kwargs):
        context = super(MemberDetailView, self).get_context_data(**kwargs)
        member = context["object"]

        if self.request.user.is_authenticated():
            p = self.request.user.get_profile()
            watched = member in p.members
            cached_context = None
        else:
            watched = False
            cached_context = cache.get("mk_%d" % member.id)

        if cached_context is None:
            presence = {}
            self.calc_percentile(
                member,
                presence,
                "average_weekly_presence_hours",
                "average_weekly_presence_hours",
                "average_weekly_presence_hours_percentile",
            )
            self.calc_percentile(
                member,
                presence,
                "average_monthly_committee_presence",
                "average_monthly_committee_presence",
                "average_monthly_committee_presence_percentile",
            )

            bills_statistics = {}
            self.calc_bill_stats(member, bills_statistics, "proposed")
            self.calc_bill_stats(member, bills_statistics, "pre")
            self.calc_bill_stats(member, bills_statistics, "first")
            self.calc_bill_stats(member, bills_statistics, "approved")

            if self.request.user.is_authenticated():
                agendas = Agenda.objects.get_selected_for_instance(member, user=self.request.user, top=3, bottom=3)
            else:
                agendas = Agenda.objects.get_selected_for_instance(member, user=None, top=3, bottom=3)
            agendas = agendas["top"] + agendas["bottom"]
            for agenda in agendas:
                agenda.watched = False
                agenda.totals = agenda.get_mks_totals(member)
            if self.request.user.is_authenticated():
                watched_agendas = self.request.user.get_profile().agendas
                for watched_agenda in watched_agendas:
                    if watched_agenda in agendas:
                        agendas[agendas.index(watched_agenda)].watched = True
                    else:
                        watched_agenda.score = watched_agenda.member_score(member)
                        watched_agenda.watched = True
                        agendas.append(watched_agenda)
            agendas.sort(key=attrgetter("score"), reverse=True)

            factional_discipline = VoteAction.objects.select_related("vote").filter(member=member, against_party=True)

            votes_against_own_bills = VoteAction.objects.select_related("vote").filter(
                member=member, against_own_bill=True
            )

            general_discipline_params = {"member": member}
            is_coalition = member.current_party.is_coalition
            if is_coalition:
                general_discipline_params["against_coalition"] = True
            else:
                general_discipline_params["against_opposition"] = True
            general_discipline = VoteAction.objects.filter(**general_discipline_params).select_related("vote")

            about_videos = get_videos_queryset(member, group="about")[:1]
            if len(about_videos):
                about_video = about_videos[0]
                about_video_embed_link = about_video.embed_link
                about_video_image_link = about_video.image_link
            else:
                about_video_embed_link = ""
                about_video_image_link = ""

            related_videos = get_videos_queryset(member, group="related")
            related_videos = (
                related_videos.filter(Q(published__gt=date.today() - timedelta(days=30)) | Q(sticky=True))
                .order_by("sticky")
                .order_by("-published")[:5]
            )

            actions = actor_stream(member)

            for a in actions:
                a.actor = member

            legislation_actions = actor_stream(member).filter(verb__in=("proposed", "joined"))

            committee_actions = actor_stream(member).filter(verb="attended")

            mmm_documents = member.mmm_documents.order_by("-publication_date")

            content_type = ContentType.objects.get_for_model(Member)
            num_followers = Follow.objects.filter(object_id=member.pk, content_type=content_type).count()

            cached_context = {
                "watched_member": watched,
                "num_followers": num_followers,
                "actions_more": actions.count() > self.MEMBER_INITIAL_DATA,
                "actions": actions[: self.MEMBER_INITIAL_DATA],
                "legislation_actions_more": legislation_actions.count() > self.MEMBER_INITIAL_DATA,
                "legislation_actions": legislation_actions[: self.MEMBER_INITIAL_DATA],
                "committee_actions_more": committee_actions.count() > self.MEMBER_INITIAL_DATA,
                "committee_actions": committee_actions[: self.MEMBER_INITIAL_DATA],
                "mmm_documents_more": mmm_documents.count() > self.MEMBER_INITIAL_DATA,
                "mmm_documents": mmm_documents[: self.MEMBER_INITIAL_DATA],
                "bills_statistics": bills_statistics,
                "agendas": agendas,
                "presence": presence,
                "current_knesset_start_date": date(2009, 2, 24),
                "factional_discipline": factional_discipline,
                "votes_against_own_bills": votes_against_own_bills,
                "general_discipline": general_discipline,
                "about_video_embed_link": about_video_embed_link,
                "about_video_image_link": about_video_image_link,
                "related_videos": related_videos,
                "num_related_videos": related_videos.count(),
                "INITIAL_DATA": self.MEMBER_INITIAL_DATA,
            }

            if not self.request.user.is_authenticated():
                cache.set("mk_%d" % member.id, cached_context, settings.LONG_CACHE_TIME)

        context.update(cached_context)
        return context
コード例 #19
0
ファイル: AddVideo.py プロジェクト: AvitalZipori/Open-Knesset
 def _isVideoExists(self,video):
     return get_videos_queryset(video['content_object'],ignoreHide=True).filter(source_id=video['source_id']).count()>0
コード例 #20
0
 def _hideMemberAboutVideos(self,member):
     videos=get_videos_queryset(member,group='about')
     for video in videos:
         video.hide=True
         video.save()
コード例 #21
0
 def _get_committee_num_mms_videos(self, comm, group, ignoreHide, embed_link):
     return get_videos_queryset(comm, group=group, ignoreHide=ignoreHide).filter(embed_link=embed_link).count()
コード例 #22
0
ファイル: views.py プロジェクト: MichaelDoron/Open-Knesset
    def get_context_data(self, **kwargs):
        context = super(MemberDetailView, self).get_context_data(**kwargs)
        member = context['object']

        if self.request.user.is_authenticated():
            p = self.request.user.get_profile()
            watched = member in p.members
            cached_context = None
        else:
            watched = False
            cached_context = cache.get('mk_%d' % member.id)

        if cached_context is None:
            presence = {}
            self.calc_percentile(member, presence,
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours_percentile')
            self.calc_percentile(member, presence,
                                 'average_monthly_committee_presence',
                                 'average_monthly_committee_presence',
                                 'average_monthly_committee_presence_percentile')

            bills_statistics = {}
            self.calc_bill_stats(member,bills_statistics,'proposed')
            self.calc_bill_stats(member,bills_statistics,'pre')
            self.calc_bill_stats(member,bills_statistics,'first')
            self.calc_bill_stats(member,bills_statistics,'approved')

            if self.request.user.is_authenticated():
                agendas = Agenda.objects.get_selected_for_instance(member, user=self.request.user, top=3, bottom=3)
            else:
                agendas = Agenda.objects.get_selected_for_instance(member, user=None, top=3, bottom=3)
            agendas = agendas['top'] + agendas['bottom']
            for agenda in agendas:
                agenda.watched=False
                agenda.totals = agenda.get_mks_totals(member)
            if self.request.user.is_authenticated():
                watched_agendas = self.request.user.get_profile().agendas
                for watched_agenda in watched_agendas:
                    if watched_agenda in agendas:
                        agendas[agendas.index(watched_agenda)].watched = True
                    else:
                        watched_agenda.score = watched_agenda.member_score(member)
                        watched_agenda.watched = True
                        agendas.append(watched_agenda)
            agendas.sort(key=attrgetter('score'), reverse=True)

            factional_discipline = VoteAction.objects.select_related(
                'vote').filter(member = member, against_party=True)

            votes_against_own_bills = VoteAction.objects.select_related(
                'vote').filter(member=member, against_own_bill=True)

            general_discipline_params = { 'member' : member }
            is_coalition = member.current_party.is_coalition
            if is_coalition:
                general_discipline_params['against_coalition'] = True
            else:
                general_discipline_params['against_opposition'] = True
            general_discipline = VoteAction.objects.filter(
                **general_discipline_params).select_related('vote')


            about_videos=get_videos_queryset(member,group='about')[:1]
            if len(about_videos):
                about_video=about_videos[0]
                about_video_embed_link=about_video.embed_link
                about_video_image_link=about_video.image_link
            else:
                about_video_embed_link=''
                about_video_image_link=''

            related_videos=get_videos_queryset(member,group='related')
            related_videos=related_videos.filter(
                Q(published__gt=date.today()-timedelta(days=30))
                | Q(sticky=True)
            ).order_by('sticky').order_by('-published')[:5]

            actions = actor_stream(member)

            for a in actions:
                a.actor = member

            legislation_actions = actor_stream(member).filter(
                verb__in=('proposed', 'joined'))

            committee_actions = actor_stream(member).filter(verb='attended')

            mmm_documents = member.mmm_documents.order_by('-publication_date')

            content_type = ContentType.objects.get_for_model(Member)
            num_followers = Follow.objects.filter(object_id=member.pk, content_type=content_type).count()

            cached_context = {
                'watched_member': watched,
                'num_followers': num_followers,
                'actions_more': actions.count() > self.MEMBER_INITIAL_DATA,
                'actions': actions[:self.MEMBER_INITIAL_DATA],
                'legislation_actions_more': legislation_actions.count() > self.MEMBER_INITIAL_DATA,
                'legislation_actions': legislation_actions[:self.MEMBER_INITIAL_DATA],
                'committee_actions_more': committee_actions.count() > self.MEMBER_INITIAL_DATA,
                'committee_actions': committee_actions[:self.MEMBER_INITIAL_DATA],
                'mmm_documents_more': mmm_documents.count() > self.MEMBER_INITIAL_DATA,
                'mmm_documents': mmm_documents[:self.MEMBER_INITIAL_DATA],
                'bills_statistics': bills_statistics,
                'agendas': agendas,
                'presence': presence,
                'current_knesset_start_date': date(2009, 2, 24),
                'factional_discipline': factional_discipline,
                'votes_against_own_bills': votes_against_own_bills,
                'general_discipline': general_discipline,
                'about_video_embed_link': about_video_embed_link,
                'about_video_image_link': about_video_image_link,
                'related_videos': related_videos,
                'num_related_videos': related_videos.count(),
                'INITIAL_DATA': self.MEMBER_INITIAL_DATA,
            }

            if not self.request.user.is_authenticated():
                cache.set('mk_%d' % member.id, cached_context,
                          settings.LONG_CACHE_TIME)

        context.update(cached_context)
        return context
コード例 #23
0
 def _getVideos(self, getVideosQuerysetParams, filterParams):
     return get_videos_queryset(**getVideosQuerysetParams).filter(
         **filterParams)
コード例 #24
0
    def get_context_data(self, **kwargs):
        context = super(MemberDetailView, self).get_context_data(**kwargs)
        member = context['object']

        if self.request.user.is_authenticated():
            p = self.request.user.get_profile()
            watched = member in p.members
            cached_context = None
        else:
            watched = False
            cached_context = cache.get('mk_%d' % member.id)

        if cached_context is None:
            presence = {}
            self.calc_percentile(member, presence,
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours_percentile')
            self.calc_percentile(
                member, presence, 'average_monthly_committee_presence',
                'average_monthly_committee_presence',
                'average_monthly_committee_presence_percentile')

            bills_statistics = {}
            self.calc_bill_stats(member, bills_statistics, 'proposed')
            self.calc_bill_stats(member, bills_statistics, 'pre')
            self.calc_bill_stats(member, bills_statistics, 'first')
            self.calc_bill_stats(member, bills_statistics, 'approved')

            if self.request.user.is_authenticated():
                agendas = Agenda.objects.get_selected_for_instance(
                    member, user=self.request.user, top=3, bottom=3)
            else:
                agendas = Agenda.objects.get_selected_for_instance(member,
                                                                   user=None,
                                                                   top=3,
                                                                   bottom=3)
            agendas = agendas['top'] + agendas['bottom']
            for agenda in agendas:
                agenda.watched = False
                agenda.totals = agenda.get_mks_totals(member)
            if self.request.user.is_authenticated():
                watched_agendas = self.request.user.get_profile().agendas
                for watched_agenda in watched_agendas:
                    if watched_agenda in agendas:
                        agendas[agendas.index(watched_agenda)].watched = True
                    else:
                        watched_agenda.score = watched_agenda.member_score(
                            member)
                        watched_agenda.watched = True
                        agendas.append(watched_agenda)
            agendas.sort(key=attrgetter('score'), reverse=True)

            factional_discipline = VoteAction.objects.select_related(
                'vote').filter(member=member, against_party=True)

            votes_against_own_bills = VoteAction.objects.select_related(
                'vote').filter(member=member, against_own_bill=True)

            general_discipline_params = {'member': member}
            is_coalition = member.current_party.is_coalition
            if is_coalition:
                general_discipline_params['against_coalition'] = True
            else:
                general_discipline_params['against_opposition'] = True
            general_discipline = VoteAction.objects.filter(
                **general_discipline_params).select_related('vote')

            about_videos = get_videos_queryset(member, group='about')[:1]
            if len(about_videos):
                about_video = about_videos[0]
                about_video_embed_link = about_video.embed_link
                about_video_image_link = about_video.image_link
            else:
                about_video_embed_link = ''
                about_video_image_link = ''

            related_videos = get_videos_queryset(member, group='related')
            related_videos = related_videos.filter(
                Q(published__gt=date.today() - timedelta(days=30))
                | Q(sticky=True)).order_by('sticky').order_by('-published')[:5]

            actions = actor_stream(member)

            for a in actions:
                a.actor = member

            legislation_actions = actor_stream(member).filter(
                verb__in=('proposed', 'joined'))

            committee_actions = actor_stream(member).filter(verb='attended')

            mmm_documents = member.mmm_documents.order_by('-publication_date')

            content_type = ContentType.objects.get_for_model(Member)
            num_followers = Follow.objects.filter(
                object_id=member.pk, content_type=content_type).count()

            # since parties are prefetch_releated, will list and slice them
            previous_parties = list(member.parties.all())[1:]
            cached_context = {
                'watched_member':
                watched,
                'num_followers':
                num_followers,
                'actions_more':
                actions.count() > self.MEMBER_INITIAL_DATA,
                'actions':
                actions[:self.MEMBER_INITIAL_DATA],
                'legislation_actions_more':
                legislation_actions.count() > self.MEMBER_INITIAL_DATA,
                'legislation_actions':
                legislation_actions[:self.MEMBER_INITIAL_DATA],
                'committee_actions_more':
                committee_actions.count() > self.MEMBER_INITIAL_DATA,
                'committee_actions':
                committee_actions[:self.MEMBER_INITIAL_DATA],
                'mmm_documents_more':
                mmm_documents.count() > self.MEMBER_INITIAL_DATA,
                'mmm_documents':
                mmm_documents[:self.MEMBER_INITIAL_DATA],
                'bills_statistics':
                bills_statistics,
                'agendas':
                agendas,
                'presence':
                presence,
                'current_knesset_start_date':
                date(2009, 2, 24),
                'factional_discipline':
                factional_discipline,
                'votes_against_own_bills':
                votes_against_own_bills,
                'general_discipline':
                general_discipline,
                'about_video_embed_link':
                about_video_embed_link,
                'about_video_image_link':
                about_video_image_link,
                'related_videos':
                related_videos,
                'num_related_videos':
                related_videos.count(),
                'INITIAL_DATA':
                self.MEMBER_INITIAL_DATA,
                'previous_parties':
                previous_parties,
            }

            if not self.request.user.is_authenticated():
                cache.set('mk_%d' % member.id, cached_context,
                          settings.LONG_CACHE_TIME)

        context.update(cached_context)
        return context
コード例 #25
0
ファイル: views.py プロジェクト: elazarg/Open-Knesset
    def get_context_data(self, **kwargs):
        context = super(MemberDetailView, self).get_context_data(**kwargs)
        member = context['object']
        user = self.request.user
        authenticated = user.is_authenticated()

        if authenticated:
            profile = user.get_profile()
            watched = member in profile.members
            cached_context = None
        else:
            watched = False
            cached_context = cache.get('mk_{}'.format(member.id))

        if not cached_context:
            presence = {}
            self.calc_percentile(member, presence,
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours',
                                 'average_weekly_presence_hours_percentile')
            self.calc_percentile(member, presence,
                                 'average_monthly_committee_presence',
                                 'average_monthly_committee_presence',
                                 'average_monthly_committee_presence_percentile')

            bills_statistics = {}
            for s in ('proposed', 'pre', 'first', 'approved'):
                self.calc_bill_stats(member,bills_statistics, s)
            
            agendas = Agenda.objects.get_selected_for_instance(member,
                                        user=user if authenticated else None, top=3, bottom=3)
            for agenda in agendas:
                agenda.watched = False
                agenda.totals = agenda.get_mks_totals(member)
            if authenticated:
                for watched_agenda in profile.agendas:
                    if watched_agenda in agendas:
                        agendas[agendas.index(watched_agenda)].watched = True
                    else:
                        watched_agenda.score = watched_agenda.member_score(member)
                        watched_agenda.watched = True
                        agendas.append(watched_agenda)
            agendas.sort(key=attrgetter('score'), reverse=True)

            factional_discipline = VoteAction.objects.select_related(
                'vote').filter(member=member, against_party=True)

            votes_against_own_bills = VoteAction.objects.select_related(
                'vote').filter(member=member, against_own_bill=True)

            general_discipline_params = { 'member' : member }
            side = 'against_coalition' if member.current_party.is_coalition else 'against_opposition'
            general_discipline_params[side] = True
            general_discipline = VoteAction.objects.filter(
                **general_discipline_params).select_related('vote')


            about_videos = get_videos_queryset(member,group='about')
            try:
                about_video_embed_link=about_videos[0].embed_link
                about_video_image_link=about_videos[0].image_link
            except IndexError: 
                about_video_embed_link=''
                about_video_image_link=''
                
            related_videos = get_videos_queryset(member,group='related').filter(
                                    Q(published__gt=date.today()-timedelta(days=30))
                                    | Q(sticky=True)
                                ).order_by('sticky').order_by('-published')[:5]

            actions = actor_stream(member)

            for a in actions:
                a.actor = member

            legislation_actions = actor_stream(member).filter(
                verb__in=('proposed', 'joined'))

            committee_actions = actor_stream(member).filter(verb='attended')
            mmm_documents = member.mmm_documents.order_by('-publication_date')
            content_type = ContentType.objects.get_for_model(Member)

            # since parties are prefetch_releated, will list and slice them
            previous_parties = list(member.parties.all())[1:]
            cached_context = {
                'watched_member': watched,
                'num_followers': Follow.objects.filter(object_id=member.pk, content_type=content_type).count(),
                'actions_more': actions.count() > self.MEMBER_INITIAL_DATA,
                'actions': actions[:self.MEMBER_INITIAL_DATA],
                'legislation_actions_more': legislation_actions.count() > self.MEMBER_INITIAL_DATA,
                'legislation_actions': legislation_actions[:self.MEMBER_INITIAL_DATA],
                'committee_actions_more': committee_actions.count() > self.MEMBER_INITIAL_DATA,
                'committee_actions': committee_actions[:self.MEMBER_INITIAL_DATA],
                'mmm_documents_more': mmm_documents.count() > self.MEMBER_INITIAL_DATA,
                'mmm_documents': mmm_documents[:self.MEMBER_INITIAL_DATA],
                'bills_statistics': bills_statistics,
                'agendas': agendas,
                'presence': presence,
                'current_knesset_start_date': date(2009, 2, 24),
                'factional_discipline': factional_discipline,
                'votes_against_own_bills': votes_against_own_bills,
                'general_discipline': general_discipline,
                'about_video_embed_link': about_video_embed_link,
                'about_video_image_link': about_video_image_link,
                'related_videos': related_videos,
                'num_related_videos': related_videos.count(),
                'INITIAL_DATA': self.MEMBER_INITIAL_DATA,
                'previous_parties': previous_parties,
            }

            if not authenticated:
                cache.set('mk_{}'.format(member.id), cached_context,
                          settings.LONG_CACHE_TIME)

        context.update(cached_context)
        return context