pull/13993/merge
garret1317 2 days ago committed by GitHub
commit 20faff009b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1,4 +1,5 @@
import http.cookies import http.cookies
import dataclasses
import re import re
import xml.etree.ElementTree import xml.etree.ElementTree
@ -439,6 +440,17 @@ class TestTraversal:
assert traverse_obj(data, [..., filter]) == [True, 1, 1.1, 'str', {0: 0}, [1]], \ assert traverse_obj(data, [..., filter]) == [True, 1, 1.1, 'str', {0: 0}, [1]], \
'`filter` should filter falsy values' '`filter` should filter falsy values'
def test_traversal_dataclass(self):
@dataclasses.dataclass
class _TestDataclass:
val: str
dc = _TestDataclass(val='yt-dlp')
assert traverse_obj(dc, 'val') == 'yt-dlp', \
'Dataclasses should be traversable'
assert traverse_obj({'dataclass': dc}, ('dataclass', 'val')) == 'yt-dlp', \
'Dataclasses inside other objects should be traversable'
class TestTraversalHelpers: class TestTraversalHelpers:
def test_traversal_require(self): def test_traversal_require(self):

@ -3,6 +3,7 @@ from __future__ import annotations
import collections import collections
import collections.abc import collections.abc
import contextlib import contextlib
import dataclasses
import functools import functools
import http.cookies import http.cookies
import inspect import inspect
@ -116,6 +117,9 @@ def traverse_obj(
branching = False branching = False
result = None result = None
if dataclasses.is_dataclass(obj):
obj = dataclasses.asdict(obj)
if obj is None and traverse_string: if obj is None and traverse_string:
if key is ... or callable(key) or isinstance(key, slice): if key is ... or callable(key) or isinstance(key, slice):
branching = True branching = True

Loading…
Cancel
Save