aboutsummaryrefslogtreecommitdiff
path: root/youtube_dl
diff options
context:
space:
mode:
authorFilippo Valsorda <filippo.valsorda@gmail.com>2012-05-01 17:01:51 +0200
committerFilippo Valsorda <filippo.valsorda@gmail.com>2012-05-01 17:01:51 +0200
commit921a14559277cfb2ead84b613c02d0251aeeb9ab (patch)
tree28fec3a3a15d409323250ad6e07f86d06b6b5e9d /youtube_dl
parent9beb5af82ecfbb35ee534692e73fb38f4399698a (diff)
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.
Diffstat (limited to 'youtube_dl')
-rw-r--r--youtube_dl/InfoExtractors.py13
-rw-r--r--youtube_dl/trivialjson.py109
-rw-r--r--youtube_dl/utils.py6
3 files changed, 3 insertions, 125 deletions
diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py
index ae98e1264..256d106b1 100644
--- a/youtube_dl/InfoExtractors.py
+++ b/youtube_dl/InfoExtractors.py
@@ -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
index 7cce2a98f..000000000
--- a/youtube_dl/trivialjson.py
+++ /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
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
index 0f903c64a..6e982157c 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -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',