X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=manga%2Flib.py;h=3c83ab127875263f0401991dc4a4a3b7cbb59449;hb=39b66c759278aff6cde35883172f228fcab0ac7c;hp=a3fa9a67fa49bec312627562e1d39db4bcf5a723;hpb=f19ac53a8077eb7cdbd14bb106227c2f21a42bdc;p=automanga.git diff --git a/manga/lib.py b/manga/lib.py index a3fa9a6..3c83ab1 100644 --- a/manga/lib.py +++ b/manga/lib.py @@ -36,14 +36,18 @@ class pagetree(object): `id', which should be a string that can be passed to the `byid' function of its parent node to recover the node. Such string ID should be more persistent than the node's numeric index in the - parent.""" + parent. + + All pagetree objects should contain an attribute `name', + containing some human-readable Unicode representation of the + pagelist.""" def idlist(self): """Returns a list of the IDs necessary to resolve this node from the root node.""" if len(self.stack) == 0: - raise Exception("Cannot get ID list on root node.") - return [n.id for n, i in self.stack[1:]] + [self.id] + return [] + return self.stack[-1][0].idlist() + [self.id] def byidlist(self, idlist): if len(idlist) == 0: @@ -52,10 +56,7 @@ class pagetree(object): class pagelist(pagetree): """Class representing a list of either pages, or nested - pagelists. Might be, for instance, a volume or a chapter. - - All pagelists should contain an attribute `name', containing some - human-readable Unicode representation of the pagelist.""" + pagelists. Might be, for instance, a volume or a chapter.""" def __len__(self): """Return the number of (direct) sub-nodes in this pagelist. @@ -147,9 +148,9 @@ class cursor(object): else: self.cur = self.descend(ob) - def descend(self, ob): + def descend(self, ob, last=False): while isinstance(ob, pagelist): - ob = ob[0] + ob = ob[len(ob) - 1 if last else 0] if not isinstance(ob, page): raise TypeError("object in page tree was unexpectedly not a pagetree") return ob @@ -164,9 +165,24 @@ class cursor(object): def prev(self): for n, i in reversed(self.cur.stack): if i > 0: - self.cur = self.descend(n[i - 1]) + self.cur = self.descend(n[i - 1], True) return self.cur raise StopIteration() def __iter__(self): return self + +def _lazymod(name): + return __import__(name, fromlist=["dummy"]) +class _lazydict(object): + def __init__(self): + self.bk = {} + def __setitem__(self, key, val): + self.bk[key] = "u", val + def __getitem__(self, key): + st, v = self.bk[key] + if st == "u": + v = self.bk[key] = v() + return v +libraries = _lazydict() +libraries["mf"] = lambda: _lazymod("manga.mangafox").library()