from __future__ import absolute_import
from django.conf import settings
import django.utils.http
# the top-level pngtile package
from pngtile.store import (
Error,
NotFound,
InvalidImage,
UncachedImage,
PNGTileStore,
)
import os.path
class Store (PNGTileStore):
def __init__ (self, title, tileserver, **opts):
super(Store, self).__init__(**opts)
self._title = title
self.tileserver = tileserver
def title (self, name):
if name:
return os.path.basename(name)
else:
return self._title
def breadcrumb (self, name):
"""
Yield (name, title) tuples for breadcrumb to name
"""
path = [ ]
for part in name.split('/'):
path.append(part)
yield '/'.join(path), part
def tree (self, name):
"""
Yield [(item, name)] lists for given path.
"""
# always, starting from root
parts = []
if name:
# also including the dir itself... but not the root twice
name += '/'
# walk up the tree from root the dir itself
for tree_item in name.split('/'):
tree_name = '/'.join(parts)
dirs = [ ]
items = [ ]
# walk through the items within this tree node
for item, type in self.list(tree_name):
if tree_name:
item_name = tree_name + '/' + item
else:
item_name = item
if type:
items.append((item, item_name))
else:
dirs.append((item, item_name))
# tree of parent + item within parent
yield sorted(dirs), tree_item
parts.append(tree_item)
def items (self, name):
"""
Yield (item, name) for given path.
"""
for item, type in self.list(name):
if name:
item_name = name + '/' + item
else:
item_name = item
if type:
yield item, item_name
def tiles_url (self, name, **query):
"""
Return a tileserver URL.
"""
url = self.tileserver
if name:
url += name
if query:
url += '?' + django.utils.http.urlencode(query)
return url
STORE = Store(
# PNGTileStore
image_root = settings.QMSK_PNGTILE_ROOT,
# Store
title = settings.QMSK_PNGTILE_TITLE,
tileserver = settings.QMSK_PNGTILE_SERVER,
)