# HG changeset patch # User Tero Marttila # Date 1412427246 -10800 # Node ID 8456a554fab9f13fad105bc056c0e45e25aad495 # Parent 21a38c59ce78916740f9be7924d37394329f78b2 qmsk.pngtile: image view diff -r 21a38c59ce78 -r 8456a554fab9 qmsk/pngtile/pngtile.py --- a/qmsk/pngtile/pngtile.py Sat Oct 04 15:53:57 2014 +0300 +++ b/qmsk/pngtile/pngtile.py Sat Oct 04 15:54:06 2014 +0300 @@ -15,6 +15,9 @@ import os.path class Store (PNGTileStore): + TILE_SIZE = 256 + TILE_ZOOM = 4 + def __init__ (self, title, tileserver, **opts): super(Store, self).__init__(**opts) @@ -89,7 +92,7 @@ if type: yield item, item_name - def tiles_url (self, name, **query): + def tiles_url (self, name=None, **query): """ Return a tileserver URL. """ diff -r 21a38c59ce78 -r 8456a554fab9 qmsk/pngtile/templates/qmsk.pngtile/image.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmsk/pngtile/templates/qmsk.pngtile/image.html Sat Oct 04 15:54:06 2014 +0300 @@ -0,0 +1,23 @@ +{% extends "qmsk.pngtile/view.html" %} +{% load staticfiles %} + +{% block head %} + + +{% endblock %} + +{% block content %} +
+ +
+{% endblock %} + +{% block body %} + + + +{% endblock %} diff -r 21a38c59ce78 -r 8456a554fab9 qmsk/pngtile/templates/qmsk.pngtile/index.html --- a/qmsk/pngtile/templates/qmsk.pngtile/index.html Sat Oct 04 15:53:57 2014 +0300 +++ b/qmsk/pngtile/templates/qmsk.pngtile/index.html Sat Oct 04 15:54:06 2014 +0300 @@ -1,39 +1,4 @@ -{% extends "site.html" %} - -{% block title %}{{ site_name }} :: {{ name }}{% endblock %} - -{% block header %} -

- {{ title }} -

-{% endblock %} - -{% block breadcrumb %} - -{% endblock %} - -{% block nav %} -{% for tree_items, tree_item in index_tree %} - {% if not forloop.first %} -
- {% endif %} - -{% endfor %} -{% endblock %} +{% extends "qmsk.pngtile/view.html" %} {% block content %} {% for item, item_name in index_items %} @@ -43,7 +8,3 @@ {% endfor %} {% endblock %} -{% block footer %} - -{% endblock %} - diff -r 21a38c59ce78 -r 8456a554fab9 qmsk/pngtile/templates/qmsk.pngtile/view.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmsk/pngtile/templates/qmsk.pngtile/view.html Sat Oct 04 15:54:06 2014 +0300 @@ -0,0 +1,41 @@ +{% extends "site.html" %} + +{% block title %}{{ site_name }} :: {{ name }}{% endblock %} + +{% block header %} +

+ {{ title }} +

+{% endblock %} + +{% block breadcrumb %} + +{% endblock %} + +{% block nav %} +{% for tree_items, tree_item in tree %} + {% if not forloop.first %} +
+ {% endif %} + +{% endfor %} +{% endblock %} + +{% block footer %} + +{% endblock %} + diff -r 21a38c59ce78 -r 8456a554fab9 qmsk/pngtile/views.py --- a/qmsk/pngtile/views.py Sat Oct 04 15:53:57 2014 +0300 +++ b/qmsk/pngtile/views.py Sat Oct 04 15:54:06 2014 +0300 @@ -5,6 +5,9 @@ import pypngtile +import json +import os.path + def index (request, name): store = pngtile.STORE @@ -27,9 +30,48 @@ name = name, title = store.title(name), breadcrumb = store.breadcrumb(name), - index_tree = tree, + tree = tree, index_items = sorted(items), )) def image (request, name): - pass + store = pngtile.STORE + + try: + image, name = store.open(name) + tree = store.tree(os.path.dirname(name)) + except pngtile.NotFound: + raise http.Http404 + except pngtile.InvalidImage: + return http.HttpResponseBadRequest(name) + except pngtile.UncachedImage: + return http.HttpResponseBadRequest(name) + except pngtile.Error as error: + return http.HttpResponseServerError(str(error)) + except pypngtile.Error as error: + return http.HttpResponseServerError(str(error)) + + image_info = image.info() + + map_config = dict( + tiles_url = store.tiles_url(name), + tiles_mtime = 0, + + tile_url = '{tiles_url}?t={tiles_mtime}&x={x}&y={y}&zoom={z}', + tile_size = store.TILE_SIZE, + tile_zoom = store.TILE_ZOOM, + + image_url = '{tiles_url}?w={w}&h={h}&x={x}&y={y}&zoom={z}', + image_width = image_info['img_width'], + image_height = image_info['img_height'], + ) + + return render(request, 'qmsk.pngtile/image.html', dict( + site_name = u"...", + name = name, + title = store.title(name), + breadcrumb = store.breadcrumb(name), + tree = tree, + map_config = json.dumps(map_config), + )) +