Pydantic v2 (#235)
* Fixes examples when using Pydantic V2 Signed-off-by: Fabio Batista <fabio@atelie.dev.br> * When type checking, uses the latest (V2) version of Pydantic Signed-off-by: Fabio Batista <fabio@atelie.dev.br> --------- Signed-off-by: Fabio Batista <fabio@atelie.dev.br> Co-authored-by: Yurii Serhiichuk <xSAVIKx@users.noreply.github.com>
This commit is contained in:
parent
eedc61e9b0
commit
11520e35e1
|
@ -24,4 +24,4 @@ repos:
|
||||||
types: [ python ]
|
types: [ python ]
|
||||||
args: [ ]
|
args: [ ]
|
||||||
additional_dependencies:
|
additional_dependencies:
|
||||||
- "pydantic"
|
- "pydantic~=2.7"
|
||||||
|
|
|
@ -12,22 +12,31 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from cloudevents.exceptions import PydanticFeatureNotInstalled
|
from cloudevents.exceptions import PydanticFeatureNotInstalled
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from pydantic import VERSION as PYDANTIC_VERSION
|
if TYPE_CHECKING:
|
||||||
|
from cloudevents.pydantic.v2 import CloudEvent, from_dict, from_http, from_json
|
||||||
pydantic_major_version = PYDANTIC_VERSION.split(".")[0]
|
|
||||||
if pydantic_major_version == "1":
|
|
||||||
from cloudevents.pydantic.v1 import CloudEvent, from_dict, from_http, from_json
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
from cloudevents.pydantic.v2 import ( # type: ignore
|
from pydantic import VERSION as PYDANTIC_VERSION
|
||||||
CloudEvent,
|
|
||||||
from_dict,
|
pydantic_major_version = PYDANTIC_VERSION.split(".")[0]
|
||||||
from_http,
|
if pydantic_major_version == "1":
|
||||||
from_json,
|
from cloudevents.pydantic.v1 import (
|
||||||
)
|
CloudEvent,
|
||||||
|
from_dict,
|
||||||
|
from_http,
|
||||||
|
from_json,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
from cloudevents.pydantic.v2 import (
|
||||||
|
CloudEvent,
|
||||||
|
from_dict,
|
||||||
|
from_http,
|
||||||
|
from_json,
|
||||||
|
)
|
||||||
|
|
||||||
except ImportError: # pragma: no cover # hard to test
|
except ImportError: # pragma: no cover # hard to test
|
||||||
raise PydanticFeatureNotInstalled(
|
raise PydanticFeatureNotInstalled(
|
||||||
|
|
|
@ -51,53 +51,53 @@ class CloudEvent(abstract.CloudEvent, BaseModel): # type: ignore
|
||||||
data: typing.Optional[typing.Any] = Field(
|
data: typing.Optional[typing.Any] = Field(
|
||||||
title=FIELD_DESCRIPTIONS["data"].get("title"),
|
title=FIELD_DESCRIPTIONS["data"].get("title"),
|
||||||
description=FIELD_DESCRIPTIONS["data"].get("description"),
|
description=FIELD_DESCRIPTIONS["data"].get("description"),
|
||||||
example=FIELD_DESCRIPTIONS["data"].get("example"),
|
examples=[FIELD_DESCRIPTIONS["data"].get("example")],
|
||||||
default=None,
|
default=None,
|
||||||
)
|
)
|
||||||
source: str = Field(
|
source: str = Field(
|
||||||
title=FIELD_DESCRIPTIONS["source"].get("title"),
|
title=FIELD_DESCRIPTIONS["source"].get("title"),
|
||||||
description=FIELD_DESCRIPTIONS["source"].get("description"),
|
description=FIELD_DESCRIPTIONS["source"].get("description"),
|
||||||
example=FIELD_DESCRIPTIONS["source"].get("example"),
|
examples=[FIELD_DESCRIPTIONS["source"].get("example")],
|
||||||
)
|
)
|
||||||
id: str = Field(
|
id: str = Field(
|
||||||
title=FIELD_DESCRIPTIONS["id"].get("title"),
|
title=FIELD_DESCRIPTIONS["id"].get("title"),
|
||||||
description=FIELD_DESCRIPTIONS["id"].get("description"),
|
description=FIELD_DESCRIPTIONS["id"].get("description"),
|
||||||
example=FIELD_DESCRIPTIONS["id"].get("example"),
|
examples=[FIELD_DESCRIPTIONS["id"].get("example")],
|
||||||
default_factory=attribute.default_id_selection_algorithm,
|
default_factory=attribute.default_id_selection_algorithm,
|
||||||
)
|
)
|
||||||
type: str = Field(
|
type: str = Field(
|
||||||
title=FIELD_DESCRIPTIONS["type"].get("title"),
|
title=FIELD_DESCRIPTIONS["type"].get("title"),
|
||||||
description=FIELD_DESCRIPTIONS["type"].get("description"),
|
description=FIELD_DESCRIPTIONS["type"].get("description"),
|
||||||
example=FIELD_DESCRIPTIONS["type"].get("example"),
|
examples=[FIELD_DESCRIPTIONS["type"].get("example")],
|
||||||
)
|
)
|
||||||
specversion: attribute.SpecVersion = Field(
|
specversion: attribute.SpecVersion = Field(
|
||||||
title=FIELD_DESCRIPTIONS["specversion"].get("title"),
|
title=FIELD_DESCRIPTIONS["specversion"].get("title"),
|
||||||
description=FIELD_DESCRIPTIONS["specversion"].get("description"),
|
description=FIELD_DESCRIPTIONS["specversion"].get("description"),
|
||||||
example=FIELD_DESCRIPTIONS["specversion"].get("example"),
|
examples=[FIELD_DESCRIPTIONS["specversion"].get("example")],
|
||||||
default=attribute.DEFAULT_SPECVERSION,
|
default=attribute.DEFAULT_SPECVERSION,
|
||||||
)
|
)
|
||||||
time: typing.Optional[datetime.datetime] = Field(
|
time: typing.Optional[datetime.datetime] = Field(
|
||||||
title=FIELD_DESCRIPTIONS["time"].get("title"),
|
title=FIELD_DESCRIPTIONS["time"].get("title"),
|
||||||
description=FIELD_DESCRIPTIONS["time"].get("description"),
|
description=FIELD_DESCRIPTIONS["time"].get("description"),
|
||||||
example=FIELD_DESCRIPTIONS["time"].get("example"),
|
examples=[FIELD_DESCRIPTIONS["time"].get("example")],
|
||||||
default_factory=attribute.default_time_selection_algorithm,
|
default_factory=attribute.default_time_selection_algorithm,
|
||||||
)
|
)
|
||||||
subject: typing.Optional[str] = Field(
|
subject: typing.Optional[str] = Field(
|
||||||
title=FIELD_DESCRIPTIONS["subject"].get("title"),
|
title=FIELD_DESCRIPTIONS["subject"].get("title"),
|
||||||
description=FIELD_DESCRIPTIONS["subject"].get("description"),
|
description=FIELD_DESCRIPTIONS["subject"].get("description"),
|
||||||
example=FIELD_DESCRIPTIONS["subject"].get("example"),
|
examples=[FIELD_DESCRIPTIONS["subject"].get("example")],
|
||||||
default=None,
|
default=None,
|
||||||
)
|
)
|
||||||
datacontenttype: typing.Optional[str] = Field(
|
datacontenttype: typing.Optional[str] = Field(
|
||||||
title=FIELD_DESCRIPTIONS["datacontenttype"].get("title"),
|
title=FIELD_DESCRIPTIONS["datacontenttype"].get("title"),
|
||||||
description=FIELD_DESCRIPTIONS["datacontenttype"].get("description"),
|
description=FIELD_DESCRIPTIONS["datacontenttype"].get("description"),
|
||||||
example=FIELD_DESCRIPTIONS["datacontenttype"].get("example"),
|
examples=[FIELD_DESCRIPTIONS["datacontenttype"].get("example")],
|
||||||
default=None,
|
default=None,
|
||||||
)
|
)
|
||||||
dataschema: typing.Optional[str] = Field(
|
dataschema: typing.Optional[str] = Field(
|
||||||
title=FIELD_DESCRIPTIONS["dataschema"].get("title"),
|
title=FIELD_DESCRIPTIONS["dataschema"].get("title"),
|
||||||
description=FIELD_DESCRIPTIONS["dataschema"].get("description"),
|
description=FIELD_DESCRIPTIONS["dataschema"].get("description"),
|
||||||
example=FIELD_DESCRIPTIONS["dataschema"].get("example"),
|
examples=[FIELD_DESCRIPTIONS["dataschema"].get("example")],
|
||||||
default=None,
|
default=None,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue