author | Tero Marttila <terom@fixme.fi> |
Fri, 06 Feb 2009 23:55:23 +0200 | |
changeset 10 | d83b10c210e3 |
parent 9 | 2a47b00f60b0 |
child 11 | fa216534ae45 |
permissions | -rw-r--r-- |
5 | 1 |
|
7
d6a8258bd90e
YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
2 |
""" |
d6a8258bd90e
YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
3 |
Handling page requests |
d6a8258bd90e
YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
4 |
""" |
d6a8258bd90e
YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
5 |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
6 |
# for filesystem ops |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
7 |
import os, os.path |
7
d6a8258bd90e
YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
8 |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
9 |
# for ResponseError |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
10 |
import http |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
11 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
12 |
# for TemplatePage |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
13 |
import template |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
14 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
15 |
# path to directory containing the page heirarcy |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
16 |
PAGE_DIR = "pages" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
17 |
|
9 | 18 |
# path to directory containing the list of visible pages |
19 |
PAGE_LIST_FILE = os.path.join(PAGE_DIR, "list") |
|
20 |
||
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
21 |
class PageError (http.ResponseError) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
22 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
23 |
Error looking up/handling a page |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
24 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
25 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
26 |
pass |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
27 |
|
9 | 28 |
class PageList (object) : |
29 |
""" |
|
30 |
The list of pages |
|
31 |
""" |
|
32 |
||
33 |
def __init__ (self) : |
|
34 |
""" |
|
35 |
Loads the page list from the list file |
|
36 |
""" |
|
37 |
||
38 |
# initialize list of pages |
|
39 |
self.pages = [] |
|
40 |
||
41 |
# load from file |
|
42 |
self._load(PAGE_LIST_FILE) |
|
43 |
||
44 |
def _load (self, path) : |
|
45 |
""" |
|
46 |
Processes the lines in the given file |
|
47 |
""" |
|
48 |
||
49 |
for line in open(path, 'rb') : |
|
50 |
# ignore whitespace |
|
51 |
line = line.strip() |
|
52 |
||
53 |
# ignore empty lines |
|
54 |
if not line : |
|
55 |
continue |
|
56 |
||
57 |
# parse line |
|
58 |
url, title = line.split(':') |
|
59 |
||
60 |
# add |
|
61 |
self._add_item(url.strip(), title.strip()) |
|
62 |
||
63 |
def _add_item (self, url, title) : |
|
64 |
""" |
|
65 |
Add item to pages list |
|
66 |
""" |
|
67 |
||
10
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
68 |
# remove index from URL |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
69 |
if url.endswith('/index') or url == 'index' : |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
70 |
url = url[:-len('/index')] |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
71 |
|
9 | 72 |
self.pages.append((url, title)) |
73 |
||
74 |
def get_title (self, page) : |
|
75 |
""" |
|
76 |
Gets the title for the given page, or None if not found |
|
77 |
""" |
|
78 |
||
79 |
return dict(self.pages).get(page) |
|
80 |
||
81 |
def get_siblings (self, page) : |
|
82 |
""" |
|
83 |
Gets the (url, title) tuple list of siblings (including the given page itself) for the given page |
|
84 |
""" |
|
85 |
||
86 |
siblings = [] |
|
87 |
||
88 |
# parent url |
|
89 |
parent = os.path.split(page.url)[0] |
|
90 |
||
91 |
# how many segments in the page name |
|
92 |
segment_count = len(page.url.split('/')) |
|
93 |
||
94 |
# go through all pages |
|
95 |
for url, title in self.pages : |
|
96 |
# it's a sibling if the parent is the same, and the number of segments it the same |
|
97 |
if url.startswith(parent) and len(url.split('/')) == segment_count : |
|
98 |
siblings.append((url, title)) |
|
99 |
||
100 |
# return |
|
101 |
return siblings |
|
102 |
||
103 |
# global singleton instance |
|
104 |
page_list = PageList() |
|
105 |
||
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
106 |
class Page (object) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
107 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
108 |
This object represents the information about our attempt to render some specific page |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
109 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
110 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
111 |
def __init__ (self, url, path, basename, url_tail) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
112 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
113 |
Initialize the page at the given location |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
114 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
115 |
@param url the URL leading to this page |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
116 |
@param path the filesystem path to this page's file |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
117 |
@param basename the filesystem name of this page's file, without the file extension |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
118 |
@param url_trail trailing URL for this page |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
119 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
120 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
121 |
# store |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
122 |
self.url = url |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
123 |
self.path = path |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
124 |
self.basename = basename |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
125 |
self.url_tail = url_tail |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
126 |
|
10
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
127 |
# unbound |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
128 |
self.request = None |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
129 |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
130 |
# sub-init |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
131 |
self._init() |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
132 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
133 |
def _init (self) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
134 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
135 |
Do initial data loading, etc |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
136 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
137 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
138 |
pass |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
139 |
|
10
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
140 |
def bind_request (self, request) : |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
141 |
""" |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
142 |
Bind this page-render to the given request |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
143 |
""" |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
144 |
|
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
145 |
self.request = request |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
146 |
|
9 | 147 |
@property |
148 |
def title (self) : |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
149 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
150 |
Return the page's title |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
151 |
|
9 | 152 |
Defaults to the retreiving the page title from page_list, or basename in Titlecase. |
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
153 |
""" |
9 | 154 |
|
155 |
# lookup in page_list |
|
156 |
title = page_list.get_title(self.url) |
|
157 |
||
158 |
# fallback to titlecase |
|
159 |
if not title : |
|
160 |
title = self.basename.title() |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
161 |
|
9 | 162 |
return title |
163 |
||
164 |
@property |
|
165 |
def content (self) : |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
166 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
167 |
Return the page content as a string |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
168 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
169 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
170 |
abstract |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
171 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
172 |
class HTMLPage (Page) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
173 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
174 |
A simple .html page that's just passed through directly |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
175 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
176 |
|
9 | 177 |
@property |
178 |
def content (self) : |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
179 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
180 |
Opens the .html file, reads and returns contents |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
181 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
182 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
183 |
return open(self.path, 'rb').read() |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
184 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
185 |
class TemplatePage (Page) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
186 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
187 |
A template that's rendered using our template library |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
188 |
""" |
9 | 189 |
|
190 |
@property |
|
191 |
def content (self) : |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
192 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
193 |
Loads the .tmpl file, and renders it |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
194 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
195 |
|
10
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
196 |
return template.render_file(self.path, |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
197 |
request = self.request, |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
198 |
) |
7
d6a8258bd90e
YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
199 |
|
d6a8258bd90e
YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
200 |
# list of page handlers, by type |
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
201 |
TYPE_HANDLERS = [ |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
202 |
('html', HTMLPage ), |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
203 |
(template.TEMPLATE_EXT, TemplatePage ), |
7
d6a8258bd90e
YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
204 |
] |
d6a8258bd90e
YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
205 |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
206 |
def _lookup_handler (url, path, filename, basename, extension, tail) : |
5 | 207 |
""" |
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
208 |
We found the file that we looked for, now get its handler |
5 | 209 |
""" |
210 |
||
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
211 |
# find appropriate handler |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
212 |
for handler_ext, handler in TYPE_HANDLERS : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
213 |
# match against file extension? |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
214 |
if handler_ext == extension : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
215 |
# found handler, return instance |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
216 |
return handler(url, path, basename, tail) |
5 | 217 |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
218 |
# no handler found |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
219 |
raise PageError("No handler found for page %r of type %r" % (url, extension)) |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
220 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
221 |
def lookup (name) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
222 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
223 |
Look up and return a Page object for the given page, or raise an error |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
224 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
225 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
226 |
# inital path |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
227 |
path = PAGE_DIR |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
228 |
url_segments = [] |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
229 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
230 |
# name segments |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
231 |
segments = name.split('/') |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
232 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
233 |
# iterate through the parts of the page segments |
10
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
234 |
while True : |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
235 |
segment = None |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
236 |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
237 |
# pop segment |
10
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
238 |
if segments : |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
239 |
segment = segments.pop(0) |
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
240 |
|
10
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
241 |
url_segments.append(segment) |
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
242 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
243 |
# translate empty -> index |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
244 |
if not segment : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
245 |
segment = 'index' |
10
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
246 |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
247 |
# look for it in the dir |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
248 |
for filename in os.listdir(path) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
249 |
# build full file path |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
250 |
file_path = os.path.join(path, filename) |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
251 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
252 |
# stat, recurse into subdirectory? |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
253 |
if os.path.isdir(file_path) and filename == segment : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
254 |
# use new dir |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
255 |
path = file_path |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
256 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
257 |
# break for-loop to look at next segment |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
258 |
break |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
259 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
260 |
# split into basename + extension |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
261 |
basename, extension = os.path.splitext(filename) |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
262 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
263 |
# ...remove that dot |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
264 |
extension = extension.lstrip('.') |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
265 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
266 |
# match against requested page name? |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
267 |
if basename == segment : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
268 |
# found the file we wanted |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
269 |
return _lookup_handler('/'.join(url_segments), file_path, filename, basename, extension, '/'.join(segments)) |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
270 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
271 |
else : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
272 |
# inspect next file in dir |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
273 |
continue |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
274 |
|
10
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
275 |
else : |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
276 |
# did not find any dir or file, break out of while loop |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
277 |
break |
d83b10c210e3
some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
278 |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
279 |
# did not find the filename we were looking for in os.listdir |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
280 |
raise PageError("Page not found: %s" % name, status='404 Not Found') |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
281 |