author | Tero Marttila <terom@qmsk.net> |
Sat, 04 Oct 2014 15:14:22 +0300 | |
changeset 238 | 2c62e4d70619 |
parent 236 | 4ca68e4eb386 |
child 115 | ac2608e5a0b6 |
permissions | -rw-r--r-- |
236
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
1 |
from __future__ import absolute_import |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
2 |
|
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
3 |
from django.conf import settings |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
4 |
import django.utils.http |
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 |
# the top-level pngtile package |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
7 |
from pngtile.store import ( |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
8 |
Error, |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
9 |
NotFound, |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
10 |
InvalidImage, |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
11 |
UncachedImage, |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
12 |
PNGTileStore, |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
13 |
) |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
14 |
|
238
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
15 |
import os.path |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
16 |
|
236
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
17 |
class Store (PNGTileStore): |
238
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
18 |
def __init__ (self, title, tileserver, **opts): |
236
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
19 |
super(Store, self).__init__(**opts) |
238
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
20 |
|
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
21 |
self._title = title |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
22 |
self.tileserver = tileserver |
236
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
23 |
|
238
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
24 |
def title (self, name): |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
25 |
if name: |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
26 |
return os.path.basename(name) |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
27 |
else: |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
28 |
return self._title |
236
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
29 |
|
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
30 |
def breadcrumb (self, name): |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
31 |
""" |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
32 |
Yield (name, title) tuples for breadcrumb to name |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
33 |
""" |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
34 |
|
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
35 |
path = [ ] |
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 |
for part in name.split('/'): |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
38 |
path.append(part) |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
39 |
|
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
40 |
yield '/'.join(path), part |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
41 |
|
238
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
42 |
def tree (self, name): |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
43 |
""" |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
44 |
Yield [(item, name)] lists for given path. |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
45 |
""" |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
46 |
|
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
47 |
# always, starting from root |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
48 |
parts = [] |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
49 |
|
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
50 |
if name: |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
51 |
# also including the dir itself... but not the root twice |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
52 |
name += '/' |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
53 |
|
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
54 |
# walk up the tree from root the dir itself |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
55 |
for tree_item in name.split('/'): |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
56 |
tree_name = '/'.join(parts) |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
57 |
|
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
58 |
dirs = [ ] |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
59 |
items = [ ] |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
60 |
|
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
61 |
# walk through the items within this tree node |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
62 |
for item, type in self.list(tree_name): |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
63 |
if tree_name: |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
64 |
item_name = tree_name + '/' + item |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
65 |
else: |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
66 |
item_name = item |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
67 |
|
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
68 |
if type: |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
69 |
items.append((item, item_name)) |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
70 |
else: |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
71 |
dirs.append((item, item_name)) |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
72 |
|
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
73 |
# tree of parent + item within parent |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
74 |
yield sorted(dirs), tree_item |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
75 |
|
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
76 |
parts.append(tree_item) |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
77 |
|
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
78 |
def items (self, name): |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
79 |
""" |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
80 |
Yield (item, name) for given path. |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
81 |
""" |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
82 |
|
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
83 |
for item, type in self.list(name): |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
84 |
if name: |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
85 |
item_name = name + '/' + item |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
86 |
else: |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
87 |
item_name = item |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
88 |
|
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
89 |
if type: |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
90 |
yield item, item_name |
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
91 |
|
236
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
92 |
def tiles_url (self, name, **query): |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
93 |
""" |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
94 |
Return a tileserver URL. |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
95 |
""" |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
96 |
|
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
97 |
url = self.tileserver |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
98 |
|
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
99 |
if name: |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
100 |
url += name |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
101 |
|
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
102 |
if query: |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
103 |
url += '?' + django.utils.http.urlencode(query) |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
104 |
|
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
105 |
return url |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
106 |
|
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
107 |
STORE = Store( |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
108 |
# PNGTileStore |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
109 |
image_root = settings.QMSK_PNGTILE_ROOT, |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
110 |
|
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
111 |
# Store |
238
2c62e4d70619
qmsk.pngtile: views.index: show tree in nav, and items in content
Tero Marttila <terom@qmsk.net>
parents:
236
diff
changeset
|
112 |
title = settings.QMSK_PNGTILE_TITLE, |
236
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
113 |
tileserver = settings.QMSK_PNGTILE_SERVER, |
4ca68e4eb386
qmsk.pngtile: django app for pngtile index/viewer; very raw index view
Tero Marttila <terom@qmsk.net>
parents:
diff
changeset
|
114 |
) |