winfreed.py: handle urllib2.urlopen failures better
[winfreed.git] / winfreed.py
index 99eabb7..a59d78e 100755 (executable)
@@ -63,21 +63,30 @@ def show(pkg):
     print
 
 
-def download_file(url, dest_dir):
-    response = urllib2.urlopen(url)
+def download_file(src_url, dest_dir):
+    try:
+        response = urllib2.urlopen(src_url)
+    except Exception, e:
+        if hasattr(e, 'reason'):
+            print 'Download failed. Reason: ', e.reason
+        elif hasattr(e, 'code'):
+            print 'Download failed. Error code: ', e.code
+        return
+
+    # get the final URL after possible redirect have been followed
     url = response.geturl()
 
     filename = ""
 
     # From http://paste.pound-python.org/show/9545/
     # TODO: use a proper module to parse HTTP headers
-    if response.info().has_key('Content-Disposition') and len(response.info()['Content-Disposition'].split('filename=')) > 1:
+    if 'Content-Disposition' in response.info() and len(response.info()['Content-Disposition'].split('filename=')) > 1:
         # If the response has Content-Disposition, we take file name from it
         filename = response.info()['Content-Disposition'].split('filename=')[1].decode('utf-8')
         if filename[0] == '"' or filename[0] == "'":
             filename = urllib2.unquote(filename.split('"')[1])
     else:
-        filename =  urllib2.unquote(url.split('/')[-1].decode('utf_8'))
+        filename = urllib2.unquote(url.split('/')[-1].decode('utf_8'))
 
     if filename == "":
         sys.stderr.write("Debug (%s): filename: %s url: %s\n" % (pkg['package_name'], filename, url))