aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--yt_dlp/jsinterp.py15
-rw-r--r--yt_dlp/utils.py6
2 files changed, 14 insertions, 7 deletions
diff --git a/yt_dlp/jsinterp.py b/yt_dlp/jsinterp.py
index 31ab204d7..db6526009 100644
--- a/yt_dlp/jsinterp.py
+++ b/yt_dlp/jsinterp.py
@@ -9,6 +9,7 @@ import re
from .utils import (
NO_DEFAULT,
ExtractorError,
+ function_with_repr,
js_to_json,
remove_quotes,
truncate_string,
@@ -184,7 +185,8 @@ class Debugger:
cls.write('=> Raises:', e, '<-|', stmt, level=allow_recursion)
raise
if cls.ENABLED and stmt.strip():
- cls.write(['->', '=>'][should_ret], repr(ret), '<-|', stmt, level=allow_recursion)
+ if should_ret or not repr(ret) == stmt:
+ cls.write(['->', '=>'][should_ret], repr(ret), '<-|', stmt, level=allow_recursion)
return ret, should_ret
return interpret_statement
@@ -205,8 +207,6 @@ class JSInterpreter:
'y': 4096, # Perform a "sticky" search that matches starting at the current position in the target string
}
- _EXC_NAME = '__yt_dlp_exception__'
-
def __init__(self, code, objects=None):
self.code, self._functions = code, {}
self._objects = {} if objects is None else objects
@@ -220,6 +220,8 @@ class JSInterpreter:
def _named_object(self, namespace, obj):
self.__named_object_counter += 1
name = f'__yt_dlp_jsinterp_obj{self.__named_object_counter}'
+ if callable(obj) and not isinstance(obj, function_with_repr):
+ obj = function_with_repr(obj, f'F<{self.__named_object_counter}>')
namespace[name] = obj
return name
@@ -784,7 +786,8 @@ class JSInterpreter:
fields)
for f in fields_m:
argnames = f.group('args').split(',')
- obj[remove_quotes(f.group('key'))] = self.build_function(argnames, f.group('code'))
+ name = remove_quotes(f.group('key'))
+ obj[name] = function_with_repr(self.build_function(argnames, f.group('code')), f'F<{name}>')
return obj
@@ -806,7 +809,9 @@ class JSInterpreter:
return [x.strip() for x in func_m.group('args').split(',')], code
def extract_function(self, funcname):
- return self.extract_function_from_code(*self.extract_function_code(funcname))
+ return function_with_repr(
+ self.extract_function_from_code(*self.extract_function_code(funcname)),
+ f'F<{funcname}>')
def extract_function_from_code(self, argnames, code, *global_stack):
local_vars = {}
diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py
index 9ff096433..19c140483 100644
--- a/yt_dlp/utils.py
+++ b/yt_dlp/utils.py
@@ -6057,14 +6057,16 @@ class classproperty:
class function_with_repr:
- def __init__(self, func):
+ def __init__(self, func, repr_=None):
functools.update_wrapper(self, func)
- self.func = func
+ self.func, self.__repr = func, repr_
def __call__(self, *args, **kwargs):
return self.func(*args, **kwargs)
def __repr__(self):
+ if self.__repr:
+ return self.__repr
return f'{self.func.__module__}.{self.func.__qualname__}'