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
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/.
refFieldExampleis 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
Results in:
Is there a way for me to avoid
RefFieldExampleinheriting fromMyBasewhilePersoncontinues to inherit fromMyBase?The reason I want this in my actual application the parent constructor needs to create things for the
Personobject, but theRefFieldExampleobject 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