Класс данных "Зефир" не работает с типом подсказки Union - PullRequest
0 голосов
/ 06 апреля 2020

Мне нужно, чтобы в поле записей был только кортеж из одного или двух элементов, но не более. Но такой дизайн выдает ошибку.

from decimal import Decimal as _Decimal
from dataclasses import field
from typing import Tuple
from typing import Union

import marshmallow
import marshmallow_dataclass
from marshmallow_dataclass import dataclass
from marshmallow_dataclass import NewType

Decimal = NewType("Decimal", _Decimal, field=marshmallow.fields.Decimal, as_string=True)
Entries = Union[Tuple[Decimal], Tuple[Decimal, Decimal]]


@dataclass(frozen=True)
class Signal(Model):
    entries: Entries = field(default_factory=tuple)
    ...

    @classmethod
    @property
    def Schema(cls):
        return marshmallow_dataclass.class_schema(cls)

    class Meta:
        ordered = True

Сообщение об ошибке

    super().__init__(*args, **kwargs)
  File "/home/prefixet/.local/share/virtualenvs/telegram-bot-LL7aNOup/lib/python3.8/site-packages/marshmallow/fields.py", line 185, in __init__
    raise ValueError("'missing' must not be set for required fields.")
ValueError: 'missing' must not be set for required fields.

Process finished with exit code 1

Также я пытаюсь использовать Tuple [Decimal, ...], но это не работает. Спасибо.

1 Ответ

0 голосов
/ 07 апреля 2020

Это работает, если я удаляю фабрику по умолчанию:

@dataclass(frozen=True)
class Signal(Model):
    entries: Entries = field()

Надеюсь, это кому-нибудь поможет.

...