aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/test_compat.py5
-rw-r--r--test/test_utils.py4
-rw-r--r--youtube_dl/compat.py23
-rw-r--r--youtube_dl/downloader/f4m.py4
-rw-r--r--youtube_dl/extractor/rtve.py4
-rw-r--r--youtube_dl/swfinterp.py6
-rw-r--r--youtube_dl/utils.py20
7 files changed, 38 insertions, 28 deletions
diff --git a/test/test_compat.py b/test/test_compat.py
index 9adf75763..dd62a5d6b 100644
--- a/test/test_compat.py
+++ b/test/test_compat.py
@@ -20,6 +20,7 @@ from youtube_dl.compat import (
compat_urllib_parse_unquote,
compat_urllib_parse_unquote_plus,
compat_urllib_parse_urlencode,
+ struct_unpack,
)
@@ -102,5 +103,9 @@ class TestCompat(unittest.TestCase):
self.assertTrue(isinstance(doc.find('chinese').text, compat_str))
self.assertTrue(isinstance(doc.find('foo/bar').text, compat_str))
+ def test_struct_unpack(self):
+ self.assertEqual(struct_unpack('!B', b'\x00'), (0,))
+
+
if __name__ == '__main__':
unittest.main()
diff --git a/test/test_utils.py b/test/test_utils.py
index 00ada95ec..5702ffa97 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -55,7 +55,6 @@ from youtube_dl.utils import (
smuggle_url,
str_to_int,
strip_jsonp,
- struct_unpack,
timeconvert,
unescapeHTML,
unified_strdate,
@@ -457,9 +456,6 @@ class TestUtil(unittest.TestCase):
testPL(5, 2, (2, 99), [2, 3, 4])
testPL(5, 2, (20, 99), [])
- def test_struct_unpack(self):
- self.assertEqual(struct_unpack('!B', b'\x00'), (0,))
-
def test_read_batch_urls(self):
f = io.StringIO('''\xef\xbb\xbf foo
bar\r
diff --git a/youtube_dl/compat.py b/youtube_dl/compat.py
index 12b53cdc8..f697bee7e 100644
--- a/youtube_dl/compat.py
+++ b/youtube_dl/compat.py
@@ -11,6 +11,7 @@ import re
import shlex
import shutil
import socket
+import struct
import subprocess
import sys
import itertools
@@ -592,6 +593,26 @@ if sys.version_info >= (3, 0):
else:
from tokenize import generate_tokens as compat_tokenize_tokenize
+
+try:
+ struct.pack('!I', 0)
+except TypeError:
+ # In Python 2.6 and 2.7.x < 2.7.7, struct requires a bytes argument
+ # See https://bugs.python.org/issue19099
+ def struct_pack(spec, *args):
+ if isinstance(spec, compat_str):
+ spec = spec.encode('ascii')
+ return struct.pack(spec, *args)
+
+ def struct_unpack(spec, *args):
+ if isinstance(spec, compat_str):
+ spec = spec.encode('ascii')
+ return struct.unpack(spec, *args)
+else:
+ struct_pack = struct.pack
+ struct_unpack = struct.unpack
+
+
__all__ = [
'compat_HTMLParser',
'compat_HTTPError',
@@ -634,6 +655,8 @@ __all__ = [
'compat_xml_parse_error',
'compat_xpath',
'shlex_quote',
+ 'struct_pack',
+ 'struct_unpack',
'subprocess_check_output',
'workaround_optparse_bug9161',
]
diff --git a/youtube_dl/downloader/f4m.py b/youtube_dl/downloader/f4m.py
index 664d87543..b282fe3d6 100644
--- a/youtube_dl/downloader/f4m.py
+++ b/youtube_dl/downloader/f4m.py
@@ -12,13 +12,13 @@ from ..compat import (
compat_urlparse,
compat_urllib_error,
compat_urllib_parse_urlparse,
+ struct_pack,
+ struct_unpack,
)
from ..utils import (
encodeFilename,
fix_xml_ampersands,
sanitize_open,
- struct_pack,
- struct_unpack,
xpath_text,
)
diff --git a/youtube_dl/extractor/rtve.py b/youtube_dl/extractor/rtve.py
index 79af47715..f59040877 100644
--- a/youtube_dl/extractor/rtve.py
+++ b/youtube_dl/extractor/rtve.py
@@ -6,6 +6,9 @@ import re
import time
from .common import InfoExtractor
+from ..compat import (
+ struct_unpack,
+)
from ..utils import (
ExtractorError,
float_or_none,
@@ -13,7 +16,6 @@ from ..utils import (
remove_start,
sanitized_Request,
std_headers,
- struct_unpack,
)
diff --git a/youtube_dl/swfinterp.py b/youtube_dl/swfinterp.py
index 06c1d6cc1..86b28716c 100644
--- a/youtube_dl/swfinterp.py
+++ b/youtube_dl/swfinterp.py
@@ -4,10 +4,12 @@ import collections
import io
import zlib
-from .compat import compat_str
+from .compat import (
+ compat_str,
+ struct_unpack,
+)
from .utils import (
ExtractorError,
- struct_unpack,
)
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
index 6e4573784..fa16a42ad 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -26,7 +26,6 @@ import platform
import re
import socket
import ssl
-import struct
import subprocess
import sys
import tempfile
@@ -53,6 +52,7 @@ from .compat import (
compat_urlparse,
compat_xpath,
shlex_quote,
+ struct_pack,
)
@@ -1761,24 +1761,6 @@ def escape_url(url):
fragment=escape_rfc3986(url_parsed.fragment)
).geturl()
-try:
- struct.pack('!I', 0)
-except TypeError:
- # In Python 2.6 and 2.7.x < 2.7.7, struct requires a bytes argument
- # See https://bugs.python.org/issue19099
- def struct_pack(spec, *args):
- if isinstance(spec, compat_str):
- spec = spec.encode('ascii')
- return struct.pack(spec, *args)
-
- def struct_unpack(spec, *args):
- if isinstance(spec, compat_str):
- spec = spec.encode('ascii')
- return struct.unpack(spec, *args)
-else:
- struct_pack = struct.pack
- struct_unpack = struct.unpack
-
def read_batch_urls(batch_fd):
def fixup(url):