Skip to content

Commit f4b1c43

Browse files
authored
Update the serializer of httpurl type (#879)
* Update the serializer of httpurl type * Fix lint
1 parent 0225493 commit f4b1c43

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

backend/app/admin/crud/crud_user.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ async def add_by_oauth2(self, db: AsyncSession, obj: AddOAuth2UserParam) -> None
8787
:param obj: 注册用户参数
8888
:return:
8989
"""
90-
obj.avatar = str(obj.avatar) # noqa: fix pgsql compatibility
9190
dict_obj = obj.model_dump()
9291
dict_obj.update({'is_staff': True, 'salt': None})
9392
new_user = self.model(**dict_obj)
@@ -110,7 +109,6 @@ async def update(self, db: AsyncSession, input_user: User, obj: UpdateUserParam)
110109
role_ids = obj.roles
111110
del obj.roles
112111

113-
obj.avatar = str(obj.avatar) # noqa: fix pgsql compatibility
114112
count = await self.update_model(db, input_user.id, obj)
115113

116114
stmt = select(Role).where(Role.id.in_(role_ids))

backend/app/admin/schema/user.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
from datetime import datetime
2-
from typing import Any
2+
from typing import Annotated, Any
33

4-
from pydantic import ConfigDict, Field, HttpUrl, model_validator
4+
from pydantic import ConfigDict, Field, HttpUrl, PlainSerializer, model_validator
55
from typing_extensions import Self
66

77
from backend.app.admin.schema.dept import GetDeptDetail
88
from backend.app.admin.schema.role import GetRoleWithRelationDetail
99
from backend.common.enums import StatusType
10-
from backend.common.schema import CustomEmailStr, CustomPhoneNumber, SchemaBase
10+
from backend.common.schema import CustomEmailStr, CustomPhoneNumber, SchemaBase, ser_string
1111

1212

1313
class AuthSchemaBase(SchemaBase):
@@ -40,7 +40,7 @@ class AddOAuth2UserParam(AuthSchemaBase):
4040
password: str | None = Field(None, description='密码')
4141
nickname: str | None = Field(None, description='昵称')
4242
email: CustomEmailStr | None = Field(None, description='邮箱')
43-
avatar: HttpUrl | None = Field(None, description='头像地址')
43+
avatar: Annotated[HttpUrl, PlainSerializer(ser_string)] | None = Field(None, description='头像地址')
4444

4545

4646
class ResetPasswordParam(SchemaBase):
@@ -57,7 +57,7 @@ class UserInfoSchemaBase(SchemaBase):
5757
dept_id: int | None = Field(None, description='部门 ID')
5858
username: str = Field(description='用户名')
5959
nickname: str = Field(description='昵称')
60-
avatar: HttpUrl | None = Field(None, description='头像地址')
60+
avatar: Annotated[HttpUrl, PlainSerializer(ser_string)] | None = Field(None, description='头像地址')
6161
email: CustomEmailStr | None = Field(None, description='邮箱')
6262
phone: CustomPhoneNumber | None = Field(None, description='手机号')
6363

backend/common/schema.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from datetime import datetime
2-
from typing import Annotated
2+
from typing import Annotated, Any
33

44
from pydantic import BaseModel, ConfigDict, EmailStr, Field, validate_email
55

@@ -27,3 +27,9 @@ class SchemaBase(BaseModel):
2727
else timezone.to_str(x),
2828
},
2929
)
30+
31+
32+
def ser_string(value: Any) -> str | None:
33+
if value:
34+
return str(value)
35+
return value

0 commit comments

Comments
 (0)