Remove ur references for Python 3.3 support
[youtube-dl] / youtube_dl / utils.py
index 68a6fae1b1d3c25aabafeb0b198a3ee86761dd33..ccefc66a089c4b1c118651d36aefa7e7ba304a28 100644 (file)
@@ -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.
 
@@ -47,7 +66,7 @@ def preferredencoding():
 
 
 def htmlentity_transform(matchobj):
-       """Transforms an HTML entity to a Unicode character.
+       """Transforms an HTML entity to a character.
 
        This function receives a match object and is intended to be used with
        the re.sub() function.
@@ -58,8 +77,7 @@ def htmlentity_transform(matchobj):
        if entity in htmlentitydefs.name2codepoint:
                return unichr(htmlentitydefs.name2codepoint[entity])
 
-       # Unicode character
-       mobj = re.match(ur'(?u)#(x?\d+)', entity)
+       mobj = re.match(u'(?u)#(x?\\d+)', entity)
        if mobj is not None:
                numstr = mobj.group(1)
                if numstr.startswith(u'x'):
@@ -67,7 +85,7 @@ def htmlentity_transform(matchobj):
                        numstr = u'0%s' % numstr
                else:
                        base = 10
-               return unichr(long(numstr, base))
+               return unichr(int(numstr, base))
 
        # Unknown entity in name, return its literal representation
        return (u'&%s;' % entity)
@@ -178,9 +196,9 @@ def sanitize_open(filename, open_mode):
                        return (sys.stdout, filename)
                stream = open(encodeFilename(filename), open_mode)
                return (stream, filename)
-       except (IOError, OSError), err:
+       except (IOError, OSError) as err:
                # In case of error, try to remove win32 forbidden chars
-               filename = re.sub(ur'[/<>:"\|\?\*]', u'#', filename)
+               filename = re.sub(u'[/<>:"\\|\\\\?\\*]', u'#', filename)
 
                # An exception here should be caught in the caller
                stream = open(encodeFilename(filename), open_mode)
@@ -235,16 +253,16 @@ def orderedSet(iterable):
 
 def unescapeHTML(s):
        """
-       @param s a string (of type unicode)
+       @param s a string
        """
        assert type(s) == type(u'')
 
-       result = re.sub(ur'(?u)&(.+?);', htmlentity_transform, s)
+       result = re.sub(u'(?u)&(.+?);', htmlentity_transform, s)
        return result
 
 def encodeFilename(s):
        """
-       @param s The name of the file (of type unicode)
+       @param s The name of the file
        """
 
        assert type(s) == type(u'')
@@ -321,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
@@ -348,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