예제 #1
0
def tag_cloud(request, THRESHOLD=1):
    context = {}
    qs = (
        Event.tags.through.objects
        .values('tag_id')
        .annotate(Count('tag__id'))
    )
    if request.user.is_active:
        if is_contributor(request.user):
            # because of a bug in Django we can't use qs.exclude()
            qs = qs.filter(
                Q(event__privacy=Event.PRIVACY_CONTRIBUTORS) |
                Q(event__privacy=Event.PRIVACY_PUBLIC)
            )
    else:
        qs = qs.filter(event__privacy=Event.PRIVACY_PUBLIC)
    tags_map = dict(
        (x['id'], x['name'])
        for x in
        Tag.objects.all()
        .values('id', 'name')
    )
    tags = []
    for each in qs.values('tag__id__count', 'tag_id'):
        count = each['tag__id__count']
        if count > THRESHOLD:
            tags.append(_Tag(tags_map[each['tag_id']], count))

    context['tags'] = cloud.calculate_cloud(
        tags,
        steps=10
    )
    return render(request, 'main/tag_cloud.html', context)
예제 #2
0
def tag_cloud(request, THRESHOLD=1):
    context = {}
    qs = (Event.tags.through.objects.values('tag_id').annotate(
        Count('tag__id')))
    if request.user.is_active:
        if is_contributor(request.user):
            # because of a bug in Django we can't use qs.exclude()
            qs = qs.filter(
                Q(event__privacy=Event.PRIVACY_CONTRIBUTORS)
                | Q(event__privacy=Event.PRIVACY_PUBLIC))
    else:
        qs = qs.filter(event__privacy=Event.PRIVACY_PUBLIC)
    tags_map = dict(
        (x['id'], x['name']) for x in Tag.objects.all().values('id', 'name'))
    tags = []
    for each in qs.values('tag__id__count', 'tag_id'):
        count = each['tag__id__count']
        if count > THRESHOLD:
            tags.append(_Tag(tags_map[each['tag_id']], count))

    context['tags'] = cloud.calculate_cloud(tags, steps=10)
    return render(request, 'main/tag_cloud.html', context)
예제 #3
0
 def test_calculate_cloud(self):
     tags = [_Tag('one', 3), _Tag('two', 15), _Tag('three', 6)]
     tags_sorted = cloud.calculate_cloud(tags)
     eq_([x.font_size for x in tags_sorted], [2, 4, 3])
예제 #4
0
 def test_calculate_cloud(self):
     tags = [_Tag('one', 3), _Tag('two', 15), _Tag('three', 6)]
     tags_sorted = cloud.calculate_cloud(tags)
     eq_([x.font_size for x in tags_sorted], [2, 4, 3])