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(''' | ||||
|         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; } | ||||
|   | ||||
| @@ -1612,7 +1612,7 @@ Line 1 | ||||
|         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 | ||||
|   | ||||
| @@ -25,7 +25,11 @@ import tokenize | ||||
| 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 ( | ||||
|   | ||||
| @@ -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 | ||||
| @@ -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', | ||||
| @@ -3187,6 +3198,7 @@ __all__ = [ | ||||
|     'compat_chr', | ||||
|     'compat_collections_abc', | ||||
|     'compat_collections_chain_map', | ||||
|     'compat_datetime_timedelta_total_seconds', | ||||
|     'compat_http_cookiejar', | ||||
|     'compat_http_cookiejar_Cookie', | ||||
|     'compat_http_cookies', | ||||
|   | ||||
| @@ -277,9 +277,20 @@ class JSInterpreter(object): | ||||
|  | ||||
|         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): | ||||
|   | ||||
| @@ -47,6 +47,7 @@ from .compat import ( | ||||
|     compat_collections_abc, | ||||
|     compat_cookiejar, | ||||
|     compat_ctypes_WINFUNCTYPE, | ||||
|     compat_datetime_timedelta_total_seconds, | ||||
|     compat_etree_fromstring, | ||||
|     compat_expanduser, | ||||
|     compat_html_entities, | ||||
| @@ -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'): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user