Skip to content

feat: Upgrade internal Pydantic use to v2. Thanks @KristinnVikar! #779

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 17 commits into from
Aug 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions openapi_python_client/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ class Config(BaseModel):
"""

class_overrides: Dict[str, ClassOverride] = {}
project_name_override: Optional[str]
package_name_override: Optional[str]
package_version_override: Optional[str]
project_name_override: Optional[str] = None
package_name_override: Optional[str] = None
package_version_override: Optional[str] = None
use_path_prefixes_for_title_model_names: bool = True
post_hooks: List[str] = [
"autoflake -i -r --remove-all-unused-imports --remove-unused-variables --ignore-init-module-imports .",
Expand Down
2 changes: 1 addition & 1 deletion openapi_python_client/parser/openapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -559,7 +559,7 @@ class GeneratorData:
def from_dict(data: Dict[str, Any], *, config: Config) -> Union["GeneratorData", GeneratorError]:
"""Create an OpenAPI from dict"""
try:
openapi = oai.OpenAPI.parse_obj(data)
openapi = oai.OpenAPI.model_validate(data)
except ValidationError as err:
detail = str(err)
if "swagger" in data:
Expand Down
2 changes: 1 addition & 1 deletion openapi_python_client/parser/properties/model_property.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ def _get_additional_properties(
if isinstance(schema_additional, bool):
return schema_additional, schemas

if isinstance(schema_additional, oai.Schema) and not any(schema_additional.dict().values()):
if isinstance(schema_additional, oai.Schema) and not any(schema_additional.model_dump().values()):
# An empty schema
return True, schemas

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Dict, Optional, Union

from pydantic import BaseModel, Extra
from pydantic import BaseModel, ConfigDict

from .callback import Callback
from .example import Example
Expand All @@ -25,7 +25,7 @@ class Components(BaseModel):
- https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#componentsObject
"""

schemas: Optional[Dict[str, Union[Reference, Schema]]] = None
schemas: Optional[Dict[str, Union[Schema, Reference]]] = None
responses: Optional[Dict[str, Union[Response, Reference]]] = None
parameters: Optional[Dict[str, Union[Parameter, Reference]]] = None
examples: Optional[Dict[str, Union[Example, Reference]]] = None
Expand All @@ -34,10 +34,9 @@ class Components(BaseModel):
securitySchemes: Optional[Dict[str, Union[SecurityScheme, Reference]]] = None
links: Optional[Dict[str, Union[Link, Reference]]] = None
callbacks: Optional[Dict[str, Union[Callback, Reference]]] = None

class Config: # pylint: disable=missing-class-docstring
extra = Extra.allow
schema_extra = {
model_config = ConfigDict(
extra="allow",
json_schema_extra={
"examples": [
{
"schemas": {
Expand Down Expand Up @@ -98,4 +97,5 @@ class Config: # pylint: disable=missing-class-docstring
},
}
]
}
},
)
12 changes: 6 additions & 6 deletions openapi_python_client/schema/openapi_schema_pydantic/contact.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Optional

from pydantic import BaseModel, Extra
from pydantic import BaseModel, ConfigDict


class Contact(BaseModel):
Expand All @@ -14,11 +14,11 @@ class Contact(BaseModel):
name: Optional[str] = None
url: Optional[str] = None
email: Optional[str] = None

class Config: # pylint: disable=missing-class-docstring
extra = Extra.allow
schema_extra = {
model_config = ConfigDict(
extra="allow",
json_schema_extra={
"examples": [
{"name": "API Support", "url": "http://www.example.com/support", "email": "[email protected]"}
]
}
},
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Dict, Optional

from pydantic import BaseModel, Extra
from pydantic import BaseModel, ConfigDict


class Discriminator(BaseModel):
Expand All @@ -20,10 +20,9 @@ class Discriminator(BaseModel):

propertyName: str
mapping: Optional[Dict[str, str]] = None

class Config: # pylint: disable=missing-class-docstring
extra = Extra.allow
schema_extra = {
model_config = ConfigDict(
extra="allow",
json_schema_extra={
"examples": [
{
"propertyName": "petType",
Expand All @@ -33,4 +32,5 @@ class Config: # pylint: disable=missing-class-docstring
},
}
]
}
},
)
12 changes: 6 additions & 6 deletions openapi_python_client/schema/openapi_schema_pydantic/encoding.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import TYPE_CHECKING, Dict, Optional, Union

from pydantic import BaseModel, Extra
from pydantic import BaseModel, ConfigDict

from .reference import Reference

Expand All @@ -23,10 +23,9 @@ class Encoding(BaseModel):
style: Optional[str] = None
explode: bool = False
allowReserved: bool = False

class Config: # pylint: disable=missing-class-docstring
extra = Extra.allow
schema_extra = {
model_config = ConfigDict(
extra="allow",
json_schema_extra={
"examples": [
{
"contentType": "image/png, image/jpeg",
Expand All @@ -38,4 +37,5 @@ class Config: # pylint: disable=missing-class-docstring
},
}
]
}
},
)
12 changes: 6 additions & 6 deletions openapi_python_client/schema/openapi_schema_pydantic/example.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Any, Optional

from pydantic import BaseModel, Extra
from pydantic import BaseModel, ConfigDict


class Example(BaseModel):
Expand All @@ -15,10 +15,9 @@ class Example(BaseModel):
description: Optional[str] = None
value: Optional[Any] = None
externalValue: Optional[str] = None

class Config: # pylint: disable=missing-class-docstring
extra = Extra.allow
schema_extra = {
model_config = ConfigDict(
extra="allow",
json_schema_extra={
"examples": [
{"summary": "A foo example", "value": {"foo": "bar"}},
{
Expand All @@ -27,4 +26,5 @@ class Config: # pylint: disable=missing-class-docstring
},
{"summary": "This is a text example", "externalValue": "http://foo.bar/examples/address-example.txt"},
]
}
},
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Optional

from pydantic import BaseModel, Extra
from pydantic import BaseModel, ConfigDict


class ExternalDocumentation(BaseModel):
Expand All @@ -12,7 +12,7 @@ class ExternalDocumentation(BaseModel):

description: Optional[str] = None
url: str

class Config: # pylint: disable=missing-class-docstring
extra = Extra.allow
schema_extra = {"examples": [{"description": "Find more info here", "url": "https://example.com"}]}
model_config = ConfigDict(
extra="allow",
json_schema_extra={"examples": [{"description": "Find more info here", "url": "https://example.com"}]},
)
18 changes: 9 additions & 9 deletions openapi_python_client/schema/openapi_schema_pydantic/header.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from pydantic import Extra, Field
from pydantic import ConfigDict, Field

from ..parameter_location import ParameterLocation
from .parameter import Parameter
Expand All @@ -18,14 +18,14 @@ class Header(Parameter):
- https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#headerObject
"""

name = Field(default="", const=True)
param_in = Field(default=ParameterLocation.HEADER, const=True, alias="in")

class Config: # pylint: disable=missing-class-docstring
extra = Extra.allow
allow_population_by_field_name = True
schema_extra = {
name: str = Field(default="")
param_in: ParameterLocation = Field(default=ParameterLocation.HEADER, alias="in")
model_config = ConfigDict(
extra="allow",
populate_by_name=True,
json_schema_extra={
"examples": [
{"description": "The number of allowed requests in the current period", "schema": {"type": "integer"}}
]
}
},
)
12 changes: 6 additions & 6 deletions openapi_python_client/schema/openapi_schema_pydantic/info.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Optional

from pydantic import BaseModel, Extra
from pydantic import BaseModel, ConfigDict

from .contact import Contact
from .license import License
Expand All @@ -23,10 +23,9 @@ class Info(BaseModel):
contact: Optional[Contact] = None
license: Optional[License] = None
version: str

class Config: # pylint: disable=missing-class-docstring
extra = Extra.allow
schema_extra = {
model_config = ConfigDict(
extra="allow",
json_schema_extra={
"examples": [
{
"title": "Sample Pet Store App",
Expand All @@ -41,4 +40,5 @@ class Config: # pylint: disable=missing-class-docstring
"version": "1.0.1",
}
]
}
},
)
12 changes: 7 additions & 5 deletions openapi_python_client/schema/openapi_schema_pydantic/license.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Optional

from pydantic import BaseModel, Extra
from pydantic import BaseModel, ConfigDict


class License(BaseModel):
Expand All @@ -13,7 +13,9 @@ class License(BaseModel):

name: str
url: Optional[str] = None

class Config: # pylint: disable=missing-class-docstring
extra = Extra.allow
schema_extra = {"examples": [{"name": "Apache 2.0", "url": "https://www.apache.org/licenses/LICENSE-2.0.html"}]}
model_config = ConfigDict(
extra="allow",
json_schema_extra={
"examples": [{"name": "Apache 2.0", "url": "https://www.apache.org/licenses/LICENSE-2.0.html"}]
},
)
12 changes: 6 additions & 6 deletions openapi_python_client/schema/openapi_schema_pydantic/link.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Any, Dict, Optional

from pydantic import BaseModel, Extra
from pydantic import BaseModel, ConfigDict

from .server import Server

Expand Down Expand Up @@ -29,15 +29,15 @@ class Link(BaseModel):
requestBody: Optional[Any] = None
description: Optional[str] = None
server: Optional[Server] = None

class Config: # pylint: disable=missing-class-docstring
extra = Extra.allow
schema_extra = {
model_config = ConfigDict(
extra="allow",
json_schema_extra={
"examples": [
{"operationId": "getUserAddressByUUID", "parameters": {"userUuid": "$response.body#/uuid"}},
{
"operationRef": "#/paths/~12.0~1repositories~1{username}/get",
"parameters": {"username": "$response.body#/username"},
},
]
}
},
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Any, Dict, Optional, Union

from pydantic import BaseModel, Extra, Field
from pydantic import BaseModel, ConfigDict, Field

from .encoding import Encoding
from .example import Example
Expand All @@ -20,11 +20,10 @@ class MediaType(BaseModel):
example: Optional[Any] = None
examples: Optional[Dict[str, Union[Example, Reference]]] = None
encoding: Optional[Dict[str, Encoding]] = None

class Config: # pylint: disable=missing-class-docstring
extra = Extra.allow
allow_population_by_field_name = True
schema_extra = {
model_config = ConfigDict(
extra="allow",
populate_by_name=True,
json_schema_extra={
"examples": [
{
"schema": {"$ref": "#/components/schemas/Pet"},
Expand Down Expand Up @@ -52,4 +51,5 @@ class Config: # pylint: disable=missing-class-docstring
},
}
]
}
},
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Dict, Optional

from pydantic import BaseModel, Extra
from pydantic import BaseModel, ConfigDict


class OAuthFlow(BaseModel):
Expand All @@ -16,10 +16,9 @@ class OAuthFlow(BaseModel):
tokenUrl: Optional[str] = None
refreshUrl: Optional[str] = None
scopes: Dict[str, str]

class Config: # pylint: disable=missing-class-docstring
extra = Extra.allow
schema_extra = {
model_config = ConfigDict(
extra="allow",
json_schema_extra={
"examples": [
{
"authorizationUrl": "https://example.com/api/oauth/dialog",
Expand All @@ -31,4 +30,5 @@ class Config: # pylint: disable=missing-class-docstring
"scopes": {"write:pets": "modify pets in your account", "read:pets": "read your pets"},
},
]
}
},
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Optional

from pydantic import BaseModel, Extra
from pydantic import BaseModel, ConfigDict

from .oauth_flow import OAuthFlow

Expand All @@ -18,6 +18,4 @@ class OAuthFlows(BaseModel):
password: Optional[OAuthFlow] = None
clientCredentials: Optional[OAuthFlow] = None
authorizationCode: Optional[OAuthFlow] = None

class Config: # pylint: disable=missing-class-docstring
extra = Extra.allow
model_config = ConfigDict(extra="allow")
Loading