mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[Misc] Fixes for 2.6 compatibility
This commit is contained in:
		| @@ -492,10 +492,12 @@ class TestJSInterpreter(unittest.TestCase): | |||||||
|         jsi = JSInterpreter(''' |         jsi = JSInterpreter(''' | ||||||
|         function x() { let a=/,,[/,913,/](,)}/; "".replace(a, ""); return a; } |         function x() { let a=/,,[/,913,/](,)}/; "".replace(a, ""); return a; } | ||||||
|         ''') |         ''') | ||||||
|         attrs = set(('findall', 'finditer', 'flags', 'groupindex', |         attrs = set(('findall', 'finditer', 'match', 'scanner', 'search', | ||||||
|                      'groups', 'match', 'pattern', 'scanner', |                      'split', 'sub', 'subn')) | ||||||
|                      'search', 'split', 'sub', 'subn')) |         if sys.version_info >= (2, 7): | ||||||
|         self.assertTrue(set(dir(jsi.call_function('x'))) > attrs) |             # 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(''' |         jsi = JSInterpreter(''' | ||||||
|         function x() { let a=/,,[/,913,/](,)}/i; return a; } |         function x() { let a=/,,[/,913,/](,)}/i; return a; } | ||||||
|   | |||||||
| @@ -1612,7 +1612,7 @@ Line 1 | |||||||
|         self.assertEqual(traverse_obj(_TEST_DATA, lambda x, y: x == 'urls' and isinstance(y, list)), |         self.assertEqual(traverse_obj(_TEST_DATA, lambda x, y: x == 'urls' and isinstance(y, list)), | ||||||
|                          [_TEST_DATA['urls']], |                          [_TEST_DATA['urls']], | ||||||
|                          msg='function as query key should perform a filter based on (key, value)') |                          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') |                               msg='exceptions in the query function should be caught') | ||||||
|  |  | ||||||
|         # Test alternative paths |         # Test alternative paths | ||||||
|   | |||||||
| @@ -25,7 +25,11 @@ import tokenize | |||||||
| import traceback | import traceback | ||||||
| import random | 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 string import ascii_letters | ||||||
|  |  | ||||||
| from .compat import ( | from .compat import ( | ||||||
|   | |||||||
| @@ -1,10 +1,12 @@ | |||||||
| # coding: utf-8 | # coding: utf-8 | ||||||
| from __future__ import unicode_literals | from __future__ import unicode_literals | ||||||
|  | from __future__ import division | ||||||
|  |  | ||||||
| import base64 | import base64 | ||||||
| import binascii | import binascii | ||||||
| import collections | import collections | ||||||
| import ctypes | import ctypes | ||||||
|  | import datetime | ||||||
| import email | import email | ||||||
| import getpass | import getpass | ||||||
| import io | import io | ||||||
| @@ -3150,6 +3152,15 @@ def compat_register_utf8(): | |||||||
|             lambda name: lookup('utf-8') if name == 'cp65001' else None) |             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 = [ | legacy = [ | ||||||
|     'compat_HTMLParseError', |     'compat_HTMLParseError', | ||||||
|     'compat_HTMLParser', |     'compat_HTMLParser', | ||||||
| @@ -3187,6 +3198,7 @@ __all__ = [ | |||||||
|     'compat_chr', |     'compat_chr', | ||||||
|     'compat_collections_abc', |     'compat_collections_abc', | ||||||
|     'compat_collections_chain_map', |     'compat_collections_chain_map', | ||||||
|  |     'compat_datetime_timedelta_total_seconds', | ||||||
|     'compat_http_cookiejar', |     'compat_http_cookiejar', | ||||||
|     'compat_http_cookiejar_Cookie', |     'compat_http_cookiejar_Cookie', | ||||||
|     'compat_http_cookies', |     'compat_http_cookies', | ||||||
|   | |||||||
| @@ -277,9 +277,20 @@ class JSInterpreter(object): | |||||||
|  |  | ||||||
|         def __getattr__(self, name): |         def __getattr__(self, name): | ||||||
|             self.__instantiate() |             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): |             if hasattr(self, name): | ||||||
|                 return getattr(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 |         @classmethod | ||||||
|         def regex_flags(cls, expr): |         def regex_flags(cls, expr): | ||||||
|   | |||||||
| @@ -47,6 +47,7 @@ from .compat import ( | |||||||
|     compat_collections_abc, |     compat_collections_abc, | ||||||
|     compat_cookiejar, |     compat_cookiejar, | ||||||
|     compat_ctypes_WINFUNCTYPE, |     compat_ctypes_WINFUNCTYPE, | ||||||
|  |     compat_datetime_timedelta_total_seconds, | ||||||
|     compat_etree_fromstring, |     compat_etree_fromstring, | ||||||
|     compat_expanduser, |     compat_expanduser, | ||||||
|     compat_html_entities, |     compat_html_entities, | ||||||
| @@ -3102,7 +3103,7 @@ def unified_timestamp(date_str, day_first=True): | |||||||
|             pass |             pass | ||||||
|     timetuple = email.utils.parsedate_tz(date_str) |     timetuple = email.utils.parsedate_tz(date_str) | ||||||
|     if timetuple: |     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'): | def determine_ext(url, default_ext='unknown_video'): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user