Browse Source

Prepare urllib references for 2/3 compatibility

Philipp Hagemeister 12 years ago
parent
commit
01ba00ca42
4 changed files with 223 additions and 208 deletions
  1. 7 8
      youtube_dl/FileDownloader.py
  2. 183 184
      youtube_dl/InfoExtractors.py
  3. 9 11
      youtube_dl/__init__.py
  4. 24 5
      youtube_dl/utils.py

+ 7 - 8
youtube_dl/FileDownloader.py

@@ -9,7 +9,6 @@ import socket
 import subprocess
 import sys
 import time
-import urllib2
 
 if os.name == 'nt':
 	import ctypes
@@ -461,7 +460,7 @@ class FileDownloader(object):
 					success = self._do_download(filename, info_dict)
 				except (OSError, IOError) as err:
 					raise UnavailableVideoError
-				except (urllib2.URLError, httplib.HTTPException, socket.error) as err:
+				except (compat_urllib_error.URLError, httplib.HTTPException, socket.error) as err:
 					self.trouble(u'ERROR: unable to download video data: %s' % str(err))
 					return
 				except (ContentTooShortError, ) as err:
@@ -585,8 +584,8 @@ class FileDownloader(object):
 
 		# Do not include the Accept-Encoding header
 		headers = {'Youtubedl-no-compression': 'True'}
-		basic_request = urllib2.Request(url, None, headers)
-		request = urllib2.Request(url, None, headers)
+		basic_request = compat_urllib_request.Request(url, None, headers)
+		request = compat_urllib_request.Request(url, None, headers)
 
 		# Establish possible resume length
 		if os.path.isfile(encodeFilename(tmpfilename)):
@@ -610,9 +609,9 @@ class FileDownloader(object):
 			try:
 				if count == 0 and 'urlhandle' in info_dict:
 					data = info_dict['urlhandle']
-				data = urllib2.urlopen(request)
+				data = compat_urllib_request.urlopen(request)
 				break
-			except (urllib2.HTTPError, ) as err:
+			except (compat_urllib_error.HTTPError, ) as err:
 				if (err.code < 500 or err.code >= 600) and err.code != 416:
 					# Unexpected HTTP error
 					raise
@@ -620,9 +619,9 @@ class FileDownloader(object):
 					# Unable to resume (requested range not satisfiable)
 					try:
 						# Open the connection again without the range header
-						data = urllib2.urlopen(basic_request)
+						data = compat_urllib_request.urlopen(basic_request)
 						content_length = data.info()['Content-Length']
-					except (urllib2.HTTPError, ) as err:
+					except (compat_urllib_error.HTTPError, ) as err:
 						if err.code < 500 or err.code >= 600:
 							raise
 					else:

File diff suppressed because it is too large
+ 183 - 184
youtube_dl/InfoExtractors.py


+ 9 - 11
youtube_dl/__init__.py

@@ -29,7 +29,6 @@ UPDATE_URL_VERSION = 'https://raw.github.com/rg3/youtube-dl/master/LATEST_VERSIO
 UPDATE_URL_EXE = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl.exe'
 
 
-import cookielib
 import getpass
 import optparse
 import os
@@ -38,7 +37,6 @@ import shlex
 import socket
 import subprocess
 import sys
-import urllib2
 import warnings
 
 from utils import *
@@ -55,7 +53,7 @@ def updateSelf(downloader, filename):
 
 	downloader.to_screen(u'Updating to latest version...')
 
-	urlv = urllib2.urlopen(UPDATE_URL_VERSION)
+	urlv = compat_urllib_request.urlopen(UPDATE_URL_VERSION)
 	newversion = urlv.read().strip()
 	if newversion == __version__:
 		downloader.to_screen(u'youtube-dl is up-to-date (' + __version__ + ')')
@@ -69,7 +67,7 @@ def updateSelf(downloader, filename):
 			sys.exit('ERROR: no write permissions on %s' % directory)
 
 		try:
-			urlh = urllib2.urlopen(UPDATE_URL_EXE)
+			urlh = compat_urllib_request.urlopen(UPDATE_URL_EXE)
 			newcontent = urlh.read()
 			urlh.close()
 			with open(exe + '.new', 'wb') as outf:
@@ -94,7 +92,7 @@ del "%s"
 
 	else:
 		try:
-			urlh = urllib2.urlopen(UPDATE_URL)
+			urlh = compat_urllib_request.urlopen(UPDATE_URL)
 			newcontent = urlh.read()
 			urlh.close()
 		except (IOError, OSError) as err:
@@ -380,10 +378,10 @@ def _real_main():
 
 	# Open appropriate CookieJar
 	if opts.cookiefile is None:
-		jar = cookielib.CookieJar()
+		jar = compat_cookiejar.CookieJar()
 	else:
 		try:
-			jar = cookielib.MozillaCookieJar(opts.cookiefile)
+			jar = compat_cookiejar.MozillaCookieJar(opts.cookiefile)
 			if os.path.isfile(opts.cookiefile) and os.access(opts.cookiefile, os.R_OK):
 				jar.load()
 		except (IOError, OSError) as err:
@@ -414,10 +412,10 @@ def _real_main():
 	all_urls = map(lambda url: url.strip(), all_urls)
 
 	# General configuration
-	cookie_processor = urllib2.HTTPCookieProcessor(jar)
-	proxy_handler = urllib2.ProxyHandler()
-	opener = urllib2.build_opener(proxy_handler, cookie_processor, YoutubeDLHandler())
-	urllib2.install_opener(opener)
+	cookie_processor = compat_urllib_request.HTTPCookieProcessor(jar)
+	proxy_handler = compat_urllib_request.ProxyHandler()
+	opener = compat_urllib_request.build_opener(proxy_handler, cookie_processor, YoutubeDLHandler())
+	compat_urllib_request.install_opener(opener)
 	socket.setdefaulttimeout(300) # 5 minutes should be enough (famous last words)
 
 	extractors = gen_extractors()

+ 24 - 5
youtube_dl/utils.py

@@ -9,7 +9,6 @@ import os
 import re
 import sys
 import zlib
-import urllib2
 import email.utils
 import json
 
@@ -31,6 +30,26 @@ try:
 except NameError:
 	compat_str = str
 
+try:
+	import urllib.request as compat_urllib_request
+except ImportError: # Python 2
+	import urllib2 as compat_urllib_request
+
+try:
+	import urllib.error as compat_urllib_error
+except ImportError: # Python 2
+	import urllib2 as compat_urllib_error
+
+try:
+	import urllib.parse as compat_urllib_parse
+except ImportError: # Python 2
+	import urllib2 as compat_urllib_parse
+
+try:
+	import http.cookiejar as compat_cookiejar
+except ImportError: # Python 2
+	import cookielib as compat_cookiejar
+
 def preferredencoding():
 	"""Get preferred encoding.
 
@@ -320,7 +339,7 @@ class Trouble(Exception):
 	FileDownloader.trouble
 	"""
 
-class YoutubeDLHandler(urllib2.HTTPHandler):
+class YoutubeDLHandler(compat_urllib_request.HTTPHandler):
 	"""Handler for HTTP requests and responses.
 
 	This class, when installed with an OpenerDirector, automatically adds
@@ -347,9 +366,9 @@ class YoutubeDLHandler(urllib2.HTTPHandler):
 
 	@staticmethod
 	def addinfourl_wrapper(stream, headers, url, code):
-		if hasattr(urllib2.addinfourl, 'getcode'):
-			return urllib2.addinfourl(stream, headers, url, code)
-		ret = urllib2.addinfourl(stream, headers, url)
+		if hasattr(compat_urllib_request.addinfourl, 'getcode'):
+			return compat_urllib_request.addinfourl(stream, headers, url, code)
+		ret = compat_urllib_request.addinfourl(stream, headers, url)
 		ret.code = code
 		return ret
 

Some files were not shown because too many files changed in this diff