dataclasses-json icon indicating copy to clipboard operation
dataclasses-json copied to clipboard

Tuple in dataclasses are not created properly

Open gyscos opened this issue 2 years ago • 1 comments

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

gyscos avatar Oct 11 '21 16:10 gyscos

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()

yuji38kwmt avatar Aug 02 '22 15:08 yuji38kwmt

This is fixed by https://github.com/lidatong/dataclasses-json/issues/432 / https://github.com/lidatong/dataclasses-json/pull/434.

matt035343 avatar Jul 25 '23 13:07 matt035343