Skip to content

Commit

Permalink
[utils,compat] Move struct_pack and struct_unpack to compat.py
Browse files Browse the repository at this point in the history
  • Loading branch information
Yen Chi Hsuan committed May 10, 2016
1 parent 4350b74 commit dab0dae
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 28 deletions.
5 changes: 5 additions & 0 deletions test/test_compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
compat_urllib_parse_unquote,
compat_urllib_parse_unquote_plus,
compat_urllib_parse_urlencode,
struct_unpack,
)


Expand Down Expand Up @@ -102,5 +103,9 @@ def test_compat_etree_fromstring(self):
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()
4 changes: 0 additions & 4 deletions test/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@
smuggle_url,
str_to_int,
strip_jsonp,
struct_unpack,
timeconvert,
unescapeHTML,
unified_strdate,
Expand Down Expand Up @@ -457,9 +456,6 @@ def get_page(pagenum):
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
Expand Down
23 changes: 23 additions & 0 deletions youtube_dl/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import shlex
import shutil
import socket
import struct
import subprocess
import sys
import itertools
Expand Down Expand Up @@ -592,6 +593,26 @@ def compat_itertools_count(start=0, step=1):
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',
Expand Down Expand Up @@ -634,6 +655,8 @@ def compat_itertools_count(start=0, step=1):
'compat_xml_parse_error',
'compat_xpath',
'shlex_quote',
'struct_pack',
'struct_unpack',
'subprocess_check_output',
'workaround_optparse_bug9161',
]
4 changes: 2 additions & 2 deletions youtube_dl/downloader/f4m.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@
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,
)

Expand Down
4 changes: 3 additions & 1 deletion youtube_dl/extractor/rtve.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,16 @@
import time

from .common import InfoExtractor
from ..compat import (
struct_unpack,
)
from ..utils import (
ExtractorError,
float_or_none,
remove_end,
remove_start,
sanitized_Request,
std_headers,
struct_unpack,
)


Expand Down
6 changes: 4 additions & 2 deletions youtube_dl/swfinterp.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
import io
import zlib

from .compat import compat_str
from .compat import (
compat_str,
struct_unpack,
)
from .utils import (
ExtractorError,
struct_unpack,
)


Expand Down
20 changes: 1 addition & 19 deletions youtube_dl/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
import re
import socket
import ssl
import struct
import subprocess
import sys
import tempfile
Expand All @@ -53,6 +52,7 @@
compat_urlparse,
compat_xpath,
shlex_quote,
struct_pack,
)


Expand Down Expand Up @@ -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):
Expand Down

0 comments on commit dab0dae

Please sign in to comment.