pngtile/handlers.py
author Tero Marttila <terom@fixme.fi>
Mon, 25 Jan 2010 19:45:50 +0200
changeset 93 581cdb831b32
child 103 1a6a6957197d
permissions -rw-r--r--
split off werkzeug code to separate handlers module..
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
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
### Parse request data
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
def get_path (req_path) :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
    """
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
        Returns the name and path requested
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
    
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
    # check DATA_ROOT exists..
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
    if not os.path.isdir(DATA_ROOT) :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
        raise exceptions.InternalServerError("Missing DATA_ROOT")
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    # path to image
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    image_name = req_path.lstrip('/')
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    # build absolute path
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
    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
    30
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    # 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
    32
    if not image_path.startswith(DATA_ROOT) :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        raise exceptions.NotFound(image_name)
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    return image_name, image_path
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
def get_image (name, path) :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    """
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
        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
    40
    """
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
    # get Image object
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    if path in IMAGE_CACHE :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
        # get from cache
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
        image = IMAGE_CACHE[path]
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    else :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
        # open
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
        image = pt.Image(path)
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
        # check
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
        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
    53
            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
    54
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
        # load
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
        image.open()
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
        # cache
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
        IMAGE_CACHE[path] = image
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
    
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    return image
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
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
### Handle werkzeug.Request objects -> werkzeug.Response
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
def handle_dir (req, name, path) :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
    """
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
        Handle request for a directory
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
    
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
    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
    71
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    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
    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
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
def handle_img_viewport (req, image, name) :
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
        Handle request for image viewport
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
    
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
    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
    82
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
    # viewport
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
    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
    85
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
def handle_img_region (req, image) :
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
        Handle request for an image region
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
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
    # specific image
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
    width = int(req.args['w'])
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
    height = int(req.args['h'])
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
    cx = int(req.args['cx'])
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
    cy = int(req.args['cy'])
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
    zoom = int(req.args.get('zl', "0"))
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
    
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
    try :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
        # yay full render
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
        return Response(render.img_png_region(image, cx, cy, zoom, width, height), content_type="image/png")
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
    except ValueError, ex :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
        # too large
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
        raise exceptions.Forbidden(str(ex))
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
def handle_img_tile (req, image) :
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
        Handle request for image tile
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
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
    # tile
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
    x = int(req.args['x'])
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
    y = int(req.args['y'])
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
    zoom = int(req.args.get('zl', "0"))
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
        
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
    # yay render
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
    return Response(render.img_png_tile(image, x, y, zoom), content_type="image/png")
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
## Dispatch req to handle_img_*
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
def handle_img (req, name, path) :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
    """
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
        Handle request for an image
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
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
    # get image object
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
    image = get_image(name, path)
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
    # what view?
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
    if not req.args :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
        return handle_img_viewport(req, image, name)
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
    elif 'w' in req.args and 'h' in req.args and 'cx' in req.args and 'cy' in req.args :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
        return handle_img_region(req, image)
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
    elif 'x' in req.args and 'y' in req.args :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
        return handle_img_tile(req, image)
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
    else :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
        raise exceptions.BadRequest("Unknown args")
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
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
## Dispatch request to handle_*
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
def handle_req (req) :
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
        Main request handler
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
    
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
    # decode req
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
    name, path = get_path(req.path)
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
    # determine dir/image
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
    if os.path.isdir(path) :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
        # directory
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
        return handle_dir(req, name, 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
    elif not os.path.exists(path) :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
        # no such file
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
        raise exceptions.NotFound(name)
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
    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
   164
        # invalid file
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
        raise exceptions.BadRequest("Not a PNG file")
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
    
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
    else :
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
        # image
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
        return handle_img(req, name, path)
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
581cdb831b32 split off werkzeug code to separate handlers module..
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171