Comments (11)
@danielxpander Sadly, no. I was afraid that something had happened to @koxudaxi but there seem to be activity in the repository by him, @bpsoos and @natikgadzhi.
from datamodel-code-generator.
There might be other issues than the patternProperties.
from datamodel-code-generator.
The generator also fails to generate datamodels for the OpenAPI 3.1 JSON Schema.
Steps to reproduce:
#1 clone to get official JSON Schemas for OpenAPI Specification
git clone https://github.com/OAI/OpenAPI-Specification
#2 check that the JSON Schema is valid
check-jsonschema --verbose --schemafile "https://json-schema.org/draft/2020-12/schema" OpenAPI-Specification/schemas/v3.1/schema.json
ok -- validation done
The following files were checked:
OpenAPI-Specification/schemas/v3.1/schema.json
#3 run datamodel-codegen (fails)
datamodel-codegen --input-file-type jsonschema --input OpenAPI-Specification/schemas/v3.1/schema.json --output model.py
Error:
File "/home/u30576/.local/lib/python3.10/site-packages/pydantic/main.py", line 509, in model_validate
return cls.__pydantic_validator__.validate_python(
pydantic_core._pydantic_core.ValidationError: 1 validation error for JsonSchemaObject
patternProperties.^x-
Input should be a valid dictionary or instance of JsonSchemaObject [type=model_type, input_value=True, input_type=bool]
For further information visit https://errors.pydantic.dev/2.6/v/model_type
from datamodel-code-generator.
@koxudaxi With the risk of disturbing you, is there any other information needed?
If not, would you be able to confirm that this is a known issue or am I doing something wrong?
If it is a known issue, is this likely to be featured? How much work is it? Is it a good first issue
?
from datamodel-code-generator.
@koxudaxi This is a blocker for us. Is there anything we can do make this move forward?
from datamodel-code-generator.
Sorry for the late reply.
I ran it with the repositories and commands you presented and generated the code.
I don't think pydantic is currently capable of handling multiple patternProperties. Specifically, I think it is limited to determining if it matches a single regex, as in this example.
What is the model of Pydantic you are envisioning?
https://github.com/koxudaxi/datamodel-code-generator/blob/b3fbbcade9814d4080098ae61ba69e6f8dd018f5/tests/data/expected/main/main_ jsonschema_pattern_properties_by_reference/output.py#L20
from datamodel-code-generator.
I'm not sure. Will have to get back to you on that. Preferably, something that works and makes sense :)
Is this issue related to: #715
from datamodel-code-generator.
@koxudaxi It could be that I'm not answering your actual question below (please advise if so).
Just so that we understand this the same. There are two challenges here:
- the actual regexp (pydantic seems to be a lot more restrictive)
- multiple patternProperties as seen in the schema for reqstool
1 Actual regexp
It seems as the regexp "^[a-z]{1}[0-9]{1}$" in your link to TextResponse is quite restrictive which is understandable if it is to be easy to create a valid python class name from the regexp. However, the patternProperty can look quite different as we've seen in our schema for reqstool, but more importantly, for well-adopted standards such as OpenAPI.
For OpenAPI 3.1 there seems to be a bit of a various with the patternProperties, e.g.:
-
"^x-" is due to "x-" being for extra properties in OpenAPI and I think that it's here that the pydantic validation fails.
2 multiple patternProperties
I think that given the initial example with requirement_annotations and patternProperties keys"^implementations" and "^tests" pydantic should create a class requirement_annotations with two objects as instance variables. I'm not sure how pydantic normally goes about naming of those two classes, but it seems as the keys for the two patternProperties can be be used as is (with disregard of the ^).
from datamodel-code-generator.
@koxudaxi Is the information above enough to be able to move forward?
from datamodel-code-generator.
@koxudaxi Anything we can do to help move this forward?
from datamodel-code-generator.
Is there any update on this? :')
from datamodel-code-generator.
Related Issues (20)
- Add `model_config = ConfigDict(use_attribute_docstrings=True)` when the command option `--use-field-description` is used HOT 1
- circular jsonschema with parent produces invalid pydantic model file
- Relative paths in url '$ref's are added to local file path instead of the url.
- pyproject.toml detection fails in subdirectories when the file has no `[tool.black]` section since black 24.2
- Valid JSON Schema results in error due to `additionalProperties` set to `false`
- Prefix child model names with name of parent to avoid name collision
- Support `webhooks` in `--openapi-scope`
- The following constraints cannot be applied to list[str]: 'pattern'
- AttributeError: 'NoneType' object has no attribute 'is_list'
- `required` fields declared in an `allof` are missing in the generated code
- Option `capitalize-enum-members` in `pyproject.toml` is ignored
- Too short timeout for fetching schema
- in python could we sometimes use `default_factory` instead of `default`? HOT 1
- Failure due to attempted writing to a directory for certain jsonschema
- output-model-type='msgspec.Struct' doesn't respect `format: date-time`
- `SyntaxError: from __future__ imports must occur at the beginning of the file` when custom header is used
- `FileNotFoundError` for `schemas/common-core/link.yaml`
- Using `const` inside `anyOf` combined with `minimum` and `maximum` not working
- allOf with a single $ref with a local json-pointer is resolved in the importing schema
- Type annotation falls back to Any if property schema is partially overwridden
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from datamodel-code-generator.