aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey M․ <dstftw@gmail.com>2018-01-28 03:04:39 +0700
committerSergey M․ <dstftw@gmail.com>2018-01-28 05:48:18 +0700
commit65220c3bd6bfcb9023af904634ce1e76592cfe3e (patch)
treed41c43c81d631e0d0e5275b39ac38874ada5e333
parentc989bdbef8fdcfd38d51b987a4c745479d02e2f2 (diff)
downloadyoutube-dl-65220c3bd6bfcb9023af904634ce1e76592cfe3e.tar.xz
Add support for IronPython
-rw-r--r--youtube_dl/compat.py16
-rw-r--r--youtube_dl/downloader/ism.py32
-rw-r--r--youtube_dl/utils.py4
3 files changed, 35 insertions, 17 deletions
diff --git a/youtube_dl/compat.py b/youtube_dl/compat.py
index 646c9d79c..27ece2d29 100644
--- a/youtube_dl/compat.py
+++ b/youtube_dl/compat.py
@@ -2897,9 +2897,24 @@ except TypeError:
if isinstance(spec, compat_str):
spec = spec.encode('ascii')
return struct.unpack(spec, *args)
+
+ class compat_Struct(struct.Struct):
+ def __init__(self, fmt):
+ if isinstance(fmt, compat_str):
+ fmt = fmt.encode('ascii')
+ super(compat_Struct, self).__init__(fmt)
else:
compat_struct_pack = struct.pack
compat_struct_unpack = struct.unpack
+ if platform.python_implementation() == 'IronPython' and sys.version_info < (2, 7, 8):
+ class compat_Struct(struct.Struct):
+ def unpack(self, string):
+ if not isinstance(string, buffer):
+ string = buffer(string)
+ return super(compat_Struct, self).unpack(string)
+ else:
+ compat_Struct = struct.Struct
+
try:
from future_builtins import zip as compat_zip
@@ -2941,6 +2956,7 @@ __all__ = [
'compat_HTMLParseError',
'compat_HTMLParser',
'compat_HTTPError',
+ 'compat_Struct',
'compat_b64decode',
'compat_basestring',
'compat_chr',
diff --git a/youtube_dl/downloader/ism.py b/youtube_dl/downloader/ism.py
index 138564267..063fcf444 100644
--- a/youtube_dl/downloader/ism.py
+++ b/youtube_dl/downloader/ism.py
@@ -1,25 +1,27 @@
from __future__ import unicode_literals
import time
-import struct
import binascii
import io
from .fragment import FragmentFD
-from ..compat import compat_urllib_error
-
-
-u8 = struct.Struct(b'>B')
-u88 = struct.Struct(b'>Bx')
-u16 = struct.Struct(b'>H')
-u1616 = struct.Struct(b'>Hxx')
-u32 = struct.Struct(b'>I')
-u64 = struct.Struct(b'>Q')
-
-s88 = struct.Struct(b'>bx')
-s16 = struct.Struct(b'>h')
-s1616 = struct.Struct(b'>hxx')
-s32 = struct.Struct(b'>i')
+from ..compat import (
+ compat_Struct,
+ compat_urllib_error,
+)
+
+
+u8 = compat_Struct('>B')
+u88 = compat_Struct('>Bx')
+u16 = compat_Struct('>H')
+u1616 = compat_Struct('>Hxx')
+u32 = compat_Struct('>I')
+u64 = compat_Struct('>Q')
+
+s88 = compat_Struct('>bx')
+s16 = compat_Struct('>h')
+s1616 = compat_Struct('>hxx')
+s32 = compat_Struct('>i')
unity_matrix = (s32.pack(0x10000) + s32.pack(0) * 3) * 2 + s32.pack(0x40000000)
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
index 2fe9cf585..ef44b99a5 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -866,8 +866,8 @@ def _create_http_connection(ydl_handler, http_class, is_https, *args, **kwargs):
# expected HTTP responses to meet HTTP/1.0 or later (see also
# https://github.com/rg3/youtube-dl/issues/6727)
if sys.version_info < (3, 0):
- kwargs[b'strict'] = True
- hc = http_class(*args, **kwargs)
+ kwargs['strict'] = True
+ hc = http_class(*args, **compat_kwargs(kwargs))
source_address = ydl_handler._params.get('source_address')
if source_address is not None:
sa = (source_address, 0)