@@ -621,7 +621,57 @@ def _default_constructor(loader, tag_suffix, node): # noqa: ARG001
621621
622622 def decode (self , data ):
623623 """Parse YAML string."""
624- return self .yaml .load (data , Loader = self .yaml_loader , ** self .opts )
624+ items = list (
625+ self .yaml .load_all (data , Loader = self .yaml_loader , ** self .opts ),
626+ )
627+
628+ if len (items ) == 1 :
629+ return items [0 ]
630+
631+ return ListOfDocuments (items )
632+
633+
634+ class ListOfDocuments :
635+ """Wrapper to represent bunch of documents like YAML stream."""
636+
637+ def __init__ (self , items ):
638+ """Initialize wrapper.
639+
640+ Args:
641+ items: list of documents.
642+
643+ """
644+ self .items = items
645+
646+ def __repr__ (self ):
647+ """Repr for wrapper."""
648+ return f'ListOfDocuments({ self .items } )'
649+
650+
651+ class ListOfDocumentsHandler (nested_diff .handlers .ListHandler ):
652+ """ListOfDocuments handler."""
653+
654+ extension_id = 'nested_diff.ListOfDocuments'
655+ handled_type = ListOfDocuments
656+
657+ def diff (self , differ , a , b ):
658+ """Calculate diff for two ListOfDocuments objects.
659+
660+ Args:
661+ differ: nested_diff.Differ object.
662+ a: First object to diff.
663+ b: Second object to diff.
664+
665+ Returns:
666+ Tuple: equality flag and nested diff.
667+
668+ """
669+ equal , diff = differ .diff (a .items , b .items )
670+
671+ if diff :
672+ diff ['E' ] = self .extension_id
673+
674+ return equal , diff
625675
626676
627677class YamlNode :
0 commit comments