Skip to content

Commit f653b99

Browse files
committed
初步兼容pydantic v2
1 parent b36af95 commit f653b99

File tree

5 files changed

+35
-30
lines changed

5 files changed

+35
-30
lines changed

fastapi_user_auth/admin/actions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
from fastapi_amis_admin.amis.constants import LevelEnum
1010
from fastapi_amis_admin.crud.schema import BaseApiOut
1111
from fastapi_amis_admin.models import Field
12+
from fastapi_amis_admin.utils.pydantic import ModelField
1213
from pydantic import BaseModel
13-
from pydantic.fields import ModelField
1414
from starlette.requests import Request
1515
from starlette.responses import RedirectResponse
1616

fastapi_user_auth/auth/models.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
from typing import Optional
2+
13
from fastapi_amis_admin.amis.components import ColumnImage, InputImage
24
from fastapi_amis_admin.crud.parser import LabelField
3-
from fastapi_amis_admin.models.fields import Field
5+
from fastapi_amis_admin.models import Field
46
from fastapi_amis_admin.utils.translation import i18n as _
57
from sqlalchemy import ForeignKey, func, select
68

@@ -19,9 +21,9 @@
1921
class BaseUser(PkMixin, CUDTimeMixin, UsernameMixin, PasswordMixin, EmailMixin):
2022
__tablename__ = "auth_user"
2123
is_active: bool = Field(default=True, title=_("Is Active"))
22-
nickname: str = Field(None, title=_("Nickname"), max_length=40)
24+
nickname: str = Field("", title=_("Nickname"), max_length=40)
2325
avatar: str = Field(
24-
None,
26+
"",
2527
title=_("Avatar"),
2628
max_length=255,
2729
amis_form_item=InputImage(maxLength=1, maxSize=2 * 1024 * 1024),
@@ -63,10 +65,10 @@ class CasbinRule(PkMixin, table=True):
6365
ptype: str = Field(title="Policy Type")
6466
v0: str = Field(title="Subject")
6567
v1: str = Field(title="Object")
66-
v2: str = Field(None, title="Action")
67-
v3: str = Field(None, title="Group")
68-
v4: str = Field(None, title="Effect")
69-
v5: str = Field(None)
68+
v2: Optional[str] = Field(None, title="Action")
69+
v3: Optional[str] = Field(None, title="Group")
70+
v4: Optional[str] = Field(None, title="Effect")
71+
v5: Optional[str] = Field(None)
7072

7173
def __str__(self) -> str:
7274
arr = [self.ptype]

fastapi_user_auth/mixins/models.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,23 @@
11
from datetime import datetime
22
from typing import Optional
33

4-
from fastapi_amis_admin.models.fields import Field
4+
from fastapi_amis_admin.models import Field, SQLModel
55
from fastapi_amis_admin.utils.translation import i18n as _
66
from pydantic import EmailStr, SecretStr
77
from sqlalchemy import func
8-
9-
try:
10-
from sqlmodelx import SQLModel
11-
except ImportError:
12-
from sqlmodel import SQLModel
8+
from sqlmodel import AutoString
139

1410

1511
class PkMixin(SQLModel):
16-
id: int = Field(default=None, title="ID", primary_key=True, nullable=False)
12+
id: Optional[int] = Field(default=None, title="ID", primary_key=True, nullable=False)
1713

1814

1915
class CreateTimeMixin(SQLModel):
2016
create_time: datetime = Field(default_factory=datetime.now, title=_("Create Time"))
2117

2218

2319
class UpdateTimeMixin(SQLModel):
24-
update_time: Optional[datetime] = Field(
20+
update_time: datetime = Field(
2521
default_factory=datetime.now,
2622
title=_("Update Time"),
2723
sa_column_kwargs={"onupdate": func.now(), "server_default": func.now()},
@@ -42,17 +38,21 @@ class UsernameMixin(SQLModel):
4238
username: str = Field(title=_("Username"), max_length=32, unique=True, index=True, nullable=False)
4339

4440

45-
class PasswordStr(SecretStr, str):
46-
pass
41+
# class PasswordStr(SecretStr, str):
42+
# pass
4743

4844

4945
class PasswordMixin(SQLModel):
50-
password: PasswordStr = Field(title=_("Password"), max_length=128, nullable=False, amis_form_item="input-password")
46+
password: SecretStr = Field(
47+
title=_("Password"), sa_type=AutoString, max_length=128, nullable=False, amis_form_item="input-password"
48+
)
5149

5250

5351
class EmailMixin(SQLModel):
5452
"""If you need to define the email field as unique, you can achieve it by adding the following parameters in the subclass:
5553
__table_args__ = (UniqueConstraint("email", name="email"),)
5654
"""
5755

58-
email: EmailStr = Field(None, title=_("Email"), index=True, nullable=True, amis_form_item="input-email")
56+
email: Optional[EmailStr] = Field(
57+
None, title=_("Email"), sa_type=AutoString, index=True, nullable=True, amis_form_item="input-email"
58+
)

pyproject.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,11 @@ classifiers = [
3737
]
3838
dependencies = [
3939
"pydantic>=1.10.0,<2.0.0",
40-
"fastapi-amis-admin>=0.6.5,<0.7.0",
41-
"email-validator>=1.3.1,<2.0.0",
40+
"fastapi-amis-admin[sqlmodel]>=0.7.0,<0.8.0",
41+
"email-validator>=1.3.1,<3.0.0",
4242
"passlib>=1.7.4",
4343
"bcrypt>=4.0.0",
4444
"casbin>=1.29.0",
45-
"sqlmodelx>=0.0.5",
4645
]
4746

4847
[project.urls]

tests/test_auth/test_auth_user_model.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
from datetime import date
2+
from typing import Optional
23

34
import pytest
45
from fastapi import Depends
5-
from fastapi_amis_admin.models.fields import Field
6+
from fastapi_amis_admin.models import Field
67

7-
from fastapi_user_auth.auth.models import User
8+
from fastapi_user_auth.auth.models import BaseUser
89

910

1011
# 自定义`User`模型,继承`User`
11-
class MyUser(User, table=True):
12+
class MyUser(BaseUser, table=True):
1213
point: float = Field(default=0, title="积分", description="用户积分")
13-
phone: str = Field(None, title="手机号", max_length=15)
14-
parent_id: int = Field(None, title="上级", foreign_key="auth_user.id")
15-
birthday: date = Field(None, title="出生日期")
16-
location: str = Field(None, title="位置")
14+
phone: str = Field("", title="手机号", max_length=15)
15+
parent_id: Optional[int] = Field(None, title="上级", foreign_key="auth_user.id")
16+
birthday: Optional[date] = Field(None, title="出生日期")
17+
location: str = Field("", title="位置")
18+
19+
20+
print(123)
1721

1822

1923
@pytest.mark.parametrize("logins", ["admin"], indirect=True)

0 commit comments

Comments
 (0)