Work around 2.7.0 deficencies (Fixes #4223)
authorPhilipp Hagemeister <phihag@phihag.de>
Wed, 19 Nov 2014 17:21:58 +0000 (18:21 +0100)
committerPhilipp Hagemeister <phihag@phihag.de>
Wed, 19 Nov 2014 17:21:58 +0000 (18:21 +0100)
youtube_dl/__init__.py
youtube_dl/compat.py

index 8e186a0db6addc290cefc359f0b765dc6a5939c7..c1323b4f35e532851cecad6931fb9f58aba0d85e 100644 (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)
index 385924803f0fed16e62227a14c717486068690b2..64a97548933eadec42aa578583ce878ce2cc1e9e 100644 (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',
 ]