34 lines
845 B
Python
34 lines
845 B
Python
|
from typing import TYPE_CHECKING, Any, Union
|
||
|
|
||
|
from pydantic import BaseModel, Field
|
||
|
|
||
|
from openapi_pydantic.compat import PYDANTIC_V2
|
||
|
|
||
|
from .v3_0 import OpenAPI as OpenAPIv3_0
|
||
|
from .v3_1 import OpenAPI as OpenAPIv3_1
|
||
|
|
||
|
OpenAPIv3 = Union[OpenAPIv3_1, OpenAPIv3_0]
|
||
|
|
||
|
if TYPE_CHECKING:
|
||
|
|
||
|
def parse_obj(data: Any) -> OpenAPIv3:
|
||
|
"""Parse a raw object into an OpenAPI model with version inference."""
|
||
|
...
|
||
|
|
||
|
elif PYDANTIC_V2:
|
||
|
from pydantic import RootModel
|
||
|
|
||
|
class _OpenAPI(RootModel):
|
||
|
root: OpenAPIv3 = Field(discriminator="openapi")
|
||
|
|
||
|
def parse_obj(data: Any) -> OpenAPIv3:
|
||
|
return _OpenAPI.model_validate(data).root
|
||
|
|
||
|
else:
|
||
|
|
||
|
class _OpenAPI(BaseModel):
|
||
|
__root__: OpenAPIv3 = Field(discriminator="openapi")
|
||
|
|
||
|
def parse_obj(data: Any) -> OpenAPIv3:
|
||
|
return _OpenAPI.parse_obj(data).__root__
|