pngtile/handlers.py
author Tero Marttila <terom@fixme.fi>
Tue, 26 Jan 2010 21:19:45 +0200
changeset 122 8e4ff23e33f5
parent 107 9fcf58fb113a
child 126 2e0f7cbe528f
permissions -rw-r--r--
fix make clean
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
9fcf58fb113a fix prefix for lighttpd..
Tero Marttila <terom@fixme.fi>
parents: 103
diff changeset
    69
    prefix = req.script_root
9fcf58fb113a fix prefix for lighttpd..
Tero Marttila <terom@fixme.fi>
parents: 103
diff changeset
    70
    
9fcf58fb113a fix prefix for lighttpd..
Tero Marttila <terom@fixme.fi>
parents: 103
diff changeset
    71
    print "req.script_root:", req.script_root
9fcf58fb113a fix prefix for lighttpd..
Tero Marttila <terom@fixme.fi>
parents: 103
diff changeset
    72
    print "prefix", prefix
9fcf58fb113a fix prefix for lighttpd..
Tero Marttila <terom@fixme.fi>
parents: 103
diff changeset
    73
93
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
    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
    76
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
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
def handle_img_viewport (req, image, name) :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    """
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
        Handle request for image viewport
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
    """
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
    
107
9fcf58fb113a fix prefix for lighttpd..
Tero Marttila <terom@fixme.fi>
parents: 103
diff changeset
    84
    prefix = req.script_root
93
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
    # viewport
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
    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
    88
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
103
1a6a6957197d basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
    90
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
    91
    """
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
        Handle request for an image region
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
    """
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
    # specific image
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
    width = int(req.args['w'])
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
    height = int(req.args['h'])
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
    cx = int(req.args['cx'])
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
    cy = int(req.args['cy'])
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
    zoom = int(req.args.get('zl', "0"))
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
    try :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
        # yay full render
103
1a6a6957197d basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   104
        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
   105
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
    except ValueError, ex :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
        # too large
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
        raise exceptions.Forbidden(str(ex))
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
103
1a6a6957197d basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   111
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
   112
    """
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
        Handle request for image tile
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
    """
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
    # tile
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
    x = int(req.args['x'])
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
    y = int(req.args['y'])
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
    zoom = int(req.args.get('zl', "0"))
103
1a6a6957197d basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   120
1a6a6957197d basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   121
    # cache?
93
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
        
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
    # yay render
103
1a6a6957197d basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   124
    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
   125
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
## Dispatch req to handle_img_*
103
1a6a6957197d basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   127
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
   128
    """
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
        Handle request for an image
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
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
    # get image object
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
    image = get_image(name, path)
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
    # what view?
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
    if not req.args :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
        return handle_img_viewport(req, image, name)
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
    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
   140
        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
   141
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
    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
   143
        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
   144
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
    else :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
        raise exceptions.BadRequest("Unknown args")
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
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
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
## Dispatch request to handle_*
103
1a6a6957197d basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   151
def handle_req (req, cache) :
93
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
    """
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
        Main request handler
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
    
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
    # decode req
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
    name, path = get_path(req.path)
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
    # determine dir/image
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
    if os.path.isdir(path) :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
        # directory
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
        return handle_dir(req, name, path)
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 os.path.exists(path) :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
        # no such file
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
        raise exceptions.NotFound(name)
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
    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
   169
        # invalid file
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
        raise exceptions.BadRequest("Not a PNG file")
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
    else :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
        # image
103
1a6a6957197d basic caching behaviour, not use yet
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   174
        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
   175
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176