qmsk_www_pages/pages.py
author Tero Marttila <terom@paivola.fi>
Sun, 14 Sep 2014 01:45:17 +0300
changeset 201 edcbbc94f90d
parent 200 1757261f2b95
child 65 67d8600fa0a1
permissions -rw-r--r--
pages: tree breadcrumb
197
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
from django.conf import settings
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
import codecs
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
import logging; log = logging.getLogger('qmsk_www_pages.pages')
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
import os, os.path
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
     7
class Tree (object):
200
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
     8
    INDEX = 'index'
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
     9
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    10
    @classmethod
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    11
    def lookup (cls, parts):
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    12
        path = settings.QMSK_WWW_PAGES_DIR
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    13
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    14
        for part in parts:
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    15
            if part.startswith('.'):
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    16
                # evil
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    17
                return None
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    18
            
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    19
            if not part:
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    20
                continue
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    21
        
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    22
            path = os.path.join(path, part)
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    23
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    24
            if not os.path.exists(path):
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    25
                return None
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    26
            
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    27
            if not os.path.isdir(path):
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    28
                return None
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    29
        
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    30
        return cls(path, parts)
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    31
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    32
    def __init__ (self, path, parts):
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    33
        self.path = path
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    34
        self.parts = parts
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
    35
200
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    36
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    37
    def url (self, tree=None, page=None):
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    38
        path = '/'.join(self.parts)
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    39
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    40
        if path:
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    41
            path += '/'
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    42
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    43
        if tree:
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    44
            path = tree + '/'
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    45
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    46
        if page:
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    47
            path += page
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    48
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    49
        return path
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    50
201
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
    51
    def breadcrumb (self):
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
    52
        path = []
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
    53
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
    54
        yield '', 'Home'
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
    55
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
    56
        for part in self.parts:
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
    57
            path.append(part)
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
    58
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
    59
            yield '/'.join(path) + '/', part
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
    60
200
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    61
    def scan (self):
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    62
        """
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    63
            Scan for files in tree.
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    64
        """
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    65
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    66
        for filename in os.listdir(self.path):
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    67
            if filename.startswith('.'):
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    68
                continue
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    69
            
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    70
            if '.' in filename:
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    71
                file_name, file_type = filename.rsplit('.', 1)
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    72
            else:
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    73
                file_name = filename
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    74
                file_type = None
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    75
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    76
            if not file_name:
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    77
                continue
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    78
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    79
            path = os.path.join(self.path, filename)
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    80
            
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    81
            yield path, file_name, file_type
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    82
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    83
    def list (self):
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    84
        """
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    85
            Lists all Trees and Pages for this Tree
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    86
        """
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    87
        
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    88
        for path, file_name, file_type in self.scan():
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    89
            # trees
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    90
            if os.path.isdir(path):
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    91
                yield self.url(tree=file_name), file_name
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    92
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    93
            if file_name == self.INDEX:
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    94
                continue
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    95
            
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    96
            # pages
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    97
            if not file_type:
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    98
                continue
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
    99
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   100
            if file_type not in TYPES:
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   101
                continue
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   102
            
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   103
            yield self.url(page=file_name), file_name
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   104
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   105
    def page (self, name):
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   106
        """
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   107
            Scans through tree looking for a matching page.
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   108
            
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   109
            Returns Page.
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   110
        """
200
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   111
        
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   112
        if not name:
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   113
            name = self.INDEX
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   114
200
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   115
        for path, file_name, file_type in self.scan():
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   116
            # match on name
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   117
            if file_name != name:
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   118
                continue
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   119
            
200
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   120
            # match on type
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   121
            if not file_type:
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   122
                continue
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   123
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   124
            page_type = TYPES.get(file_type)
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   125
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   126
            if not page_type:
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   127
                continue
200
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   128
            
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   129
            # out
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   130
            return page_type(
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   131
                path    = path,
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   132
                name    = name,
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   133
                tree    = self,
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   134
            )
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   135
197
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   136
class Page (object):
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   137
    ENCODING = 'utf-8'
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   139
    @classmethod
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   140
    def lookup (cls, page):
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   141
        """
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   142
            Lookup a Page from disk.
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   143
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   144
            Returns None if there is no such page.
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   145
        """
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   146
        
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   147
        log.info("page=%r", page)
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   148
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   149
        if page:
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   150
            parts = page.split('/')
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   151
        else:
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   152
            parts = [ ]
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   153
            
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   154
        if parts:
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   155
            page_name = parts.pop(-1)
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   156
            tree_parts = parts
197
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   157
        else:
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   158
            page_name = ''
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   159
            tree_parts = []
197
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   160
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   161
        # scan dir
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   162
        tree = Tree.lookup(tree_parts)
197
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   163
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   164
        if not tree:
197
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   165
            return None
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   166
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   167
        # scan page
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   168
        page = tree.page(page_name)
197
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   169
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   170
        if not page:
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   171
            return None
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   172
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   173
        return page
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   174
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   175
    def __init__ (self, path, name, tree, encoding=ENCODING):
197
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   176
        self.path = path
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   177
        self.name = name
199
9fd827df377f pages: Tree
Tero Marttila <terom@paivola.fi>
parents: 198
diff changeset
   178
        self.tree = tree
197
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   179
        self.encoding = encoding
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   180
201
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
   181
    def url (self):
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
   182
        return self.tree.url(page=self.name)
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
   183
197
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   184
    def open (self):
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   185
        return codecs.open(self.path, encoding=self.encoding)
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   186
198
66cf32a10222 page breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 197
diff changeset
   187
    def breadcrumb (self):
201
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
   188
        for path, name in self.tree.breadcrumb():
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
   189
            yield path, name
200
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   190
        
1757261f2b95 pages: list
Tero Marttila <terom@paivola.fi>
parents: 199
diff changeset
   191
        if self.name != self.tree.INDEX:
201
edcbbc94f90d pages: tree breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 200
diff changeset
   192
            yield self.url(), self.name
198
66cf32a10222 page breadcrumb
Tero Marttila <terom@paivola.fi>
parents: 197
diff changeset
   193
197
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   194
    def render (self, request):
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   195
        raise NotImplementedError()
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   196
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   197
class HTML_Page (Page):
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   198
    def render (self, request):
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   199
        return self.open().read()
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   200
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   201
TYPES = {
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   202
    'html':         HTML_Page,
11a6d8fea463 qmsk_www_pages: pages.Page.lookup() and .html support; logging
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   203
}