def package(request, package_name): """ Individual package page. """ user = request.user queries = SoapQueries() bugs = queries.get_packages_bugs(package_name) #bugs.sort(reverse=True) bug_list = queries.get_bugs_status(bugs) def severitysort(a, b): """Sort by severity and then by modify date""" d = severities[b['severity']] - severities[a['severity']] if d: return d return b['last_modified'] - a['last_modified'] bug_list.sort(severitysort) # Check if it's AJAX or HTML if 'xhr' in request.GET: return HttpResponse(simplejson.dumps({"package": package_name, "bug_list": bug_list}), mimetype='application/javascript') else: return render_to_response('package.html', {'package': package_name, 'bug_list': bug_list}, context_instance=RequestContext(request))
def search(request): """ View: render the bug table resulting from the current search. """ package = request.GET.get('query') bug_list = [] page = None info = None if package: queries = SoapQueries() bugs = queries.get_all_packages_bugs(package) bugs.sort(reverse=True) # 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) bug_list = queries.get_bugs_status(page.object_list) def severitysort(a, b): """Sort by severity and then by modify date""" d = severities[b['severity']] - severities[a['severity']] if d: return d return b['last_modified'] - a['last_modified'] bug_list.sort(severitysort) _set_fav_pkgs(request, bug_list) if not bug_list: info = 'No results found for your search, please try again' else: info = 'Enter a package name to search for (will connect to full text'\ ' search soon)' return render_to_response('search.html', {'bug_list': bug_list, 'query': package, 'info_to_user': info, 'page': page, 'title': 'Latest bugs in %s' % package}, context_instance=RequestContext(request))
def bug(request, bug_number=None): """ Renders a bug page. If the given bug page has been reached as a result of a POST action, the data sent will be processed by process_bug_post and the bug will be rendered after that to the user. """ # Process get if request.method == 'GET' and not bug_number: bug_number = request.GET['id'].strip() # Process post info = process_bug_post(request, bug_number) # FIXME: we need API request.user.subscribed = False queries = SoapQueries() try: b = re.sub('[a-zA-Z#]','', bug_number) bug_number = int(b) bug_status = queries.get_bugs_status(bug_number)[0] except (IndexError, ValueError): return render_to_response('search.html', {'bug_number': bug_number, 'info_to_user': '******', 'bug_originator': '', 'bug_status': '', 'bug_messages': '', 'bug_is_fav': ''}, context_instance=RequestContext(request)) bug_originator = email.Utils.parseaddr(bug_status['originator']) bug_log = queries.get_bug_log(bug_number) # having as a selected bug is not the same as subscribing if request.user.is_authenticated(): bug_is_fav = bool(request.user.bug_set.filter(number=bug_number)[:1]) else: bug_is_fav = bug_number in request.session.get('bug_set', []) # Regular expressions to parse the mails from_re = re.compile('^From: ?(.+)$', re.MULTILINE) subject_re = re.compile('^Subject: ?(.+)$', re.MULTILINE) date_re = re.compile('^Date: ?(.+)$', re.MULTILINE) bug_messages = [] for item in bug_log: message = {} # Parse the header from_value = from_re.findall(item['header']) subject_value = subject_re.findall(item['header']) date_value = date_re.findall(item['header']) # Filter the value if from_value: e_from = email.Utils.parseaddr(from_value[0]) d_from = email.Header.decode_header(e_from[0]) if (d_from[0][1] != None): message['from'] = [d_from[0][0].decode(d_from[0][1]), e_from[1]] else: message['from'] = [e_from[0], e_from[1]] if not message['from'][0] and message['from'][1]: message['from'][0] = message['from'][1] if subject_value: message['subject'] = subject_value[0] if date_value: message['date'] = email.Utils.mktime_tz(email.Utils.parsedate_tz( date_value[0])) # Get the body message['body'] = '' content = item['header'] + '\n' + item['body'] content = email.message_from_string(content) if content.is_multipart(): for part in content.walk(): if (part.get_content_maintype() == 'multipart'): continue if part['content-disposition'] and\ part['content-disposition'][:10] == 'attachment': message['body'] += '[attach: %s]' % part.get_filename() else: message['body'] += part.get_payload(decode=1) + '\n' else: message['body'] = content.get_payload(decode=1) bug_messages.append(message) return render_to_response('bug.html', {'bug_number': bug_number, 'info_to_user': info, 'bug_originator': bug_originator, 'bug_status': bug_status, 'bug_messages': bug_messages, 'bug_is_fav': bug_is_fav}, context_instance=RequestContext(request))
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}