author | Tero Marttila <terom@paivola.fi> |
Sun, 14 Sep 2014 17:19:28 +0300 | |
changeset 134 | 08a0056f6175 |
parent 126 | 2e0f7cbe528f |
permissions | -rw-r--r-- |
93
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
import os, os.path |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
import pypngtile as pt |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
from werkzeug import Response, exceptions |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
from pngtile import render |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
# path to images |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
DATA_ROOT = os.environ.get("PNGTILE_DATA_PATH") or os.path.abspath('data/') |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
# only open each image once |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
IMAGE_CACHE = {} |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
### Parse request data |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
def get_path (req_path) : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
Returns the name and path requested |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
# check DATA_ROOT exists.. |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
if not os.path.isdir(DATA_ROOT) : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
raise exceptions.InternalServerError("Missing DATA_ROOT") |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
# path to image |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
image_name = req_path.lstrip('/') |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
# build absolute path |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
image_path = os.path.abspath(os.path.join(DATA_ROOT, image_name)) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
# ensure the path points inside the data root |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
if not image_path.startswith(DATA_ROOT) : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
raise exceptions.NotFound(image_name) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
return image_name, image_path |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
def get_image (name, path) : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
Gets an Image object from the cache, ensuring that the cached is available |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
# get Image object |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
if path in IMAGE_CACHE : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
# get from cache |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
image = IMAGE_CACHE[path] |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
else : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
# open |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
image = pt.Image(path) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
# check |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
51 |
if image.status() not in (pt.CACHE_FRESH, pt.CACHE_STALE) : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
raise exceptions.InternalServerError("Image cache not available: %s" % name) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
54 |
# load |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
55 |
image.open() |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
56 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
57 |
# cache |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
58 |
IMAGE_CACHE[path] = image |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
59 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
60 |
return image |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
61 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
62 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
63 |
### Handle werkzeug.Request objects -> werkzeug.Response |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
64 |
def handle_dir (req, name, path) : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
65 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
66 |
Handle request for a directory |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
67 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
68 |
|
107 | 69 |
prefix = req.script_root |
70 |
||
93
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
71 |
return Response(render.dir_html(prefix, name, path), content_type="text/html") |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
72 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
73 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
74 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
75 |
def handle_img_viewport (req, image, name) : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
76 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
77 |
Handle request for image viewport |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
78 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
79 |
|
107 | 80 |
prefix = req.script_root |
93
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
81 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
82 |
# viewport |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
83 |
return Response(render.img_html(prefix, name, image), content_type="text/html") |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
84 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
85 |
|
103
1a6a6957197d
basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
86 |
def handle_img_region (req, image, cache) : |
93
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
87 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
88 |
Handle request for an image region |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
89 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
90 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
91 |
# specific image |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
92 |
width = int(req.args['w']) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
93 |
height = int(req.args['h']) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
94 |
cx = int(req.args['cx']) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
95 |
cy = int(req.args['cy']) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
96 |
zoom = int(req.args.get('zl', "0")) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
97 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
98 |
try : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
99 |
# yay full render |
103
1a6a6957197d
basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
100 |
return Response(render.img_png_region(image, cx, cy, zoom, width, height, cache), content_type="image/png") |
93
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
101 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
102 |
except ValueError, ex : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
103 |
# too large |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
104 |
raise exceptions.Forbidden(str(ex)) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
105 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
106 |
|
103
1a6a6957197d
basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
107 |
def handle_img_tile (req, image, cache) : |
93
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
108 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
109 |
Handle request for image tile |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
110 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
111 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
112 |
# tile |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
113 |
x = int(req.args['x']) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
114 |
y = int(req.args['y']) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
115 |
zoom = int(req.args.get('zl', "0")) |
103
1a6a6957197d
basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
116 |
|
1a6a6957197d
basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
117 |
# cache? |
93
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
118 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
119 |
# yay render |
103
1a6a6957197d
basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
120 |
return Response(render.img_png_tile(image, x, y, zoom, cache), content_type="image/png") |
93
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
121 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
122 |
## Dispatch req to handle_img_* |
103
1a6a6957197d
basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
123 |
def handle_img (req, name, path, cache) : |
93
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
124 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
125 |
Handle request for an image |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
126 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
127 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
128 |
# get image object |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
129 |
image = get_image(name, path) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
130 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
131 |
# what view? |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
132 |
if not req.args : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
133 |
return handle_img_viewport(req, image, name) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
134 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
135 |
elif 'w' in req.args and 'h' in req.args and 'cx' in req.args and 'cy' in req.args : |
103
1a6a6957197d
basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
136 |
return handle_img_region(req, image, cache) |
93
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
137 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
138 |
elif 'x' in req.args and 'y' in req.args : |
103
1a6a6957197d
basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
139 |
return handle_img_tile(req, image, cache) |
93
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
140 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
141 |
else : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
142 |
raise exceptions.BadRequest("Unknown args") |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
143 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
144 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
145 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
146 |
## Dispatch request to handle_* |
103
1a6a6957197d
basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
147 |
def handle_req (req, cache) : |
93
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
148 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
149 |
Main request handler |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
150 |
""" |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
151 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
152 |
# decode req |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
153 |
name, path = get_path(req.path) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
154 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
155 |
# determine dir/image |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
156 |
if os.path.isdir(path) : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
157 |
# directory |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
158 |
return handle_dir(req, name, path) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
159 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
160 |
elif not os.path.exists(path) : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
161 |
# no such file |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
162 |
raise exceptions.NotFound(name) |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
163 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
164 |
elif not name or not name.endswith('.png') : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
165 |
# invalid file |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
166 |
raise exceptions.BadRequest("Not a PNG file") |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
167 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
168 |
else : |
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
169 |
# image |
103
1a6a6957197d
basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents:
93
diff
changeset
|
170 |
return handle_img(req, name, path, cache) |
93
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
171 |
|
581cdb831b32
split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
172 |