I am trying to convert an existing json schema into pydantic model (for fastapi proj) using "datamodel-code-genertor" (https://pydantic-docs.helpmanual.io/datamodel_code_generator/). But it is failing. I tried to simulate the issue with following schema:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Person",
"type": "object",
"properties": {
"name": {
"title": "name",
"type": "string"
},
"pet": {
"title": "pet",
"type": "object",
"oneOf": [
{
"$ref": "#/definitions/Pets/Cat"
},
{
"$ref": "#/definitions/Pets/Dog"
}
]
}
},
"definitions": {
"Pets": {
"Cat": {
"title": "Cat",
"type": "object",
"required": [
"type",
"hunts",
"age"
],
"properties": {
"pet_type": {
"enum": [
"Cat"
]
},
"hunts": {
"type": "boolean"
},
"age": {
"type": "string"
}
}
},
"Dog": {
"title": "Dog",
"type": "object",
"required": [
"type",
"bark",
"breed"
],
"properties": {
"pet_type": {
"enum": [
"Dog"
]
},
"bark": {
"type": "boolean"
},
"breed": {
"type": "string"
}
}
}
}
},
"additionalProperties": false
}
This is the error I am getting:
C:\schema\refactored_schema>datamodel-codegen --input pets_modifiled_question_working.json --input-file-type=jsonschema --output pets_modifiled_question_working.py
Traceback (most recent call last):
File "c:\users\sonali.ingale\appdata\local\programs\python\python39\lib\site-packages\datamodel_code_generator\__main__.py", line 281, in main
generate(
File "c:\users\sonali.ingale\appdata\local\programs\python\python39\lib\site-packages\datamodel_code_generator\__init__.py", line 259, in generate
results = parser.parse()
File "c:\users\sonali.ingale\appdata\local\programs\python\python39\lib\site-packages\datamodel_code_generator\parser\base.py", line 332, in parse
_, sorted_data_models, require_update_action_models = sort_data_models(
File "c:\users\sonali.ingale\appdata\local\programs\python\python39\lib\site-packages\datamodel_code_generator\parser\base.py", line 110, in sort_data_models
return sort_data_models(
File "c:\users\sonali.ingale\appdata\local\programs\python\python39\lib\site-packages\datamodel_code_generator\parser\base.py", line 110, in sort_data_models
return sort_data_models(
File "c:\users\sonali.ingale\appdata\local\programs\python\python39\lib\site-packages\datamodel_code_generator\parser\base.py", line 110, in sort_data_models
return sort_data_models(
[Previous line repeated 97 more times]
File "c:\users\sonali.ingale\appdata\local\programs\python\python39\lib\site-packages\datamodel_code_generator\parser\base.py", line 158, in sort_data_models
raise Exception(f'A Parser can not resolve classes: {unresolved_classes}.')
Exception: A Parser can not resolve classes: [class: Person references: {'Dog', 'Cat'}]
Currently my $ref json pointer is pointing to "#/definitions/Pets/Cat". If I do not encapsulate the "Cat" and "Dog" in "Pets" and use the json pointer as "#/definitions/Cat" it works. But I need that encapsulation as the original schema is very large and complex. It will be great if someone can help. Thanks.
.