X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=manga%2Flib.py;h=353d7ada48a9b53c40f2dd1e04fe2115caa30b79;hb=ffd12e718bf1915abde0455fdf05a34d0632ed4d;hp=3c83ab127875263f0401991dc4a4a3b7cbb59449;hpb=39b66c759278aff6cde35883172f228fcab0ac7c;p=automanga.git diff --git a/manga/lib.py b/manga/lib.py index 3c83ab1..353d7ad 100644 --- a/manga/lib.py +++ b/manga/lib.py @@ -9,6 +9,19 @@ class library(object): All libraries should implement this.""" raise NotImplementedError() + def search(self, string): + """Returns an iterable object of mangas in this library that + matches the search string in a library-dependent manner. While + each library is at liberty to define its own matching + criteria, it is probably likely to involve something akin to + searching for keywords in the titles of the library. + + Searching may return very many results and may be slow to + iterate. + + Not all libraries need implement this.""" + raise NotImplementedError() + def byid(self, id): """Returns a previously known manga by its string ID, or raises KeyError if no such manga could be found. @@ -172,17 +185,16 @@ class cursor(object): 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]