pngtile/handlers.py
author Tero Marttila <terom@fixme.fi>
Tue, 26 Jan 2010 01:37:01 +0200
changeset 104 b5ae988c78b8
parent 103 1a6a6957197d
child 107 9fcf58fb113a
permissions -rw-r--r--
add .path attr to pypngtile.Image
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
    
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    prefix = os.path.dirname(req.script_root).rstrip('/')
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
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
    
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    prefix = os.path.dirname(req.script_root).rstrip('/')
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