10 InvalidImage, |
10 InvalidImage, |
11 UncachedImage, |
11 UncachedImage, |
12 PNGTileStore, |
12 PNGTileStore, |
13 ) |
13 ) |
14 |
14 |
|
15 import os.path |
|
16 |
15 class Store (PNGTileStore): |
17 class Store (PNGTileStore): |
16 def __init__ (self, tileserver, **opts): |
18 def __init__ (self, title, tileserver, **opts): |
17 super(Store, self).__init__(**opts) |
19 super(Store, self).__init__(**opts) |
|
20 |
|
21 self._title = title |
|
22 self.tileserver = tileserver |
18 |
23 |
19 self.tileserver = tileserver |
24 def title (self, name): |
|
25 if name: |
|
26 return os.path.basename(name) |
|
27 else: |
|
28 return self._title |
20 |
29 |
21 def breadcrumb (self, name): |
30 def breadcrumb (self, name): |
22 """ |
31 """ |
23 Yield (name, title) tuples for breadcrumb to name |
32 Yield (name, title) tuples for breadcrumb to name |
24 """ |
33 """ |
27 |
36 |
28 for part in name.split('/'): |
37 for part in name.split('/'): |
29 path.append(part) |
38 path.append(part) |
30 |
39 |
31 yield '/'.join(path), part |
40 yield '/'.join(path), part |
|
41 |
|
42 def tree (self, name): |
|
43 """ |
|
44 Yield [(item, name)] lists for given path. |
|
45 """ |
|
46 |
|
47 # always, starting from root |
|
48 parts = [] |
|
49 |
|
50 if name: |
|
51 # also including the dir itself... but not the root twice |
|
52 name += '/' |
|
53 |
|
54 # walk up the tree from root the dir itself |
|
55 for tree_item in name.split('/'): |
|
56 tree_name = '/'.join(parts) |
|
57 |
|
58 dirs = [ ] |
|
59 items = [ ] |
|
60 |
|
61 # walk through the items within this tree node |
|
62 for item, type in self.list(tree_name): |
|
63 if tree_name: |
|
64 item_name = tree_name + '/' + item |
|
65 else: |
|
66 item_name = item |
|
67 |
|
68 if type: |
|
69 items.append((item, item_name)) |
|
70 else: |
|
71 dirs.append((item, item_name)) |
|
72 |
|
73 # tree of parent + item within parent |
|
74 yield sorted(dirs), tree_item |
|
75 |
|
76 parts.append(tree_item) |
|
77 |
|
78 def items (self, name): |
|
79 """ |
|
80 Yield (item, name) for given path. |
|
81 """ |
|
82 |
|
83 for item, type in self.list(name): |
|
84 if name: |
|
85 item_name = name + '/' + item |
|
86 else: |
|
87 item_name = item |
|
88 |
|
89 if type: |
|
90 yield item, item_name |
32 |
91 |
33 def tiles_url (self, name, **query): |
92 def tiles_url (self, name, **query): |
34 """ |
93 """ |
35 Return a tileserver URL. |
94 Return a tileserver URL. |
36 """ |
95 """ |