rrdweb/html.py
author Tero Marttila <terom@fixme.fi>
Tue, 25 Jan 2011 01:19:40 +0200
changeset 31 cd9ca8068b09
parent 25 9fa9d881fd87
permissions -rw-r--r--
doc: clean up pmacct.conf
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
13
30f866582b46 html.urljoin
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
     8
def urljoin (*parts) :
30f866582b46 html.urljoin
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
     9
    url = ""
30f866582b46 html.urljoin
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    10
30f866582b46 html.urljoin
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    11
    for part in parts :
30f866582b46 html.urljoin
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    12
        if part :
30f866582b46 html.urljoin
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    13
            if url :
30f866582b46 html.urljoin
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    14
                url += "/" + part
30f866582b46 html.urljoin
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    15
            else :
30f866582b46 html.urljoin
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    16
                url += part
30f866582b46 html.urljoin
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    17
30f866582b46 html.urljoin
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    18
    return url
30f866582b46 html.urljoin
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    19
22
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    20
class BaseFormatter (object) :
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
        Trivial HTML template formatter.
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
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    25
    def __init__ (self, basedir, encoding = 'utf-8') :
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    26
        """
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    27
                basedir     - directory containing the required .html files
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    28
                encoding    - unicode encoding of file content (default: utf-8)
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    29
        """
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
        self.basedir = os.path.abspath(basedir)
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    32
        self.encoding = encoding
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
    def render (self, name, **vars) :
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    35
        """
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    36
            Format and return given template.
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    37
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    38
                name        - basename of template without .html
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    39
                **vars      - template context
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
            The template is rendered and returned as unicode.
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    42
        """
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    43
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    44
        path = os.path.join(self.basedir, name) + '.html'
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    45
        
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    46
        # read contents
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    47
        data = open(path).read().decode(self.encoding)
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    48
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    49
        # format
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    50
        return data % vars
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    51
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    52
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    53
# XXX: legacy
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    54
class Formatter (BaseFormatter) :
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    55
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
    TEMPLATE_DIR = 'etc/templates'
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
    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
    59
    TARGET_URL = '%(prefix)s?t=%(target)s'
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    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
    62
        BaseFormatter.__init__(self, template_dir, 'utf-8')
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    63
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
        self.url_prefix = url_prefix
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
        self.img_url = img_url
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
        self.target_url = target_url
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
    def page (self, content) :
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
            Format page contents
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
        """
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
25
9fa9d881fd87 Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
parents: 22 13
diff changeset
    73
        return self.render('layout', 
9fa9d881fd87 Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
parents: 22 13
diff changeset
    74
                title       = 'MRTG',
9fa9d881fd87 Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
parents: 22 13
diff changeset
    75
                breadcrumb  = '',   # XXX: not supported
9fa9d881fd87 Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
parents: 22 13
diff changeset
    76
                content     = content
9fa9d881fd87 Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
parents: 22 13
diff changeset
    77
        )
5
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
    def fmt_img_url (self, style, interval, target) :
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
        return self.img_url % dict(
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
            prefix      = self.url_prefix,
11
f488f8a6e1d8 drop usage of target-object
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    82
            target      = target,
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
            style       = style,
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
            interval    = interval,
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
        )
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
    def fmt_target_url (self, target) :
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
        return self.target_url % dict(
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
            prefix      = self.url_prefix,
11
f488f8a6e1d8 drop usage of target-object
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    90
            target      = target,
5
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
25
9fa9d881fd87 Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
parents: 22 13
diff changeset
    93
    def overview (self, dirname, targets) :
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
        """
11
f488f8a6e1d8 drop usage of target-object
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    95
            Format target listing for given list of (target, title) pairs
5
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('overview', 
25
9fa9d881fd87 Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
parents: 22 13
diff changeset
    99
            dir                 = dirname,
9fa9d881fd87 Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
parents: 22 13
diff changeset
   100
            overview_subdirs    = '',   # XXX: not supported
9fa9d881fd87 Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
parents: 22 13
diff changeset
   101
            overview_graphs     = '\n'.join(
22
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   102
                self.render('overview-target',
11
f488f8a6e1d8 drop usage of target-object
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   103
                    title               = title,
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
                    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
   105
                    target_url          = self.fmt_target_url(target),
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
11
f488f8a6e1d8 drop usage of target-object
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   107
                ) for target, title in targets
25
9fa9d881fd87 Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
parents: 22 13
diff changeset
   108
            ),
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
        ))
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
11
f488f8a6e1d8 drop usage of target-object
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   111
    def target (self, target, title) :
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
        """
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
            Format a specific target
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
        """
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
        
22
809686edcd4c New dynamic WSGI frontend
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   116
        return self.page(self.render('target',
11
f488f8a6e1d8 drop usage of target-object
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   117
            title               = title,
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
            daily_img           = self.fmt_img_url('detail', 'daily', target),
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
            weekly_img          = self.fmt_img_url('detail', 'weekly', target),
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
            yearly_img          = self.fmt_img_url('detail', 'yearly', target),
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
        ))
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122