Вложенный представитель в ruamel.yamel выдает ошибкуPython

Программы на Python
Ответить
Anonymous
 Вложенный представитель в ruamel.yamel выдает ошибку

Сообщение Anonymous »

Я хочу сериализовать Factory в YAML. Эта фабрика выглядит следующим образом:

Код: Выделить всё

from attr import dataclass
from typing import Any

@dataclass
class Params:
A: dict[str,Any]
B: dict[str,Any]

@dataclass
class SomeFactory:
A_class: type
B_class: type
params: Params

@property
A(self):
return self.A_class(**self.params.A)

# similar for B

factory = SomeFactory(
A_class = classC,
B_class = classD,
Params(A={"Aparam1": "example1"}, B={"Bparam1": "example2"})
)
Я хочу yaml.dump(factory, sys.stdout) и выходной YAML должен выглядеть так

Код: Выделить всё

!SomeFactory
A: !classC
Aparam1: example1

B: !classD
Bparam1: example2

Я попробовал следующее:

Код: Выделить всё

class SomeFactory:
# ...

@classmethod
def to_yaml(cls, representer, node):
return representer.representer_mapping(
"!" + cls.__name__,
{
"A": representer.representer_mapping(
"!" + node.A_class.__name__,
node.params.A,
),
"B": representer.representer_mapping(
"!" + node.B_class.__name__,
node.params.B,
),
}
)
но в результате

Код: Выделить всё

ruamel.yaml.representer.RepresenterError:
cannot represent an object: MappingNode(tag='!classC', value=[("Aparam1", "example1")])
На самом деле я не знаю, что должны делать разные представители, поэтому изо всех сил пытаюсь понять, что мне следует делать по-другому. В документации не указаны представители, но сопровождающие, похоже, довольно активно отвечают на вопросы, поэтому я решил попробовать.

Подробнее здесь: https://stackoverflow.com/questions/793 ... rows-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»