from__future__importannotationsfromdataclassesimportdataclassfromitertoolsimportchainfromtypingimportTYPE_CHECKINGifTYPE_CHECKING:# pragma: no coverfromyamlimportDumper,Nodefrom.dataimportData__all__=["Representer"]
[docs]@dataclassclassRepresenter:"""Representer for :class:`.Data` When dumping an object into YAML string, it deserializes :class:`.Data` instance(s) in it. Add the representer to ``PyYAML`` ``Dumper`` class as below:: import yaml_include rpr = yaml_include.Representer("inc") # ATTENTION: No "!" here !!! yaml.add_representer(Data, rpr) """tag:str"""YAML tag name for include statement Attention: Custom YAML tag's name starts with ``"!"``. But we **MUST NOT** put a ``"!"`` at the beginning here, because :func:`yaml.add_representer` will add the symbol itself. """def__call__(self,dumper:Dumper,data)->Node:ifnotisinstance(data,Data):# pragma: no coverraiseTypeError(f"{type(data)}")tag="!"+self.tagifdata.mapping_params:returndumper.represent_mapping(tag,{**{"urlpath":data.urlpath},**data.mapping_params})ifdata.sequence_params:returndumper.represent_sequence(tag,chain((data.urlpath,),data.sequence_params))returndumper.represent_scalar(tag,data.urlpath)