Feature: 兼容 Pydantic v2 (#2544)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
Ju4tCode
2024-01-26 11:12:57 +08:00
committed by GitHub
parent 82e4ccb227
commit bbd13c04cc
36 changed files with 6535 additions and 414 deletions

View File

@ -1,8 +1,9 @@
import pytest
from pydantic import ValidationError, parse_obj_as
from pydantic import ValidationError
from nonebot.adapters import Message
from nonebot.compat import type_validate_python
from utils import FakeMessage, FakeMessageSegment
from nonebot.adapters import Message, MessageSegment
def test_segment_data():
@ -47,16 +48,21 @@ def test_segment_add():
def test_segment_validate():
assert parse_obj_as(
assert type_validate_python(
FakeMessageSegment,
{"type": "text", "data": {"text": "text"}, "extra": "should be ignored"},
) == FakeMessageSegment.text("text")
with pytest.raises(ValidationError):
type_validate_python(
type("FakeMessageSegment2", (MessageSegment,), {}),
FakeMessageSegment.text("text"),
)
with pytest.raises(ValidationError):
parse_obj_as(FakeMessageSegment, "some str")
type_validate_python(FakeMessageSegment, "some str")
with pytest.raises(ValidationError):
parse_obj_as(FakeMessageSegment, {"data": {}})
type_validate_python(FakeMessageSegment, {"data": {}})
def test_segment_join():
@ -144,26 +150,26 @@ def test_message_getitem():
def test_message_validate():
assert parse_obj_as(FakeMessage, FakeMessage([])) == FakeMessage([])
assert type_validate_python(FakeMessage, FakeMessage([])) == FakeMessage([])
with pytest.raises(ValidationError):
parse_obj_as(type("FakeMessage2", (Message,), {}), FakeMessage([]))
type_validate_python(type("FakeMessage2", (Message,), {}), FakeMessage([]))
assert parse_obj_as(FakeMessage, "text") == FakeMessage(
assert type_validate_python(FakeMessage, "text") == FakeMessage(
[FakeMessageSegment.text("text")]
)
assert parse_obj_as(
assert type_validate_python(
FakeMessage, {"type": "text", "data": {"text": "text"}}
) == FakeMessage([FakeMessageSegment.text("text")])
assert parse_obj_as(
assert type_validate_python(
FakeMessage,
[FakeMessageSegment.text("text"), {"type": "text", "data": {"text": "text"}}],
) == FakeMessage([FakeMessageSegment.text("text"), FakeMessageSegment.text("text")])
with pytest.raises(ValidationError):
parse_obj_as(FakeMessage, object())
type_validate_python(FakeMessage, object())
def test_message_contains():