queries.py 1.31 KB

from django.core.exceptions import ObjectDoesNotExist
from .models import Thread, Vote, Message, PageHit


def get_messages_by_date():
    return Message.objects.order_by('received_time')


def get_messages_by_voted():
    """Query for the most voted messages sorting by the sum of
    voted and after by date."""
    
    sql = """
        SELECT 
            count(sav.id)
        FROM
            super_archives_vote AS sav
        WHERE
            super_archives_message.id = sav.message_id
    """
    messages = Message.objects.extra(
        select={
            'vote_count': sql,
        }
    )
    return messages.order_by('-vote_count', 'received_time')


def get_first_message_in_thread(mailinglist, thread_token):
    query = get_messages_by_date()
    query = query.filter(thread__mailinglist__name=mailinglist)
    try:
        query = query.filter(thread__subject_token=thread_token)[0]
    except IndexError:
        raise ObjectDoesNotExist
    return query


def get_latest_threads():
    return Thread.objects.order_by('-latest_message__received_time')


def get_hottest_threads():
    return Thread.objects.order_by('-score', '-latest_message__received_time')


def get_page_hits(path_info):
    pagehit = PageHit.objects.filter(url_path=path_info)
    
    if pagehit:
        return pagehit[0].hit_count
    return 0