+from __future__ import unicode_literals
+
import getpass
+import optparse
import os
import subprocess
import sys
else:
compat_getpass = getpass.getpass
+# Old 2.6 and 2.7 releases require kwargs to be bytes
+try:
+ (lambda x: x)(**{'x': 0})
+except TypeError:
+ def compat_kwargs(kwargs):
+ return dict((bytes(k), v) for k, v in kwargs.items())
+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_html_entities',
'compat_html_parser',
'compat_http_client',
+ 'compat_kwargs',
'compat_ord',
'compat_parse_qs',
'compat_print',
'compat_xml_parse_error',
'shlex_quote',
'subprocess_check_output',
+ 'workaround_optparse_bug9161',
]