コード例 #1
0
ファイル: views.py プロジェクト: dpaleino/amancay
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))
コード例 #2
0
ファイル: search.py プロジェクト: dpaleino/amancay
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))
コード例 #3
0
ファイル: bugs.py プロジェクト: dpaleino/amancay
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))
コード例 #4
0
ファイル: tables.py プロジェクト: dpaleino/amancay
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}