local: Treat dots/periods as digits in destructuring directories.
[automanga.git] / manga / lib.py
index 70b3ff9..849e632 100644 (file)
@@ -149,7 +149,7 @@ class imgstream(object):
         """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()
@@ -158,9 +158,13 @@ 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)
+    def __init__(self, url, referer=None):
+        import urllib.request
+        headers = {"User-Agent": "automanga/1"}
+        if referer:
+            headers["Referer"] = referer
+        req = urllib.request.Request(url, headers=headers)
+        self.bk = urllib.request.urlopen(req)
         ok = False
         try:
             if self.bk.getcode() != 200:
@@ -178,7 +182,7 @@ class stdimgstream(imgstream):
     def close(self):
         self.bk.close()
 
-    def read(self, sz = None):
+    def read(self, sz=None):
         if sz is None:
             return self.bk.read()
         else:
@@ -213,12 +217,20 @@ class cursor(object):
         raise StopIteration()
 
     def __iter__(self):
-        return self
+        def iterator():
+            yield self.cur
+            while True:
+                try:
+                    yield self.next()
+                except StopIteration:
+                    break
+        return iterator()
 
 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()