MCPcopy Create free account
hub / github.com/PageBot/PageBot / getPageTree

Method getPageTree

Lib/pagebot/document.py:1232–1326  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

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)

Callers 2

makeNavigationMethod · 0.80
build_htmlMethod · 0.80

Calls 1

PageNodeClass · 0.85

Tested by

no test coverage detected