Answer a nested dict/list of pages, interpreting their tree-relation (e.g. as used for a website-navigation-menu structure) from their url-path. The keys in the dictionary are the "folder" names. The pages in each directory are collected in a list at key '@'. >>> doc
(self, pageTree=None)
| 1230 | return pages |
| 1231 | |
| 1232 | def getPageTree(self, pageTree=None): |
| 1233 | """Answer a nested dict/list of pages, interpreting their tree-relation (e.g. as |
| 1234 | used for a website-navigation-menu structure) from their url-path. |
| 1235 | The keys in the dictionary are the "folder" names. The pages in each directory |
| 1236 | are collected in a list at key '@'. |
| 1237 | |
| 1238 | >>> doc = Document(autoPages=0) |
| 1239 | >>> p = doc.newPage(name='home', url='index.html') |
| 1240 | >>> p = doc.newPage(name='c', url='a/aa1/c.html') |
| 1241 | >>> p = doc.newPage(name='d', url='a/aa1/d.html') |
| 1242 | >>> p = doc.newPage(name='d', url='a/aa2/d.html') |
| 1243 | >>> p = doc.newPage(name='e', url='a/aa2/e.html') |
| 1244 | >>> p = doc.newPage(name='f', url='a/aa3/f.html') |
| 1245 | >>> p = doc.newPage(name='g', url='b/bb1/g.html') |
| 1246 | >>> p = doc.newPage(name='h', url='b/bb2/h.html') |
| 1247 | >>> p = doc.newPage(name='i', url='b/bb3/i.html') |
| 1248 | >>> p = doc.newPage(name='j', url='c/c c1/j.html') |
| 1249 | >>> p = doc.newPage(name='zzz', url='r/s/t/u/v/w/x/y/z/zzz.html') |
| 1250 | >>> p = doc.newPage(name='noUrlPage') |
| 1251 | >>> tree = doc.getPageTree() |
| 1252 | >>> tree['home'] |
| 1253 | <PageNode path=home page=<Page #1 home (1000pt, 1000pt)> []> |
| 1254 | >>> tree.children[1] |
| 1255 | <PageNode path=a page=None ['a/aa1', 'a/aa2', 'a/aa3']> |
| 1256 | >>> tree['b'] |
| 1257 | <PageNode path=b page=None ['b/bb1', 'b/bb2', 'b/bb3']> |
| 1258 | >>> tree['b']['bb1'].page is None |
| 1259 | True |
| 1260 | >>> tree['b']['bb1']['g'].page |
| 1261 | <Page #7 g (1000pt, 1000pt)> |
| 1262 | >>> tree['c'] # Show removed space in url |
| 1263 | <PageNode path=c page=None ['c/c_c1']> |
| 1264 | >>> tree['c']['c_c1']['j'].page.url # Removed space in the url |
| 1265 | 'c/c_c1/j.html' |
| 1266 | >>> tree['c']['c_c1']['j'].page.flatUrl |
| 1267 | 'c-c_c1-j.html' |
| 1268 | >>> tree['r']['s']['t']['u']['v']['w']['x'].page is None |
| 1269 | True |
| 1270 | >>> tree['r']['s']['t']['u']['v']['w']['x']['y']['z']['zzz'].page |
| 1271 | <Page #11 zzz (1000pt, 1000pt)> |
| 1272 | """ |
| 1273 | class PageNode: |
| 1274 | def __init__(self, path=None, page=None): |
| 1275 | self.path = path2Url(path) |
| 1276 | self.page = page |
| 1277 | self.children = [] |
| 1278 | def __getitem__(self, name): |
| 1279 | for child in self.children: |
| 1280 | if child.path and child.path.split('/')[-1] == name: |
| 1281 | return child |
| 1282 | return None |
| 1283 | def __len__(self): |
| 1284 | return len(self.children) |
| 1285 | def __repr__(self): |
| 1286 | l = [] |
| 1287 | for child in self.children: |
| 1288 | l.append(child.path) |
| 1289 | return '<%s path=%s page=%s %s>' % (self.__class__.__name__, self.path, self.page, l) |
no test coverage detected