handlers.py
author Tero Marttila <terom@fixme.fi>
Mon, 09 Feb 2009 06:19:12 +0200
changeset 58 ce028d356e1f
parent 56 69494e4a5ecc
child 59 8ec729c5d998
permissions -rw-r--r--
special-case current month in calendar
"""
    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