feat(core): Upgrade pydantic to 2.x (#1428)

This commit is contained in:
Fangyin Cheng
2024-04-20 09:41:16 +08:00
committed by GitHub
parent baa1e3f9f6
commit 57be1ece18
103 changed files with 1146 additions and 534 deletions

View File

@@ -3,6 +3,7 @@ from typing import Any, Dict, Generic, Iterator, List, Optional, TypeVar, Union
from sqlalchemy.orm.session import Session
from dbgpt._private.pydantic import model_to_dict
from dbgpt.util.pagination_utils import PaginationResult
from .db_manager import BaseQuery, DatabaseManager, db
@@ -165,7 +166,7 @@ class BaseDao(Generic[T, REQ, RES]):
entry = query.first()
if entry is None:
raise Exception("Invalid request")
for key, value in update_request.dict().items(): # type: ignore
for key, value in model_to_dict(update_request).items(): # type: ignore
if value is not None:
setattr(entry, key, value)
session.merge(entry)
@@ -272,7 +273,9 @@ class BaseDao(Generic[T, REQ, RES]):
model_cls = type(self.from_request(query_request))
query = session.query(model_cls)
query_dict = (
query_request if isinstance(query_request, dict) else query_request.dict()
query_request
if isinstance(query_request, dict)
else model_to_dict(query_request)
)
for key, value in query_dict.items():
if value is not None:

View File

@@ -4,7 +4,7 @@ import pytest
from sqlalchemy import Column, Integer, String
from dbgpt._private.pydantic import BaseModel as PydanticBaseModel
from dbgpt._private.pydantic import Field
from dbgpt._private.pydantic import Field, model_to_dict
from dbgpt.storage.metadata.db_manager import (
BaseModel,
DatabaseManager,
@@ -61,7 +61,7 @@ def user_dao(db, User):
class UserDao(BaseDao[User, UserRequest, UserResponse]):
def from_request(self, request: Union[UserRequest, Dict[str, Any]]) -> User:
if isinstance(request, UserRequest):
return User(**request.dict())
return User(**model_to_dict(request))
else:
return User(**request)
@@ -71,7 +71,7 @@ def user_dao(db, User):
)
def from_response(self, response: UserResponse) -> User:
return User(**response.dict())
return User(**model_to_dict(response))
def to_response(self, entity: User):
return UserResponse(id=entity.id, name=entity.name, age=entity.age)