pvl/verkko/wlan.py
author Tero Marttila <terom@paivola.fi>
Sun, 22 Dec 2013 19:03:57 +0200
changeset 336 edaa5d0aa57d
parent 243 787c5f93f434
permissions -rw-r--r--
version 0.6.1: pvl.hosts forward/reverse delegation, and include= support
from pvl.verkko import web, db, table
from pvl.web import html, urls

import datetime
import logging; log = logging.getLogger('pvl.verkko.wlan')

class WLANSta (object) :
    """
        A WLAN STA (client) with ap/ssid/sta and starts/ends.
    """

    DATE_FMT = '%Y%m%d %H:%M'
    TIME_FMT = '%H:%M:%S'

    @classmethod
    def format_datetime (cls, dt) :
        if dt.date() == datetime.date.today() :
            return dt.strftime(cls.TIME_FMT)
        else :
            return dt.strftime(cls.DATE_FMT)

    def seen (self) :
        return (
                html.span(title=self.first_seen)(self.format_datetime(self.first_seen)),
                '-',
                html.span(title=self.last_seen)(self.format_datetime(self.last_seen))
        )

db.mapper(WLANSta, db.wlan_sta, properties=dict(

))

class WLANTable (table.Table) :
    """
        <table> of WLAN STA
    """

    ITEMS   = "WLAN Stations"
    COLUMNS = (
        table.Column('ap',          "Access Point",     WLANSta.ap,
            rowfilter   = True,
        ),
        table.Column('wlan',        "SSID",             WLANSta.wlan,
            rowfilter   = True,
        ),
        table.Column('sta',         "MAC",              WLANSta.sta,
            rowfilter   = True,
        ),
        table.Column('seen',        "Seen",             WLANSta.last_seen,  WLANSta.seen),
    )
    
    # XXX: have to set again
    ATTRS = dict((col.attr, col) for col in COLUMNS)

    # default
    SORT = WLANSta.last_seen.desc()
    PAGE = 20

class WLANHandler (table.TableHandler, web.DatabaseHandler) :
    """
        Combined database + <table>
    """

    CSS = web.DatabaseHandler.CSS + table.TableHandler.CSS + (
        "/static/wlan.css", 
    )
    
    # view
    TABLE = WLANTable
    DB_CLASS = WLANSta

class Application (web.Application) :
    URLS = urls.Map((
        urls.rule('/',                       WLANHandler),
    ))