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

Verify that literal values are valid when decoding

Open roshcagra opened this issue 3 years ago • 2 comments

I have some fields in my dataclasses that are large unions, so I've tried setting single-value literals on them to help the decoder discriminate between them, but it looks like while literals are supported, the values aren't validated during decoding.

For example, if you have two dataclasses:

@dataclass
class Foo(JsonSchemaMixin):
     common_field: int
     name: Literal['Foo'] = 'Foo'

@dataclass
class Bar(JsonSchemaMixin):
     common_field: int
     name: Literal['Bar'] = 'Bar'
     other_field: Optional[int] = None

and a dataclass that uses them as a union type,

@dataclass
class Baz(JsonSchemaMixin):
     my_foo_bar: Union[Bar, Foo]

Then

Baz.from_dict(
   Baz(my_foo_bar=
      Foo(common_field=1)
   ).to_dict()
)

will result in

Baz(my_foor_bar=Bar(common_field=1))

even though the literals should help disciminate.

roshcagra avatar Jun 07 '21 20:06 roshcagra

I've got a fix for this! Will submit the PR ASAP

roshcagra avatar Jun 07 '21 21:06 roshcagra

This is pretty closely related with #170

s-knibbs avatar Sep 30 '21 14:09 s-knibbs