From a9df16db4720d4b7b4514cb3e2ea6e22bd9dac94 Mon Sep 17 00:00:00 2001 From: garret1317 Date: Mon, 11 Aug 2025 08:20:24 +0100 Subject: [PATCH 1/3] traverse_obj: allow traversal of dataclasses (for protobug) --- yt_dlp/utils/traversal.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/yt_dlp/utils/traversal.py b/yt_dlp/utils/traversal.py index 76b51f53d1..ce2ed186b5 100644 --- a/yt_dlp/utils/traversal.py +++ b/yt_dlp/utils/traversal.py @@ -3,6 +3,7 @@ from __future__ import annotations import collections import collections.abc import contextlib +import dataclasses import functools import http.cookies import inspect @@ -233,6 +234,8 @@ def traverse_obj( result = list(map(apply_specials, obj.iterfind(xpath))) else: result = apply_specials(obj) + elif dataclasses.is_dataclass(obj): + result = getattr(obj, key) return branching, result if branching else (result,) From 0d71d6f4190e0adc044244b43141b6ac8faf5cd7 Mon Sep 17 00:00:00 2001 From: garret1317 Date: Mon, 18 Aug 2025 14:56:09 +0100 Subject: [PATCH 2/3] revert prev a9df16db4720d4b7b4514cb3e2ea6e22bd9dac94 --- yt_dlp/utils/traversal.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/yt_dlp/utils/traversal.py b/yt_dlp/utils/traversal.py index ce2ed186b5..76b51f53d1 100644 --- a/yt_dlp/utils/traversal.py +++ b/yt_dlp/utils/traversal.py @@ -3,7 +3,6 @@ from __future__ import annotations import collections import collections.abc import contextlib -import dataclasses import functools import http.cookies import inspect @@ -234,8 +233,6 @@ def traverse_obj( result = list(map(apply_specials, obj.iterfind(xpath))) else: result = apply_specials(obj) - elif dataclasses.is_dataclass(obj): - result = getattr(obj, key) return branching, result if branching else (result,) From 593b08e376f367b5d8efc14f15955f72f06ee681 Mon Sep 17 00:00:00 2001 From: garret1317 Date: Mon, 18 Aug 2025 14:57:05 +0100 Subject: [PATCH 3/3] convert the dataclass to a dict to get everything for free :) --- yt_dlp/utils/traversal.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/yt_dlp/utils/traversal.py b/yt_dlp/utils/traversal.py index 76b51f53d1..65a94ccb9e 100644 --- a/yt_dlp/utils/traversal.py +++ b/yt_dlp/utils/traversal.py @@ -3,6 +3,7 @@ from __future__ import annotations import collections import collections.abc import contextlib +import dataclasses import functools import http.cookies import inspect @@ -116,6 +117,9 @@ def traverse_obj( branching = False result = None + if dataclasses.is_dataclass(obj): + obj = dataclasses.asdict(obj) + if obj is None and traverse_string: if key is ... or callable(key) or isinstance(key, slice): branching = True