Mercurial > hg > bts-webui
view bts_webui/amancay/tables.py @ 127:d26d941537ba draft
starring: implement the first version
it needs testing and error handling (timeouts, etc)
should be working right now for starring, unstarring will come in the next
commit.
author | diegoe-guest |
---|---|
date | Thu, 06 Aug 2009 16:18:54 +0000 |
parents | cedf8ac92cf5 |
children | 537aa92d7179 |
line wrap: on
line source
# vim: set sw=4 ts=4 sts=4 noet: import datetime # Needed to get_template, prepare context and output Response from django.template import Context, loader from django.http import HttpResponse, HttpResponseRedirect # Shortcut for rendering a response from django.shortcuts import get_object_or_404, render_to_response # Model clases from django.contrib.auth.models import User from bts_webui.amancay.models import Package # Needed for AJAX from django.utils import simplejson # Needed for SOAP from bts_queries import SoapQueries queries = SoapQueries() # Toolboxes from toolbox import get_toolbox # Bug renderer. def render_bug_table(request, queries, title, bugs, amount, current_view): if bugs: bug_list = queries.get_bugs_status(bugs[:amount]) bug_list.sort(key=lambda x: x.package) else: bug_list = None fav_packages = [p.package_name for p in request.user.package_set.all()] for bug in bug_list: if bug.package in fav_packages: bug.pkg_fav = True if request.GET.has_key('xhr'): # We only need to list the data. return HttpResponse(simplejson.dumps(bug_list), mimetype='application/javascript') elif request.path.find("table") != -1: # We only need to render the table return render_to_response('table.html', {'bug_list': bug_list, 'table_title': title, 'current_view': current_view}, ) else: # We need to render the whole page # Get the corresponding toolbox toolbox = get_toolbox(request) return render_to_response('index.html', {'bug_list': bug_list, 'table_title': title, 'toolbox': toolbox, 'current_view': current_view, 'current_user': request.user} ) # Bug views def submitted_bugs(request): process_post(request) user = request.user bugs = [] if (user.is_authenticated()): emails = user.submitteremail_set.all() submitter_emails = [ str(e) for e in emails] else: submitter_emails = request.session.get('submitter_emails') if (submitter_emails): bugs = queries.get_submitters_bugs(submitter_emails) bugs.sort(reverse=True) return render_bug_table(request, queries, "Latest submitted bugs", bugs, 15, "submitted_bugs") def received_bugs(request): process_post(request) user = request.user bugs = [] if (user.is_authenticated()): emails = user.maintaineremail_set.all() maintainer_emails = [str(e) for e in emails] else: maintainer_emails = request.session.get('maintainer_emails') if (maintainer_emails): bugs = queries.get_maintainers_bugs(maintainer_emails) bugs.sort(reverse=True) return render_bug_table(request, queries, "Latest received bugs", bugs, 15, "received_bugs") def package_bugs(request): process_post(request) user = request.user bugs = [] if user.is_authenticated(): package_list = request.user.package_set.all() package_list = [p.package_name for p in package_list] else: package_list = request.session.get('packages') if package_list: bugs = queries.get_packages_bugs(package_list) bugs.sort(reverse=True) return render_bug_table(request, queries, "Latest bugs on selected packages", bugs, 15, "package_bugs") def selected_bugs(request): process_post(request) user = request.user if (user.is_authenticated()): bugs = [b.number for b in request.user.bug_set.all()] else: bugs = request.session.get('bugs') if (bugs != None): bugs.sort(reverse=True) return render_bug_table(request, queries, "Latest selected bugs", bugs, 15, "selected_bugs") def tagged_bugs(request): process_post(request) user = request.user if (user.is_authenticated()): emails = user.useremail_set.all() user_emails = [ str(e) for e in emails] else: user_emails = request.session.get('user_emails') bugs = {} if (user_emails): bugs = queries.get_tagged_bugs(user_emails) print bugs # bugs.sort(reverse=True) # TODO: fix this, bugs is a dict where every value is a dict of tags and # bugs associated to one mail bugs = [] return render_bug_table(request, queries, "Latest received bugs", bugs, 15, "received_bugs") # Simple method that just calls the appropiate function. def process_post(request): if request.POST: # Packages if (request.POST.has_key('package')): return add_package(request) elif (request.POST.has_key('package_select')): return remove_packages(request) # Bugs elif (request.POST.has_key('bug')): return add_bug(request) elif (request.POST.has_key('bug_select')): return remove_bugs(request) # Submitter Emails elif (request.POST.has_key('submitter_email')): return add_submitter_email(request) elif (request.POST.has_key('submitter_email_select')): return remove_submitter_emails(request) # Maintainer Emails elif (request.POST.has_key('maintainer_email')): return add_maintainer_email(request) elif (request.POST.has_key('maintainer_email_select')): return remove_maintainer_emails(request) # User Emails elif (request.POST.has_key('user_email')): return add_user_email(request) elif (request.POST.has_key('user_email_select')): return remove_user_emails(request) return [] # Data processing def add_item(request, item_set, item_record, session_name): if (item_set != None): items = item_set.filter(**item_record) if (len(items) == 0): item_set.create(**item_record) return [ str(i) for i in item_set.all() ] else: items = request.session.get(session_name) if (items == None): items = request.session[session_name] = [] item_value = item_record.values()[0] for item in items: if (item == item_value): return items items.append(item_value) return items def add_package(request): user = request.user package_name = request.POST['package'] item_set = None if (user.is_authenticated()): item_set = user.package_set return add_item(request, item_set, {"package_name":package_name},"packages") def add_bug(request): user = request.user bug_number = request.POST['bug'] item_set = None if (user.is_authenticated()): item_set = user.bug_set return add_item(request, item_set, {"number":bug_number}, "bugs") def add_submitter_email(request): user = request.user email = request.POST['submitter_email'] item_set = None if (user.is_authenticated()): item_set = user.submitteremail_set return add_item(request, item_set, {"address":email}, "submitter_emails") def add_maintainer_email(request): user = request.user email = request.POST['maintainer_email'] item_set = None if (user.is_authenticated()): item_set = user.maintaineremail_set return add_item(request, item_set, {"address":email}, "maintainer_emails") def add_user_email(request): user = request.user email = request.POST['user_email'] item_set = None if (user.is_authenticated()): item_set = user.useremail_set return add_item(request, item_set, {"address":email}, "user_emails") def remove_items(request, selected_items, item_set, item_field, session_name): if (item_set != None): for item in selected_items: items = item_set.filter(**{item_field:item}) if (len(items) != 0): items[0].delete() return [ str(i) for i in item_set.all()] else: items = request.session.get(session_name) if (items == None): items = request.session[session_name] = [] else: for sel_item in selected_items: for item in items: if (item == sel_item): items.remove(sel_item) return items def remove_packages(request): user = request.user selected = request.POST.getlist("package_select") item_set = None if (user.is_authenticated()): item_set = user.package_set return remove_items(request, selected, item_set, "package_name","packages") def remove_bugs(request): user = request.user selected = request.POST.getlist("bug_select") item_set = None if (user.is_authenticated()): item_set = user.bug_set return remove_items(request, selected, item_set, "number","bugs") def remove_submitter_emails(request): user = request.user selected = request.POST.getlist("submitter_email_select") item_set = None if (user.is_authenticated()): item_set = user.submitteremail_set return remove_items(request, selected, item_set, "address","submitter_emails") def remove_maintainer_emails(request): user = request.user selected = request.POST.getlist("maintainer_email_select") item_set = None if (user.is_authenticated()): item_set = user.maintaineremail_set return remove_items(request, selected, item_set, "address","maintainer_emails") def remove_user_emails(request): user = request.user selected = request.POST.getlist("user_email_select") item_set = None if (user.is_authenticated()): item_set = user.useremail_set return remove_items(request, selected, item_set, "address","user_emails")