dropped the support for Python 2.5
authorFilippo Valsorda <filippo.valsorda@gmail.com>
Tue, 1 May 2012 15:01:51 +0000 (17:01 +0200)
committerFilippo Valsorda <filippo.valsorda@gmail.com>
Tue, 1 May 2012 15:01:51 +0000 (17:01 +0200)
let's elaborate the decision: Python 2.5 is a 6 years old release
and "under the current release policy, no security issues in Python
2.5 will be fixed anymore" (!!); also, it doesn't support the new
zipfile distribution format.

README.md
youtube-dl
youtube_dl/InfoExtractors.py
youtube_dl/trivialjson.py [deleted file]
youtube_dl/utils.py

index 1f752b9a75e6db2556a3676f16b2b4d0580d4001..859ca663cd31524e201223232d96b6e6ca9de804 100644 (file)
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ youtube-dl [options] url [url...]
 ## DESCRIPTION
 **youtube-dl** is a small command-line program to download videos from
 YouTube.com and a few more sites. It requires the Python interpreter, version
-2.x (x being at least 5), and it is not platform specific. It should work in
+2.x (x being at least 6), and it is not platform specific. It should work in
 your Unix box, in Windows or in Mac OS X. It is released to the public domain,
 which means you can modify it, redistribute it or use it however you like.
 
index e4d7beb2d646956663885df16cc73c8bd641de5e..56f5b289bdc021a725a94b4e5d0a26615915e42a 100755 (executable)
Binary files a/youtube-dl and b/youtube-dl differ
index ae98e12642974435058f973d9e546db0c1cbcfba..256d106b10409c6fbba199c038b4651bc0e2d36e 100644 (file)
@@ -12,23 +12,14 @@ import time
 import urllib
 import urllib2
 import email.utils
+import xml.etree.ElementTree
+from urlparse import parse_qs
 
 try:
        import cStringIO as StringIO
 except ImportError:
        import StringIO
 
-# parse_qs was moved from the cgi module to the urlparse module recently.
-try:
-       from urlparse import parse_qs
-except ImportError:
-       from cgi import parse_qs
-
-try:
-       import xml.etree.ElementTree
-except ImportError: # Python<2.5: Not officially supported, but let it slip
-       warnings.warn('xml.etree.ElementTree support is missing. Consider upgrading to Python >= 2.5 if you get related errors.')
-
 from utils import *
 
 
diff --git a/youtube_dl/trivialjson.py b/youtube_dl/trivialjson.py
deleted file mode 100644 (file)
index 7cce2a9..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-"""trivialjson (https://github.com/phihag/trivialjson)"""
-
-import re
-def loads(s):
-       s = s.decode('UTF-8')
-       def raiseError(msg, i):
-               raise ValueError(msg + ' at position ' + str(i) + ' of ' + repr(s) + ': ' + repr(s[i:]))
-       def skipSpace(i, expectMore=True):
-               while i < len(s) and s[i] in ' \t\r\n':
-                       i += 1
-               if expectMore:
-                       if i >= len(s):
-                               raiseError('Premature end', i)
-               return i
-       def decodeEscape(match):
-               esc = match.group(1)
-               _STATIC = {
-                       '"': '"',
-                       '\\': '\\',
-                       '/': '/',
-                       'b': unichr(0x8),
-                       'f': unichr(0xc),
-                       'n': '\n',
-                       'r': '\r',
-                       't': '\t',
-               }
-               if esc in _STATIC:
-                       return _STATIC[esc]
-               if esc[0] == 'u':
-                       if len(esc) == 1+4:
-                               return unichr(int(esc[1:5], 16))
-                       if len(esc) == 5+6 and esc[5:7] == '\\u':
-                               hi = int(esc[1:5], 16)
-                               low = int(esc[7:11], 16)
-                               return unichr((hi - 0xd800) * 0x400 + low - 0xdc00 + 0x10000)
-               raise ValueError('Unknown escape ' + str(esc))
-       def parseString(i):
-               i += 1
-               e = i
-               while True:
-                       e = s.index('"', e)
-                       bslashes = 0
-                       while s[e-bslashes-1] == '\\':
-                               bslashes += 1
-                       if bslashes % 2 == 1:
-                               e += 1
-                               continue
-                       break
-               rexp = re.compile(r'\\(u[dD][89aAbB][0-9a-fA-F]{2}\\u[0-9a-fA-F]{4}|u[0-9a-fA-F]{4}|.|$)')
-               stri = rexp.sub(decodeEscape, s[i:e])
-               return (e+1,stri)
-       def parseObj(i):
-               i += 1
-               res = {}
-               i = skipSpace(i)
-               if s[i] == '}': # Empty dictionary
-                       return (i+1,res)
-               while True:
-                       if s[i] != '"':
-                               raiseError('Expected a string object key', i)
-                       i,key = parseString(i)
-                       i = skipSpace(i)
-                       if i >= len(s) or s[i] != ':':
-                               raiseError('Expected a colon', i)
-                       i,val = parse(i+1)
-                       res[key] = val
-                       i = skipSpace(i)
-                       if s[i] == '}':
-                               return (i+1, res)
-                       if s[i] != ',':
-                               raiseError('Expected comma or closing curly brace', i)
-                       i = skipSpace(i+1)
-       def parseArray(i):
-               res = []
-               i = skipSpace(i+1)
-               if s[i] == ']': # Empty array
-                       return (i+1,res)
-               while True:
-                       i,val = parse(i)
-                       res.append(val)
-                       i = skipSpace(i) # Raise exception if premature end
-                       if s[i] == ']':
-                               return (i+1, res)
-                       if s[i] != ',':
-                               raiseError('Expected a comma or closing bracket', i)
-                       i = skipSpace(i+1)
-       def parseDiscrete(i):
-               for k,v in {'true': True, 'false': False, 'null': None}.items():
-                       if s.startswith(k, i):
-                               return (i+len(k), v)
-               raiseError('Not a boolean (or null)', i)
-       def parseNumber(i):
-               mobj = re.match('^(-?(0|[1-9][0-9]*)(\.[0-9]*)?([eE][+-]?[0-9]+)?)', s[i:])
-               if mobj is None:
-                       raiseError('Not a number', i)
-               nums = mobj.group(1)
-               if '.' in nums or 'e' in nums or 'E' in nums:
-                       return (i+len(nums), float(nums))
-               return (i+len(nums), int(nums))
-       CHARMAP = {'{': parseObj, '[': parseArray, '"': parseString, 't': parseDiscrete, 'f': parseDiscrete, 'n': parseDiscrete}
-       def parse(i):
-               i = skipSpace(i)
-               i,res = CHARMAP.get(s[i], parseNumber)(i)
-               i = skipSpace(i, False)
-               return (i,res)
-       i,res = parse(0)
-       if i < len(s):
-               raise ValueError('Extra data at end of input (index ' + str(i) + ' of ' + repr(s) + ': ' + repr(s[i:]) + ')')
-       return res
index 0f903c64a0d8c71517378143ecad1caf07cb5893..6e982157c4811b9db43642af3b9ee90d8ab5e376 100644 (file)
@@ -11,16 +11,12 @@ import sys
 import zlib
 import urllib2
 import email.utils
+import json
 
 try:
        import cStringIO as StringIO
 except ImportError:
        import StringIO
-               
-try:
-       import json
-except ImportError: # Python <2.6, use trivialjson (https://github.com/phihag/trivialjson):
-       import trivialjson as json
 
 std_headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1',