rrdweb/html.py
author Tero Marttila <terom@fixme.fi>
Tue, 02 Nov 2010 04:16:23 +0200
changeset 23 50f1b76b0835
parent 22 809686edcd4c
child 25 9fa9d881fd87
permissions -rw-r--r--
Add sample rrdweb.cgi file
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
"""
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
    HTML output
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
"""
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
import os.path
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
22
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
     8
class BaseFormatter (object) :
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
     9
    """
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    10
        Trivial HTML template formatter.
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    11
    """
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    12
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    13
    def __init__ (self, basedir, encoding = 'utf-8') :
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    14
        """
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    15
                basedir     - directory containing the required .html files
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    16
                encoding    - unicode encoding of file content (default: utf-8)
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    17
        """
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    18
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    19
        self.basedir = os.path.abspath(basedir)
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    20
        self.encoding = encoding
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    21
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    22
    def render (self, name, **vars) :
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    23
        """
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    24
            Format and return given template.
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    25
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    26
                name        - basename of template without .html
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    27
                **vars      - template context
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    28
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    29
            The template is rendered and returned as unicode.
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    30
        """
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    31
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    32
        path = os.path.join(self.basedir, name) + '.html'
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    33
        
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    34
        # read contents
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    35
        data = open(path).read().decode(self.encoding)
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    36
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    37
        # format
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    38
        return data % vars
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    39
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    40
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    41
# XXX: legacy
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    42
class Formatter (BaseFormatter) :
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    43
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    TEMPLATE_DIR = 'etc/templates'
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
    IMG_URL = '%(prefix)s?t=%(target)s&s=%(style)&i=%(interval)s'
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    TARGET_URL = '%(prefix)s?t=%(target)s'
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
    def __init__ (self, template_dir=TEMPLATE_DIR, url_prefix='', img_url=IMG_URL, target_url=TARGET_URL) :
22
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    50
        BaseFormatter.__init__(self, template_dir, 'utf-8')
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    51
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
        self.url_prefix = url_prefix
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
        self.img_url = img_url
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
        self.target_url = target_url
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
    def page (self, content) :
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
        """
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
            Format page contents
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
        """
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
22
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    61
        return self.render('layout', content=content)
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
    def fmt_img_url (self, style, interval, target) :
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
        return self.img_url % dict(
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
            prefix      = self.url_prefix,
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
            target      = target.name,
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
            style       = style,
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
            interval    = interval,
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
        )
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
    def fmt_target_url (self, target) :
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
        return self.target_url % dict(
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
            prefix      = self.url_prefix,
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
            target      = target.name,
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
        )
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
    def overview (self, targets) :
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
        """
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
            Format target listing
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
        """
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
22
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    82
        return self.page(self.render('overview', 
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
            overview_graphs      = '\n'.join(
22
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    84
                self.render('overview-target',
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
                    title               = target.title,
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
                    daily_overview_img  = self.fmt_img_url('overview', 'daily', target),
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
                    target_url          = self.fmt_target_url(target),
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
                ) for target in targets
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
            )
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
        ))
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
    def target (self, target) :
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
        """
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
            Format a specific target
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
        """
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
        
22
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    98
        return self.page(self.render('target',
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
            title               = target.title,
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
            daily_img           = self.fmt_img_url('detail', 'daily', target),
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
            weekly_img          = self.fmt_img_url('detail', 'weekly', target),
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
            yearly_img          = self.fmt_img_url('detail', 'yearly', target),
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
        ))
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105