qmsk/pngtile/views.py
author Tero Marttila <terom@qmsk.net>
Sat, 04 Oct 2014 16:54:49 +0300
changeset 247 8b7383138956
parent 241 8456a554fab9
permissions -rw-r--r--
qmsk.pngtiles: site_name titles
236
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
     1
from django import http
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
     2
from django.shortcuts import render, redirect
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
     3
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
     4
from qmsk.pngtile import pngtile
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
     5
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
     6
import pypngtile
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
     7
241
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
     8
import json
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
     9
import os.path
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    10
236
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    11
def index (request, name):
238
2c62e4d70619 qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents: 236
diff changeset
    12
    store = pngtile.STORE
2c62e4d70619 qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents: 236
diff changeset
    13
236
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    14
    try:
238
2c62e4d70619 qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents: 236
diff changeset
    15
        tree  = store.tree(name)
2c62e4d70619 qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents: 236
diff changeset
    16
        items = store.items(name)
236
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    17
    except pngtile.NotFound:
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    18
        raise http.Http404
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    19
    except pngtile.InvalidImage:
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    20
        return http.HttpResponseBadRequest(name)
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    21
    except pngtile.UncachedImage:
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    22
        return http.HttpResponseBadRequest(name)
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    23
    except pngtile.Error as error:
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    24
        return http.HttpResponseServerError(str(error))
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    25
    except pypngtile.Error as error:
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    26
        return http.HttpResponseServerError(str(error))
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    27
    
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    28
    return render(request, 'qmsk.pngtile/index.html', dict(
247
8b7383138956 qmsk.pngtiles: site_name titles
Tero Marttila <terom@qmsk.net>
parents: 241
diff changeset
    29
        site_name   = store.title(),
236
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    30
        name        = name,
238
2c62e4d70619 qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents: 236
diff changeset
    31
        title       = store.title(name),
2c62e4d70619 qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents: 236
diff changeset
    32
        breadcrumb  = store.breadcrumb(name),
241
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    33
        tree        = tree,
238
2c62e4d70619 qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents: 236
diff changeset
    34
        index_items = sorted(items),
236
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    35
    ))
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    36
4ca68e4eb386 qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff changeset
    37
def image (request, name):
241
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    38
    store = pngtile.STORE
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    39
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    40
    try:
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    41
        image, name = store.open(name)
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    42
        tree  = store.tree(os.path.dirname(name))
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    43
    except pngtile.NotFound:
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    44
        raise http.Http404
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    45
    except pngtile.InvalidImage:
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    46
        return http.HttpResponseBadRequest(name)
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    47
    except pngtile.UncachedImage:
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    48
        return http.HttpResponseBadRequest(name)
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    49
    except pngtile.Error as error:
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    50
        return http.HttpResponseServerError(str(error))
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    51
    except pypngtile.Error as error:
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    52
        return http.HttpResponseServerError(str(error))
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    53
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    54
    image_info = image.info()
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    55
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    56
    map_config = dict(
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    57
        tiles_url       = store.tiles_url(name),
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    58
        tiles_mtime     = 0,
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    59
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    60
        tile_url        = '{tiles_url}?t={tiles_mtime}&x={x}&y={y}&zoom={z}',
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    61
        tile_size       = store.TILE_SIZE,
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    62
        tile_zoom       = store.TILE_ZOOM,
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    63
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    64
        image_url       = '{tiles_url}?w={w}&h={h}&x={x}&y={y}&zoom={z}',
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    65
        image_width     = image_info['img_width'],
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    66
        image_height    = image_info['img_height'],
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    67
    )
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    68
    
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    69
    return render(request, 'qmsk.pngtile/image.html', dict(
247
8b7383138956 qmsk.pngtiles: site_name titles
Tero Marttila <terom@qmsk.net>
parents: 241
diff changeset
    70
        site_name   = store.title(),
241
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    71
        name        = name,
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    72
        title       = store.title(name),
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    73
        breadcrumb  = store.breadcrumb(name),
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    74
        tree        = tree,
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    75
        map_config  = json.dumps(map_config),
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    76
    ))
8456a554fab9 qmsk.pngtile: image view
Tero Marttila <terom@qmsk.net>
parents: 238
diff changeset
    77