handlers.py
author Tero Marttila <terom@fixme.fi>
Mon, 09 Feb 2009 06:04:27 +0200
changeset 56 69494e4a5ecc
parent 55 5667d2bbdc50
child 59 8ec729c5d998
permissions -rw-r--r--
tweak layout slightly
"""
    Our URL action handlers
"""

import datetime, calendar, pytz

from qmsk.web import http, template

import urls, channels, helpers
import preferences as prefs
from preferences import preferences

# load templates from here
templates = template.TemplateLoader("templates",
    _helper_class   = helpers.Helpers,
    urls            = urls,
    channel_list    = channels.channel_list,
)

def index (request) :
    """
        The topmost index page, display a list of available channels, perhaps some general stats
    """
    
    return templates.render_to_response("index",
        req             = request,
    )

def channel_select (request, channel) :
    """
        Redirect to the appropriate channel_view
    """
   
    return http.Redirect(urls.channel_view.build(request, channel=channel))

@preferences.handler(prefs.Formatter, prefs.Timezone)
def channel_view (request, channel, count, formatter, timezone) :
    """
        The main channel view page, display the most important info, and all requisite links
    """
    
    # get latest events
    lines = channel.source.get_latest(count)

    # lines
    lines = formatter.format_html(lines)

    return templates.render_to_response("channel_view",
        req             = request,
        timezone        = timezone,
        channel         = channel,
        count           = count,
        formatter       = formatter,
        lines           = lines,
    )

def channel_last (request, channel, count, format) :
    """
        Display the last x lines of channel messages in various formats
    """

    if format == 'txt' :
        # XXX: formatting
#        return http.Response('\n'.join(str(channel.source.get_latest(count))), 'text/plain')
         pass

    elif format == 'html' :
        pass

    else :
        raise http.ResponseError("Unknown filetype %r" % format)

@preferences.handler(prefs.Timezone)
def channel_calendar (request, channel, year, month, timezone) :
    """
        Display a list of avilable logs for some month
    """

    # current date as default
    now = timezone.localize(datetime.datetime.now())

    # target year/month
    target = timezone.localize(datetime.datetime(
        year    = year if year else now.year,
        month   = month if month else now.month,
        day     = 1
    ))

    # get set of days available
    days = channel.source.get_month_days(target)

    # display calendar
    return templates.render_to_response("channel_calendar",
        req             = request,
        timezone        = timezone,
        channel         = channel,
        calendar        = calendar.Calendar(),
        month           = target.date(),
        days            = days,
    )

@preferences.handler(prefs.Formatter, prefs.Timezone)
def channel_date (request, channel, date, formatter, timezone) :
    """
        Display all log data for the given date
    """
    
    # fix date timezone
    date = date.replace(tzinfo=timezone)

    # get latest events
    lines = channel.source.get_date(date)

    # lines
    lines = formatter.format_html(lines)

    return templates.render_to_response("channel_date",
        req             = request,
        timezone        = timezone,
        channel         = channel,
        formatter       = formatter,
        date            = date,
        lines           = lines,
    )

def channel_search (request, channel, q) :
    """
        Display the search form for the channel for GET, or do the search for POST
    """

    pass