s-knibbs / dataclasses-jsonschema

JSON schema generation from dataclasses
MIT License
166 stars 38 forks source link

Optional List of dataclasses does not allow None Value #178

Open JangasCodingplace opened 2 years ago

JangasCodingplace commented 2 years ago

Code

@dataclass
class AnyDc(JsonSchemaMixin):
    id: int

@dataclass
class Foo(JsonSchemaMixin):
    any_dc: Optional[List[AnyDc]] = None

if "__name__" == "__main__":
    d = {"any_dc": None}
    f = Foo.from_dict(d)

Error:

> dataclasses_jsonschema.ValidationError: None is not of type 'array'
JangasCodingplace commented 2 years ago

Simpler Usecase:

@dataclass
class ReviewEntity(JsonSchemaMixin):
    source_type: str
    source: str
    review_id: str
    rating: int
    date: datetime.date
    text: str
    group: Optional[str] = None
    user: Optional[str] = None
    country: Optional[str] = None
    city: Optional[str] = None

Error Message for None at User field:

dataclasses_jsonschema.ValidationError: None is not of type 'string'

Failed validating 'type' in schema['properties']['user']:
    {'type': 'string'}

On instance['user']:
    None
gdassori commented 1 year ago

Hello, do you have any plans to fix this issue?

When using "omit_none=False" during serialization (which is available), it's impossible to deserialize back, so the flow is broken.