X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=manga%2Flib.py;h=70b3ff94806f68b51e9014aeece7e3c6d82cafa1;hb=b9e558ac507f4e6c11c8c9837b5bf22b5da90fce;hp=21edd3db2b0b48fa593d9690bae57544afc56c85;hpb=31ea855c3d572c75c6ad8737dda8df70502c76f9;p=automanga.git diff --git a/manga/lib.py b/manga/lib.py index 21edd3d..70b3ff9 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. @@ -141,6 +154,36 @@ class imgstream(object): stream of SZ is not given.""" raise NotImplementedError() +class stdimgstream(imgstream): + """A standard implementation of imgstream, for libraries which + have no particular implementation requirements.""" + + def __init__(self, url): + import urllib + self.bk = urllib.urlopen(url) + ok = False + try: + if self.bk.getcode() != 200: + raise IOError("Server error: " + str(self.bk.getcode())) + self.ctype = self.bk.info()["Content-Type"] + self.clen = int(self.bk.info()["Content-Length"]) + ok = True + finally: + if not ok: + self.bk.close() + + def fileno(self): + return self.bk.fileno() + + def close(self): + self.bk.close() + + def read(self, sz = None): + if sz is None: + return self.bk.read() + else: + return self.bk.read(sz) + class cursor(object): def __init__(self, ob): if isinstance(ob, cursor):