1
0
mirror of https://github.com/ytdl-org/youtube-dl.git synced 2024-12-22 16:06:49 +00:00

[utils,compat] Move struct_pack and struct_unpack to compat.py

This commit is contained in:
Yen Chi Hsuan 2016-04-23 18:28:49 +08:00
parent 4350b74545
commit dab0daeeb0
No known key found for this signature in database
GPG Key ID: 3FDDD575826C5C30
7 changed files with 38 additions and 28 deletions

View File

@ -20,6 +20,7 @@ from youtube_dl.compat import (
compat_urllib_parse_unquote, compat_urllib_parse_unquote,
compat_urllib_parse_unquote_plus, compat_urllib_parse_unquote_plus,
compat_urllib_parse_urlencode, 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('chinese').text, compat_str))
self.assertTrue(isinstance(doc.find('foo/bar').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__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -55,7 +55,6 @@ from youtube_dl.utils import (
smuggle_url, smuggle_url,
str_to_int, str_to_int,
strip_jsonp, strip_jsonp,
struct_unpack,
timeconvert, timeconvert,
unescapeHTML, unescapeHTML,
unified_strdate, unified_strdate,
@ -457,9 +456,6 @@ class TestUtil(unittest.TestCase):
testPL(5, 2, (2, 99), [2, 3, 4]) testPL(5, 2, (2, 99), [2, 3, 4])
testPL(5, 2, (20, 99), []) testPL(5, 2, (20, 99), [])
def test_struct_unpack(self):
self.assertEqual(struct_unpack('!B', b'\x00'), (0,))
def test_read_batch_urls(self): def test_read_batch_urls(self):
f = io.StringIO('''\xef\xbb\xbf foo f = io.StringIO('''\xef\xbb\xbf foo
bar\r bar\r

View File

@ -11,6 +11,7 @@ import re
import shlex import shlex
import shutil import shutil
import socket import socket
import struct
import subprocess import subprocess
import sys import sys
import itertools import itertools
@ -592,6 +593,26 @@ if sys.version_info >= (3, 0):
else: else:
from tokenize import generate_tokens as compat_tokenize_tokenize 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__ = [ __all__ = [
'compat_HTMLParser', 'compat_HTMLParser',
'compat_HTTPError', 'compat_HTTPError',
@ -634,6 +655,8 @@ __all__ = [
'compat_xml_parse_error', 'compat_xml_parse_error',
'compat_xpath', 'compat_xpath',
'shlex_quote', 'shlex_quote',
'struct_pack',
'struct_unpack',
'subprocess_check_output', 'subprocess_check_output',
'workaround_optparse_bug9161', 'workaround_optparse_bug9161',
] ]

View File

@ -12,13 +12,13 @@ from ..compat import (
compat_urlparse, compat_urlparse,
compat_urllib_error, compat_urllib_error,
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
struct_pack,
struct_unpack,
) )
from ..utils import ( from ..utils import (
encodeFilename, encodeFilename,
fix_xml_ampersands, fix_xml_ampersands,
sanitize_open, sanitize_open,
struct_pack,
struct_unpack,
xpath_text, xpath_text,
) )

View File

@ -6,6 +6,9 @@ import re
import time import time
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import (
struct_unpack,
)
from ..utils import ( from ..utils import (
ExtractorError, ExtractorError,
float_or_none, float_or_none,
@ -13,7 +16,6 @@ from ..utils import (
remove_start, remove_start,
sanitized_Request, sanitized_Request,
std_headers, std_headers,
struct_unpack,
) )

View File

@ -4,10 +4,12 @@ import collections
import io import io
import zlib import zlib
from .compat import compat_str from .compat import (
compat_str,
struct_unpack,
)
from .utils import ( from .utils import (
ExtractorError, ExtractorError,
struct_unpack,
) )

View File

@ -26,7 +26,6 @@ import platform
import re import re
import socket import socket
import ssl import ssl
import struct
import subprocess import subprocess
import sys import sys
import tempfile import tempfile
@ -53,6 +52,7 @@ from .compat import (
compat_urlparse, compat_urlparse,
compat_xpath, compat_xpath,
shlex_quote, shlex_quote,
struct_pack,
) )
@ -1761,24 +1761,6 @@ def escape_url(url):
fragment=escape_rfc3986(url_parsed.fragment) fragment=escape_rfc3986(url_parsed.fragment)
).geturl() ).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 read_batch_urls(batch_fd):
def fixup(url): def fixup(url):