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()
 
         """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()
@@ -158,9 +158,13 @@ class stdimgstream(imgstream):
     """A standard implementation of imgstream, for libraries which
     have no particular implementation requirements."""
 
     """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:
         ok = False
         try:
             if self.bk.getcode() != 200:
@@ -178,7 +182,7 @@ class stdimgstream(imgstream):
     def close(self):
         self.bk.close()
 
     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:
         if sz is None:
             return self.bk.read()
         else:
@@ -213,12 +217,20 @@ class cursor(object):
         raise StopIteration()
 
     def __iter__(self):
         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):
 
 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()