I would like to specify a base class, but not have it enabled on properties that are referenced, i.e. no base class on the properties classes.
I'm not sure if this is a usage question or not - I don't see support for this.
I am starting with JSON schema and generating data classes.
The JSON schema that I am working with contains referenced fields.
Here's an example - base on https://koxudaxi.github.io/datamodel-code-generator/jsonschema/. refFieldExample
is the new part.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Person",
"type": "object",
"properties": {
"firstName": {
"type": "string",
"description": "The person's first name."
},
"lastName": {
"type": "string",
"description": "The person's last name."
},
"age": {
"description": "Age in years which must be equal to or greater than zero.",
"type": "integer",
"minimum": 0
},
"friends": {
"type": "array"
},
"comment": {
"type": "null"
},
"refFieldExample" : {
"$ref" : "#/definitions/refFieldExample"
}
},
"definitions" : {
"refFieldExample" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"example" : {
"type" : "string",
"enum" : [ "Enabled", "Disabled" ]
}
},
}
}
}
Running this
datamodel-codegen --base-class=base.MyBase --output-model-type dataclasses.dataclass --input person.json --input-file-type jsonschema --output model.py
Results in:
# generated by datamodel-codegen:
# filename: person.json
# timestamp: 2024-04-12T20:36:40+00:00
from __future__ import annotations
from dataclasses import dataclass
from enum import Enum
from typing import List, Optional
from base import MyBase
class Example(Enum):
Enabled = 'Enabled'
Disabled = 'Disabled'
@dataclass
class RefFieldExample(MyBase):
example: Optional[Example] = None
@dataclass
class Person(MyBase):
firstName: Optional[str] = None
lastName: Optional[str] = None
age: Optional[int] = None
friends: Optional[List] = None
comment: None = None
refFieldExample: Optional[RefFieldExample] = None
Is there a way for me to avoid RefFieldExample
inheriting from MyBase
while Person
continues to inherit from MyBase
?
The reason I want this in my actual application the parent constructor needs to create things for the Person
object, but the RefFieldExample
object is really just properties/data/input and can't share the same constructor.
I thought about trying to work around this with a custom template and extra template data to indicate which properties should inherit and which should not, but I have not gotten that working and it does not feel like a good appoach.
Thanks
Pay now to fund the work behind this issue.
Get updates on progress being made.
Maintainer is rewarded once the issue is completed.
You're funding impactful open source efforts
You want to contribute to this effort
You want to get funding like this too