X-Git-Url: https://jfr.im/git/yt-dlp.git/blobdiff_plain/b4a252fba81f53631c07ca40ce7583f5d19a8a36..800ec085ccf98420584d8bb38c20a2c079669b09:/yt_dlp/jsinterp.py diff --git a/yt_dlp/jsinterp.py b/yt_dlp/jsinterp.py index d6d555733..5c82de19e 100644 --- a/yt_dlp/jsinterp.py +++ b/yt_dlp/jsinterp.py @@ -190,7 +190,7 @@ def interpret_statement(self, stmt, local_vars, allow_recursion, *args, **kwargs cls.write('=> Raises:', e, '<-|', stmt, level=allow_recursion) raise if cls.ENABLED and stmt.strip(): - if should_ret or not repr(ret) == stmt: + if should_ret or repr(ret) != stmt: cls.write(['->', '=>'][should_ret], repr(ret), '<-|', stmt, level=allow_recursion) return ret, should_ret return interpret_statement @@ -216,7 +216,7 @@ def __init__(self, code, objects=None): self.code, self._functions = code, {} self._objects = {} if objects is None else objects - class Exception(ExtractorError): + class Exception(ExtractorError): # noqa: A001 def __init__(self, msg, expr=None, *args, **kwargs): if expr is not None: msg = f'{msg.rstrip()} in: {truncate_string(expr, 50, 50)}' @@ -235,7 +235,7 @@ def _regex_flags(cls, expr): flags = 0 if not expr: return flags, expr - for idx, ch in enumerate(expr): + for idx, ch in enumerate(expr): # noqa: B007 if ch not in cls._RE_FLAGS: break flags |= cls._RE_FLAGS[ch] @@ -474,7 +474,7 @@ def dict_item(key, val): if remaining.startswith('{'): body, expr = self._separate_at_paren(remaining) else: - switch_m = re.match(r'switch\s*\(', remaining) # FIXME + switch_m = re.match(r'switch\s*\(', remaining) # FIXME: ? if switch_m: switch_val, remaining = self._separate_at_paren(remaining[switch_m.end() - 1:]) body, expr = self._separate_at_paren(remaining, '}') @@ -585,9 +585,9 @@ def dict_item(key, val): return int(expr), should_return elif expr == 'break': - raise JS_Break() + raise JS_Break elif expr == 'continue': - raise JS_Continue() + raise JS_Continue elif expr == 'undefined': return JS_Undefined, should_return elif expr == 'NaN': @@ -697,12 +697,12 @@ def eval_method(): elif member == 'splice': assertion(isinstance(obj, list), 'must be applied on a list') assertion(argvals, 'takes one or more arguments') - index, howMany = map(int, (argvals + [len(obj)])[:2]) + index, how_many = map(int, ([*argvals, len(obj)])[:2]) if index < 0: index += len(obj) add_items = argvals[2:] res = [] - for i in range(index, min(index + howMany, len(obj))): + for _ in range(index, min(index + how_many, len(obj))): res.append(obj.pop(index)) for i, item in enumerate(add_items): obj.insert(index + i, item) @@ -726,12 +726,12 @@ def eval_method(): elif member == 'forEach': assertion(argvals, 'takes one or more arguments') assertion(len(argvals) <= 2, 'takes at-most 2 arguments') - f, this = (argvals + [''])[:2] + f, this = ([*argvals, ''])[:2] return [f((item, idx, obj), {'this': this}, allow_recursion) for idx, item in enumerate(obj)] elif member == 'indexOf': assertion(argvals, 'takes one or more arguments') assertion(len(argvals) <= 2, 'takes at-most 2 arguments') - idx, start = (argvals + [0])[:2] + idx, start = ([*argvals, 0])[:2] try: return obj.index(idx, start) except ValueError: @@ -779,7 +779,7 @@ def extract_object(self, objname): obj = {} obj_m = re.search( r'''(?x) - (?(%s\s*:\s*function\s*\(.*?\)\s*{.*?}(?:,\s*)?)*) }\s*; ''' % (re.escape(objname), _FUNC_NAME_RE), @@ -812,9 +812,9 @@ def extract_function_code(self, funcname): \((?P[^)]*)\)\s* (?P{.+})''' % {'name': re.escape(funcname)}, self.code) - code, _ = self._separate_at_paren(func_m.group('code')) if func_m is None: raise self.Exception(f'Could not find JS function "{funcname}"') + code, _ = self._separate_at_paren(func_m.group('code')) return [x.strip() for x in func_m.group('args').split(',')], code def extract_function(self, funcname):