view bts_webui/amancay/tables.py @ 167:ecc41e392805 draft

Replaced tabs with spaces, using untabify, to follow PEP8
author eriol-guest
date Wed, 06 Jul 2011 01:40:05 +0000
parents 7cc0280a9c96
children
line wrap: on
line source

# vim: set sw=4 ts=4 sts=4 noet:
from django.http import HttpResponse
from django.core.paginator import Paginator, EmptyPage, InvalidPage
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.utils import simplejson

from amancay.btsqueries import SoapQueries

PER_PAGE = 10
def _get_bug_list(request, view):
    """
    Process the requested bug list corresponding to a given view.
    """
    queries = SoapQueries()
    bugs = bug_list = []

    if view == 'received_bugs':
        if request.user.is_authenticated():
            user_emails = [e.address for e in request.user.useremail_set.all()]
        else:
            user_emails = request.session.get('maintaineremail_set', [])

        bugs = queries.get_maintainers_bugs(user_emails)

    elif view == 'submitted_bugs':
        if request.user.is_authenticated():
            submitter_emails = [e.address for e in request.user.submitteremail_set.all()]
        else:
            submitter_emails = request.session.get('submitteremail_set', [])

        bugs = queries.get_submitters_bugs(submitter_emails)

    elif view == 'selected_bugs':
        if request.user.is_authenticated():
            bugs = [b.number for b in request.user.bug_set.all()]
        else:
            bugs = request.session.get('bug_set', [])

    elif view == 'package_bugs':
        if request.user.is_authenticated():
            package_list = [p.package_name for p in request.user.package_set.all()]
        else:
            package_list = request.session.get('package_set', [])

        bugs = queries.get_packages_bugs(package_list)

    elif view == 'tagged_bugs':
        if request.user.is_authenticated():
            user_emails = [e.address for e in request.user.useremail_set.all()]
        else:
            user_emails = request.session.get('useremail_set', [])

        bugs = queries.get_tagged_bugs(user_emails)

    # We use the django Paginator to divide objects in pages but note that
    # the actual results are passed to the template as a separate list.
    # This is because we would be wasting bandwidth in requesting all the
    # objects again and again, only to feed them to the paginator and use its
    # object_list property.
    paginator = Paginator(bugs, PER_PAGE)

    try:
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1

    # If page request (9999) is out of range, deliver last page of results.
    try:
        page = paginator.page(page)
    except (EmptyPage, InvalidPage):
        page = paginator.page(paginator.num_pages)

    bugs = page.object_list
    if bugs:
        bug_list = queries.get_bugs_status(bugs)
        bug_list.sort(key=lambda x: x.package)

    return {'bug_list': bug_list,
            'current_view': view,
            'page': page}

def received_bugs(request):
    """
    Render a table view for bugs we have received as maintainers.
    """
    data_dict = _get_bug_list(request, 'received_bugs')
    data_dict['title'] = 'Latest received bugs'

    return render_to_response('table.html',
                              data_dict,
                              context_instance=RequestContext(request))

def submitted_bugs(request):
    """
    Render a table view for bugs we have submitted ourselves.
    """
    data_dict = _get_bug_list(request, 'submitted_bugs')
    data_dict['title'] = 'Latest submitted bugs'

    return render_to_response('table.html',
                              data_dict,
                              context_instance=RequestContext(request))

def selected_bugs(request):
    """
    Render a table view for bugs we are watching.
    """
    data_dict = _get_bug_list(request, 'selected_bugs')
    data_dict['title'] = 'Latest selected bugs'

    return render_to_response('table.html',
                              data_dict,
                              context_instance=RequestContext(request))

def package_bugs(request):
    """
    Render a table view for our watched packages.
    """
    if request.user.is_authenticated():
        package_list = [p.package_name for p in request.user.package_set.all()]
    else:
        package_list = request.session.get('package_set', [])

    data_dict = _get_bug_list(request, 'package_bugs')
    data_dict['title'] = 'Latest bugs on selected packages'

    for bug in data_dict['bug_list']:
        if bug.package in package_list:
            bug.pkg_fav = True
        else:
            bug.pkg_fav = False

    return render_to_response('table.html',
                              data_dict,
                              context_instance=RequestContext(request))

def tagged_bugs(request):
    """
    Render a table view for bugs we have tagged.
    """
    data_dict = _get_bug_list(request, 'tagged_bugs')
    data_dict['title'] = 'Latest tagged bugs'

    # TODO: fix this, bugs is a dict where every value is a dict of tags and
    # bugs associated to one mail
    return render_to_response('table.html',
                              data_dict,
                              context_instance=RequestContext(request))