pngtile/wsgi.py
author Tero Marttila <terom@fixme.fi>
Mon, 25 Jan 2010 18:46:59 +0200
changeset 92 e50ec4217fe6
parent 90 1c317e0628a7
child 93 581cdb831b32
permissions -rw-r--r--
separate non-wsgi render layer to render.png
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    Our WSGI web interface, which can serve the JS UI and any .png tiles via HTTP.
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
from werkzeug import Request, Response, responder
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
from werkzeug import exceptions
92
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
     7
42
a5bca7b0cd8a get DATA_ROOT from os.environ, fix use of prefix for dir view
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
     8
import os.path, os
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
import pypngtile as pt
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
92
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
    11
from pngtile import render
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
    12
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    13
# path to images
42
a5bca7b0cd8a get DATA_ROOT from os.environ, fix use of prefix for dir view
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    14
DATA_ROOT = os.environ.get("PNGTILE_DATA_PATH") or os.path.abspath('data/')
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    16
# only open each image once
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
IMAGE_CACHE = {}
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    19
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    20
### Manipulate request data
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    21
def get_req_path (req) :
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    22
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    23
        Returns the name and path requested
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    24
    """
90
1c317e0628a7 fail if DATA_ROOT is missing
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    25
    
1c317e0628a7 fail if DATA_ROOT is missing
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    26
    # check DATA_ROOT exists..
1c317e0628a7 fail if DATA_ROOT is missing
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    27
    if not os.path.isdir(DATA_ROOT) :
1c317e0628a7 fail if DATA_ROOT is missing
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    28
        raise exceptions.InternalServerError("Missing DATA_ROOT")
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    29
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
    # path to image
31
7eec7486a0af dir index view, report if image not cached
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
    31
    image_name = req.path.lstrip('/')
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    # build absolute path
31
7eec7486a0af dir index view, report if image not cached
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
    34
    image_path = os.path.abspath(os.path.join(DATA_ROOT, image_name))
42
a5bca7b0cd8a get DATA_ROOT from os.environ, fix use of prefix for dir view
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    35
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
    # ensure the path points inside the data root
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    if not image_path.startswith(DATA_ROOT) :
31
7eec7486a0af dir index view, report if image not cached
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
    38
        raise exceptions.NotFound(image_name)
7eec7486a0af dir index view, report if image not cached
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
    39
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    40
    return image_name, image_path
31
7eec7486a0af dir index view, report if image not cached
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
    41
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    42
def get_image (name, path) :
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    43
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    44
        Gets an Image object from the cache, ensuring that it is cached
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    45
    """
31
7eec7486a0af dir index view, report if image not cached
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
    46
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    # get Image object
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    48
    if path in IMAGE_CACHE :
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
        # get from cache
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    50
        image = IMAGE_CACHE[path]
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
    else :
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    53
        # open
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    54
        image = pt.Image(path)
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    55
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    56
        # check
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    57
        if image.status() not in (pt.CACHE_FRESH, pt.CACHE_STALE) :
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    58
            raise exceptions.InternalServerError("Image cache not available: %s" % name)
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    59
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    60
        # load
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    61
        image.open()
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
        # cache
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    64
        IMAGE_CACHE[path] = image
31
7eec7486a0af dir index view, report if image not cached
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
    65
    
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    66
    return image
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    67
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    68
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    69
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    70
### Handle request
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    71
def handle_dir (req, name, path) :
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    72
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    73
        Handle request for a directory
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    74
    """
92
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
    75
    
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
    76
    prefix = os.path.dirname(req.script_root).rstrip('/')
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    77
92
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
    78
    return Response(render.dir_html(prefix, name, path), content_type="text/html")
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    79
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    80
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    81
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    82
def handle_img_viewport (req, image, name) :
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    83
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    84
        Handle request for image viewport
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    85
    """
92
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
    86
    
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
    87
    prefix = os.path.dirname(req.script_root).rstrip('/')
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    88
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    89
    # viewport
92
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
    90
    return Response(render.img_html(prefix, name, image), content_type="text/html")
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    91
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    92
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    93
def handle_img_region (req, image) :
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    94
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    95
        Handle request for an image region
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    96
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    97
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    98
    # specific image
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    99
    width = int(req.args['w'])
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   100
    height = int(req.args['h'])
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   101
    cx = int(req.args['cx'])
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   102
    cy = int(req.args['cy'])
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   103
    zoom = int(req.args.get('zl', "0"))
92
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
   104
    
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
   105
    try :
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
   106
        # yay full render
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
   107
        return Response(render.img_png_region(image, cx, cy, zoom, width, height), content_type="image/png")
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   108
92
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
   109
    except ValueError, ex :
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
   110
        # too large
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
   111
        raise exceptions.Forbidden(str(ex))
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   112
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   113
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   114
def handle_img_tile (req, image) :
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   115
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   116
        Handle request for image tile
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   117
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   118
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   119
    # tile
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   120
    x = int(req.args['x'])
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   121
    y = int(req.args['y'])
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   122
    zoom = int(req.args.get('zl', "0"))
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   123
        
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   124
    # yay render
92
e50ec4217fe6 separate non-wsgi render layer to render.png
Tero Marttila <terom@fixme.fi>
parents: 90
diff changeset
   125
    return Response(render.img_png_tile(image, x, y, zoom), content_type="image/png")
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   126
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   127
## Dispatch req to handle_img_*
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   128
def handle_img (req, name, path) :
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   129
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   130
        Handle request for an image
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   131
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   132
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   133
    # get image object
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   134
    image = get_image(name, path)
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
    # what view?
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
    if not req.args :
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   138
        return handle_img_viewport(req, image, name)
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
40
5454d2e2f633 add link-to-image feature
Tero Marttila <terom@fixme.fi>
parents: 39
diff changeset
   140
    elif 'w' in req.args and 'h' in req.args and 'cx' in req.args and 'cy' in req.args :
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   141
        return handle_img_region(req, image)
40
5454d2e2f633 add link-to-image feature
Tero Marttila <terom@fixme.fi>
parents: 39
diff changeset
   142
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
    elif 'x' in req.args and 'y' in req.args :
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   144
        return handle_img_tile(req, image)
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   145
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
    else :
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
        raise exceptions.BadRequest("Unknown args")
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   148
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   149
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   150
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   151
## Dispatch request to handle_*
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   152
def handle_req (req) :
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   153
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   154
        Main request handler
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   155
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   156
    
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   157
    # decode req
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   158
    name, path = get_req_path(req)
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   159
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   160
    # determine dir/image
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   161
    if os.path.isdir(path) :
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   162
        # directory
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   163
        return handle_dir(req, name, path)
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   164
    
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   165
    elif not os.path.exists(path) :
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   166
        # no such file
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   167
        raise exceptions.NotFound(name)
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   168
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   169
    elif not name or not name.endswith('.png') :
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   170
        # invalid file
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   171
        raise exceptions.BadRequest("Not a PNG file")
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   172
    
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   173
    else :
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   174
        # image
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   175
        return handle_img(req, name, path)
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   176
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   177
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   178
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
@responder
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
def application (env, start_response) :
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   182
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   183
        Main WSGI entry point
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   184
    """
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   185
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
    req = Request(env, start_response)
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
    
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
    try :
89
02e5b9b08881 rework wsgi.py
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   189
        return handle_req(req)
30
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191
    except exceptions.HTTPException, e :
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
        return e
53e99e552122 move the python/web code in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   193