Skip to content

Commit

Permalink
[Misc] Fixes for 2.6 compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
dirkf committed Jul 5, 2023
1 parent b08a580 commit f24bc92
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 8 deletions.
10 changes: 6 additions & 4 deletions test/test_jsinterp.py
Original file line number Diff line number Diff line change
Expand Up @@ -492,10 +492,12 @@ def test_regex(self):
jsi = JSInterpreter('''
function x() { let a=/,,[/,913,/](,)}/; "".replace(a, ""); return a; }
''')
attrs = set(('findall', 'finditer', 'flags', 'groupindex',
'groups', 'match', 'pattern', 'scanner',
'search', 'split', 'sub', 'subn'))
self.assertTrue(set(dir(jsi.call_function('x'))) > attrs)
attrs = set(('findall', 'finditer', 'match', 'scanner', 'search',
'split', 'sub', 'subn'))
if sys.version_info >= (2, 7):
# documented for 2.6 but may not be found
attrs.update(('flags', 'groupindex', 'groups', 'pattern'))
self.assertSetEqual(set(dir(jsi.call_function('x'))) & attrs, attrs)

jsi = JSInterpreter('''
function x() { let a=/,,[/,913,/](,)}/i; return a; }
Expand Down
2 changes: 1 addition & 1 deletion test/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -1612,7 +1612,7 @@ def test_traverse_obj(self):
self.assertEqual(traverse_obj(_TEST_DATA, lambda x, y: x == 'urls' and isinstance(y, list)),
[_TEST_DATA['urls']],
msg='function as query key should perform a filter based on (key, value)')
self.assertCountEqual(traverse_obj(_TEST_DATA, lambda _, x: isinstance(x[0], compat_str)), {'str'},
self.assertCountEqual(traverse_obj(_TEST_DATA, lambda _, x: isinstance(x[0], compat_str)), ('str',),
msg='exceptions in the query function should be caught')

# Test alternative paths
Expand Down
6 changes: 5 additions & 1 deletion youtube_dl/YoutubeDL.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@
import traceback
import random

from ssl import OPENSSL_VERSION
try:
from ssl import OPENSSL_VERSION
except ImportError:
# Must be Python 2.6, should be built against 1.0.2
OPENSSL_VERSION = 'OpenSSL 1.0.2(?)'
from string import ascii_letters

from .compat import (
Expand Down
12 changes: 12 additions & 0 deletions youtube_dl/compat.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
# coding: utf-8
from __future__ import unicode_literals
from __future__ import division

import base64
import binascii
import collections
import ctypes
import datetime
import email
import getpass
import io
Expand Down Expand Up @@ -3150,6 +3152,15 @@ def compat_register_utf8():
lambda name: lookup('utf-8') if name == 'cp65001' else None)


# compat_datetime_timedelta_total_seconds
try:
compat_datetime_timedelta_total_seconds = datetime.timedelta.total_seconds
except AttributeError:
# Py 2.6
def compat_datetime_timedelta_total_seconds(td):
return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6


legacy = [
'compat_HTMLParseError',
'compat_HTMLParser',
Expand Down Expand Up @@ -3187,6 +3198,7 @@ def compat_register_utf8():
'compat_chr',
'compat_collections_abc',
'compat_collections_chain_map',
'compat_datetime_timedelta_total_seconds',
'compat_http_cookiejar',
'compat_http_cookiejar_Cookie',
'compat_http_cookies',
Expand Down
13 changes: 12 additions & 1 deletion youtube_dl/jsinterp.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,9 +277,20 @@ def __instantiate(self):

def __getattr__(self, name):
self.__instantiate()
# make Py 2.6 conform to its lying documentation
if name == 'flags':
self.flags = self.__flags
elif name == 'pattern':
self.pattern = self.__pattern_txt
elif name in ('groupindex', 'groups'):
# in case these get set after a match?
if hasattr(self.__self, name):
setattr(self, name, getattr(self.__self, name))
else:
return 0 if name == 'groupindex' else {}
if hasattr(self, name):
return getattr(self, name)
return super(JSInterpreter.JS_RegExp, self).__getattr__(name)
raise AttributeError('{0} has no attribute named {1}'.format(self, name))

@classmethod
def regex_flags(cls, expr):
Expand Down
3 changes: 2 additions & 1 deletion youtube_dl/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
compat_collections_abc,
compat_cookiejar,
compat_ctypes_WINFUNCTYPE,
compat_datetime_timedelta_total_seconds,
compat_etree_fromstring,
compat_expanduser,
compat_html_entities,
Expand Down Expand Up @@ -3102,7 +3103,7 @@ def unified_timestamp(date_str, day_first=True):
pass
timetuple = email.utils.parsedate_tz(date_str)
if timetuple:
return calendar.timegm(timetuple) + pm_delta * 3600 - timezone.total_seconds()
return calendar.timegm(timetuple) + pm_delta * 3600 - compat_datetime_timedelta_total_seconds(timezone)


def determine_ext(url, default_ext='unknown_video'):
Expand Down

0 comments on commit f24bc92

Please sign in to comment.