dataclasses-json
dataclasses-json copied to clipboard
Tuple in dataclasses are not created properly
Related to https://github.com/lidatong/dataclasses-json/pull/279
On python 3.8, using a tuple with two fields results in an error when attempting to fetch the schema of the class.
A minimal example:
import typing
from dataclasses import dataclass
from dataclasses_json import dataclass_json
@dataclass_json
@dataclass
class Foo:
bar: typing.Tuple[float, float]
Foo.schema()
returns:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/abury-admin/.local/lib/python3.8/site-packages/dataclasses_json/api.py", line 99, in schema
Schema = build_schema(cls, DataClassJsonMixin, infer_missing, partial)
File "/home/abury-admin/.local/lib/python3.8/site-packages/dataclasses_json/mm.py", line 361, in build_schema
schema_ = schema(cls, mixin, infer_missing)
File "/home/abury-admin/.local/lib/python3.8/site-packages/dataclasses_json/mm.py", line 311, in schema
t = build_type(type_, options, mixin, field, cls)
File "/home/abury-admin/.local/lib/python3.8/site-packages/dataclasses_json/mm.py", line 276, in build_type
return inner(type_, options)
File "/home/abury-admin/.local/lib/python3.8/site-packages/dataclasses_json/mm.py", line 260, in inner
return TYPES[origin](*args, **options)
File "/home/abury-admin/.local/lib/python3.8/site-packages/marshmallow/fields.py", line 801, in __init__
super().__init__(*args, **kwargs)
TypeError: __init__() takes 1 positional argument but 2 were given
I resolved the error with the following code.
from marshmallow import Schema, fields
from dataclasses import dataclass, field
from dataclasses_json import DataClassJsonMixin, config
@dataclass_json
@dataclass
class Foo:
bar: typing.Tuple[float, float] = field(
metadata=config(
mm_field=fields.Tuple((fields.Float(), fields.Float()))
))
Foo.schema()
This is fixed by https://github.com/lidatong/dataclasses-json/issues/432 / https://github.com/lidatong/dataclasses-json/pull/434.