Exemplo n.º 1
0
 def get_paginator(self, request, queryset, per_page, orphans=0, allow_empty_first_page=True):
     # Cloned
     # from conference.admin.TalkAdmin
     talks = cdata.talks_data(queryset.values_list('talk__id', flat=True))
     self.cached_talks = dict([(x['id'], x) for x in talks])
     sids = [s['id'] for t in talks for s in t['speakers']]
     profiles = cdata.profiles_data(sids)
     self.cached_profiles = dict([(x['id'], x) for x in profiles])
     return super(P3TalkAdmin, self).get_paginator(request, queryset, per_page,
                                                   orphans, allow_empty_first_page)
Exemplo n.º 2
0
 def get_paginator(self, request, queryset, per_page, orphans=0, allow_empty_first_page=True):
     # utilizzo dataaccess per fare una sola query verso il db, in questo
     # modo ho subito tutti i dati pronti (utile ad esempio per mostrare i
     # nomi degli speaker)
     talks = dataaccess.talks_data(queryset.values_list('id', flat=True))
     self.cached_talks = dict([(x['id'], x) for x in talks])
     sids = [ s['id'] for t in talks for s in t['speakers'] ]
     profiles = dataaccess.profiles_data(sids)
     self.cached_profiles = dict([(x['id'], x) for x in profiles])
     return super(TalkAdmin, self).get_paginator(request, queryset, per_page, orphans, allow_empty_first_page)
Exemplo n.º 3
0
 def stats_list(self, request):
     qs = models.TalkSpeaker.objects\
         .filter(talk__conference=settings.CONFERENCE)\
         .order_by('speaker__user__first_name', 'speaker__user__last_name')\
         .distinct()\
         .values_list('speaker', flat=True)
     # precarico i profili per aiutare il template
     dataaccess.profiles_data(qs)
     speakers = dataaccess.speakers_data(qs)
     groups = {}
     for t, _ in models.TALK_TYPE:
         sids = set(qs.filter(talk__type=t))
         data = [x for x in speakers if x['user'] in sids]
         if data:
             groups[t] = data
     return render_to_response(
         'admin/conference/speaker/stats_list.html', {
             'speakers': speakers,
             'groups': groups,
         },
         context_instance=template.RequestContext(request))
Exemplo n.º 4
0
 def stats_list(self, request):
     qs = models.TalkSpeaker.objects\
         .filter(talk__conference=settings.CONFERENCE)\
         .order_by('speaker__user__first_name', 'speaker__user__last_name')\
         .distinct()\
         .values_list('speaker', flat=True)
     # precarico i profili per aiutare il template
     dataaccess.profiles_data(qs)
     speakers = dataaccess.speakers_data(qs)
     groups = {}
     for t, _ in models.TALK_TYPE:
         sids = set(qs.filter(talk__type=t))
         data = [ x for x in speakers if x['user'] in sids ]
         if data:
             groups[t] = data
     return render_to_response(
         'admin/conference/speaker/stats_list.html',
         {
             'speakers': speakers,
             'groups': groups,
         },
         context_instance=template.RequestContext(request)
     )
Exemplo n.º 5
0
def profiles_data(uids):
    cached = zip(uids, profile_data.get_from_cache([ (x,) for x in uids ]))
    missing = [ x[0] for x in cached if x[1] is cache_me.CACHE_MISS ]

    preload = {}
    profiles = models.P3Profile.objects\
        .filter(profile__in=missing)\
        .select_related('profile__user')
    tags = cmodels.ConferenceTaggedItem.objects\
        .filter(
            content_type=ContentType.objects.get_for_model(models.P3Profile),
            object_id__in=missing
        )\
        .values('object_id', 'tag__name')
    speakers = models.SpeakerConference.objects\
        .filter(speaker__in=missing)

    for p in profiles:
        preload[p.profile_id] = {
            'profile': p,
            'interests': set(),
        }
    for row in tags:
        preload[row['object_id']]['interests'].add(row['tag__name'])
    for spk in speakers:
        preload[spk.speaker_id]['speaker'] = spk

    cdata.profiles_data(missing)

    output = []
    for ix, e in enumerate(cached):
        pid, val = e
        if val is cache_me.CACHE_MISS:
            val = profile_data(pid, preload=preload[pid])
        output.append(val)

    return output
Exemplo n.º 6
0
def profiles_data(uids):
    cached = zip(uids, profile_data.get_from_cache([(x, ) for x in uids]))
    missing = [x[0] for x in cached if x[1] is cache_me.CACHE_MISS]

    preload = {}
    profiles = models.P3Profile.objects\
        .filter(profile__in=missing)\
        .select_related('profile__user')
    tags = cmodels.ConferenceTaggedItem.objects\
        .filter(
            content_type=ContentType.objects.get_for_model(models.P3Profile),
            object_id__in=missing
        )\
        .values('object_id', 'tag__name')
    speakers = models.SpeakerConference.objects\
        .filter(speaker__in=missing)

    for p in profiles:
        preload[p.profile_id] = {
            'profile': p,
            'interests': set(),
        }
    for row in tags:
        preload[row['object_id']]['interests'].add(row['tag__name'])
    for spk in speakers:
        preload[spk.speaker_id]['speaker'] = spk

    cdata.profiles_data(missing)

    output = []
    for ix, e in enumerate(cached):
        pid, val = e
        if val is cache_me.CACHE_MISS:
            val = profile_data(pid, preload=preload[pid])
        output.append(val)

    return output
Exemplo n.º 7
0
 def get_paginator(self,
                   request,
                   queryset,
                   per_page,
                   orphans=0,
                   allow_empty_first_page=True):
     # Cloned
     # from conference.admin.TalkAdmin
     talks = cdata.talks_data(queryset.values_list('talk__id', flat=True))
     self.cached_talks = dict([(x['id'], x) for x in talks])
     sids = [s['id'] for t in talks for s in t['speakers']]
     profiles = cdata.profiles_data(sids)
     self.cached_profiles = dict([(x['id'], x) for x in profiles])
     return super(P3TalkAdmin,
                  self).get_paginator(request, queryset, per_page, orphans,
                                      allow_empty_first_page)
Exemplo n.º 8
0
 def get_paginator(self,
                   request,
                   queryset,
                   per_page,
                   orphans=0,
                   allow_empty_first_page=True):
     # utilizzo dataaccess per fare una sola query verso il db, in questo
     # modo ho subito tutti i dati pronti (utile ad esempio per mostrare i
     # nomi degli speaker)
     talks = dataaccess.talks_data(queryset.values_list('id', flat=True))
     self.cached_talks = dict([(x['id'], x) for x in talks])
     sids = [s['id'] for t in talks for s in t['speakers']]
     profiles = dataaccess.profiles_data(sids)
     self.cached_profiles = dict([(x['id'], x) for x in profiles])
     return super(TalkAdmin,
                  self).get_paginator(request, queryset, per_page, orphans,
                                      allow_empty_first_page)