X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=manga%2Flib.py;h=21edd3db2b0b48fa593d9690bae57544afc56c85;hb=434236682e0d553965b2912d1d307e3b1473c491;hp=2a11cb10d41f0698591e667f1eea436253942913;hpb=53395a9dd29c3dfdf3def032e85d8c3a90e1bf22;p=automanga.git diff --git a/manga/lib.py b/manga/lib.py index 2a11cb1..21edd3d 100644 --- a/manga/lib.py +++ b/manga/lib.py @@ -46,8 +46,8 @@ class pagetree(object): """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: @@ -148,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 @@ -165,24 +165,23 @@ 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() +loaded = {} +def findlib(name): + def load(name): + mod = __import__(name, fromlist=["dummy"]) + if not hasattr(mod, "library"): + raise ImportError("module " + name + " is not a manga library") + return mod.library() + if name not in loaded: + try: + loaded[name] = load("manga." + name) + except ImportError: + loaded[name] = load(name) + return loaded[name]