Work around 2.7.0 deficencies (Fixes #4223)

This commit is contained in:
Philipp Hagemeister 2014-11-19 18:21:58 +01:00
parent 480b7c32a9
commit e07e931375
2 changed files with 25 additions and 0 deletions

View file

@ -19,6 +19,7 @@ from .compat import (
compat_expanduser,
compat_getpass,
compat_print,
workaround_optparse_bug9161,
)
from .utils import (
DateRange,
@ -57,6 +58,8 @@ def _real_main(argv=None):
# https://github.com/rg3/youtube-dl/issues/820
codecs.register(lambda name: codecs.lookup('utf-8') if name == 'cp65001' else None)
workaround_optparse_bug9161()
setproctitle('youtube-dl')
parser, opts, args = parseOpts(argv)

View file

@ -1,6 +1,7 @@
from __future__ import unicode_literals
import getpass
import optparse
import os
import subprocess
import sys
@ -297,6 +298,26 @@ except TypeError:
else:
compat_kwargs = lambda kwargs: kwargs
# Fix https://github.com/rg3/youtube-dl/issues/4223
# See http://bugs.python.org/issue9161 for what is broken
def workaround_optparse_bug9161():
try:
optparse.OptionGroup('foo').add_option('-t')
except TypeError:
real_add_option = optparse.OptionGroup.add_option
def _compat_add_option(self, *args, **kwargs):
enc = lambda v: (
v.encode('ascii', 'replace') if isinstance(v, compat_str)
else v)
bargs = [enc(a) for a in args]
bkwargs = dict(
(k, enc(v)) for k, v in kwargs.items())
return real_add_option(self, *bargs, **bkwargs)
optparse.OptionGroup.add_option = _compat_add_option
__all__ = [
'compat_HTTPError',
'compat_chr',
@ -323,4 +344,5 @@ __all__ = [
'compat_xml_parse_error',
'shlex_quote',
'subprocess_check_output',
'workaround_optparse_bug9161',
]