Initial port of core code to Python3.
[automanga.git] / manga / lib.py
index 353d7ad..c0a9f30 100644 (file)
@@ -149,11 +149,41 @@ class imgstream(object):
         """Close this stream."""
         raise NotImplementedError()
 
         """Close this stream."""
         raise NotImplementedError()
 
-    def read(self, sz = None):
+    def read(self, sz=None):
         """Read SZ bytes from the stream, or the entire rest of the
         stream of SZ is not given."""
         raise NotImplementedError()
 
         """Read SZ bytes from the stream, or the entire rest of the
         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.request
+        self.bk = urllib.request.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):
 class cursor(object):
     def __init__(self, ob):
         if isinstance(ob, cursor):
@@ -188,7 +218,8 @@ class cursor(object):
 loaded = {}
 def findlib(name):
     def load(name):
 loaded = {}
 def findlib(name):
     def load(name):
-        mod = __import__(name, fromlist=["dummy"])
+        import importlib
+        mod = importlib.import_module(name)
         if not hasattr(mod, "library"):
             raise ImportError("module " + name + " is not a manga library")
         return mod.library()
         if not hasattr(mod, "library"):
             raise ImportError("module " + name + " is not a manga library")
         return mod.library()