Exception: A Parser can not resolve classes when using `$ref` if references are nested
See original GitHub issueDescribe the bug
Parser can not resolve classes when using $ref
if the path is nested even though the reference is a valid json pointer.
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'}]
To Reproduce
Example 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": [
"pet_type",
"hunts",
"age"
],
"properties": {
"pet_type": {
"enum": [
"Cat"
]
},
"hunts": {
"type": "boolean"
},
"age": {
"type": "string"
}
}
},
"Dog": {
"title": "Dog",
"type": "object",
"required": [
"pet_type",
"bark",
"breed"
],
"properties": {
"pet_type": {
"enum": [
"Dog"
]
},
"bark": {
"type": "boolean"
},
"breed": {
"type": "string"
}
}
}
}
},
"additionalProperties": false
}
Used commandline:
$ datamodel-codegen --input pets.json --input-file-type=jsonschema --output pets.py
Expected behavior I was expecting following things which is working when I do not encapsulate “Cat” and “Dogs” inside “Pet”.
- Create the classes “Cat” and “Dog”
- Add “pet” attribute with Union of “Cat” and “Dog”
Version:
- windows
- Python version: 3.9.0
- datamodel-code-generator version:0.6.18
Additional context I tried to pull the code and run this example but I am getting the same error. I have few large schemas which are encapsulating references for readability. After editing the schema according to datamodel-code-generator, it works wonderfully 👍 . Thanks for this module.
Issue Analytics
- State:
- Created 3 years ago
- Comments:9 (5 by maintainers)
Top Results From Across the Web
Nested references not supported · Issue #12 · networknt/json ...
Yes. I saw what you mean. When loading schema, it tries to resolve the $ref and goes to dead loop. I don't have...
Read more >resolveFully doesn't resolve nested references or normal ...
Issue ==> I am using the resolveFully parse option as mentioned in the documentation but seems its not working for most of my...
Read more >Jackson Exceptions - Problems and Solutions - Baeldung
This exception is thrown if Jackson can't access the constructor. In the following example, class User doesn't have a default constructor:
Read more >Unrecognized field, not marked as ignorable - JSON Parsing ...
This error was occurring because my nested class Person was not static, which means it cannot be instantiated because of having any Outer...
Read more >7. Simple statements — Python 3.11.1 documentation
A simple statement is comprised within a single logical line. Several simple statements may occur on a single line separated by semicolons.
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
@koxudaxi I’ve just tested and it works correctly. Thank you) This library is awesome!)
@sonali686 I fixed it!! And I have released a new version as
0.6.22
.