dropped the support for Python 2.5

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.
This commit is contained in:
Filippo Valsorda 2012-05-01 17:01:51 +02:00
parent 9beb5af82e
commit 921a145592
5 changed files with 4 additions and 126 deletions

View file

@ -6,7 +6,7 @@ ## USAGE
## DESCRIPTION ## DESCRIPTION
**youtube-dl** is a small command-line program to download videos from **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 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, 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. which means you can modify it, redistribute it or use it however you like.

Binary file not shown.

View file

@ -12,23 +12,14 @@
import urllib import urllib
import urllib2 import urllib2
import email.utils import email.utils
import xml.etree.ElementTree
from urlparse import parse_qs
try: try:
import cStringIO as StringIO import cStringIO as StringIO
except ImportError: except ImportError:
import StringIO 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 * from utils import *

View file

@ -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

View file

@ -11,17 +11,13 @@
import zlib import zlib
import urllib2 import urllib2
import email.utils import email.utils
import json
try: try:
import cStringIO as StringIO import cStringIO as StringIO
except ImportError: except ImportError:
import StringIO import StringIO
try:
import json
except ImportError: # Python <2.6, use trivialjson (https://github.com/phihag/trivialjson):
import trivialjson as json
std_headers = { std_headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',