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