]> git.phdru.name Git - bookmarks_db.git/blobdiff - Robots/bkmk_rurllib2.py
Feat(Python3): `except Error, value` -> `except Error as value`
[bookmarks_db.git] / Robots / bkmk_rurllib2.py
index b15a7b0dfea49c9d19b014ebb65052dd5027a552..a5714a19abd4e0d1c0e2b76404d23b0dd143f129 100644 (file)
@@ -5,7 +5,7 @@ This file is a part of Bookmarks database and Internet robot.
 """
 
 __author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 2014 PhiloSoft Design"
+__copyright__ = "Copyright (C) 2014-2017 PhiloSoft Design"
 __license__ = "GNU GPL"
 
 __all__ = ['robot_urllib2']
@@ -14,12 +14,22 @@ __all__ = ['robot_urllib2']
 import sys
 import httplib
 import urllib2
-from Robots.bkmk_robot_base import robot_base
+from Robots.bkmk_robot_base import robot_base, get_error
+
+
+_fw = None
+
+class FTPHandler(urllib2.FTPHandler):
+    def connect_ftp(self, user, passwd, host, port, dirs, timeout):
+        global _fw
+        _fw = urllib2.FTPHandler.connect_ftp(self, user, passwd, host, port,
+                                             dirs, timeout)
+        return _fw
 
 
 opener = urllib2.OpenerDirector()
 default_classes = [urllib2.HTTPHandler, urllib2.HTTPDefaultErrorHandler,
-                   urllib2.FTPHandler, urllib2.HTTPErrorProcessor]
+                   FTPHandler, urllib2.HTTPErrorProcessor]
 if hasattr(httplib, 'HTTPS'):
     default_classes.insert(0, urllib2.HTTPSHandler)
 for klass in default_classes:
@@ -35,7 +45,7 @@ _x_user_agent = "bookmarks_db (Python %d.%d.%d; urllib2)" % (
 
 
 class robot_urllib2(robot_base):
-   def get(self, bookmark, url, accept_charset=False):
+    def get(self, bookmark, url, accept_charset=False):
         request = urllib2.Request(url)
         request.add_header('Accept', '*/*')
         if accept_charset and bookmark.charset:
@@ -47,17 +57,37 @@ class robot_urllib2(robot_base):
         request.add_header('User-agent', _user_agent)
         request.add_header('X-User-Agent', _x_user_agent)
 
+        global _fw
+        _fw = None
+
         try:
             response = urllib2.urlopen(request)
-        except urllib2.HTTPError, e:
+
+        except urllib2.HTTPError as e:
             if e.code in (301, 302, 303, 307):
                 return None, e.code, e.hdrs['Location'], None, None
             else:
+                self.log('   HTTP Error %s: %s' % (e.code, e.msg))
                 return "HTTP Error %s: %s" % (e.code, e.msg), None, None, None, None
-        except urllib2.URLError, e:
+
+        except urllib2.URLError as e:
+            self.log('   URL Error: %s' % e.reason)
             return "URL Error: %s" % e.reason, None, None, None, None
+
+        except httplib.HTTPException as e:
+            error = get_error(e)
+            self.log('   HTTP Exception: %s' % error)
+            return "HTTP Exception: %s" % error, None, None, None, None
+
+        except IOError as e:
+            error = get_error(e)
+            self.log('   I/O Error: %s' % error)
+            return "I/O Error: %s" % error, None, None, None, None
+
         else:
             return None, None, None, response.info(), response.read()
 
-   def get_ftp_welcome(self):
-      return ''
+    def get_ftp_welcome(self):
+        if _fw is None:
+            return ''
+        return _fw.ftp.welcome