Coverage for src/cstlcore/models/password_reset_tokens.py: 95%

21 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2026-02-19 12:46 +0000

1import uuid 

2from datetime import datetime 

3from typing import TYPE_CHECKING 

4 

5from sqlmodel import TIMESTAMP, Column, Field, SQLModel, text 

6 

7if TYPE_CHECKING: 

8 pass 

9 

10 

11class PasswordResetTokenBase(SQLModel): 

12 token: str = Field(index=True, nullable=False, unique=True) 

13 user_id: uuid.UUID = Field(foreign_key="user.id", nullable=False) 

14 used_at: datetime | None = Field(default=None, nullable=True) 

15 expires_at: datetime = Field(nullable=False) 

16 

17 

18class PasswordResetToken(PasswordResetTokenBase, table=True): 

19 id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) 

20 created_at: datetime | None = Field( 

21 default=None, 

22 sa_column=Column( 

23 TIMESTAMP(timezone=True), 

24 nullable=False, 

25 server_default=text("CURRENT_TIMESTAMP"), 

26 ), 

27 ) 

28 

29 

30class PasswordResetTokenPublic(PasswordResetTokenBase): 

31 id: uuid.UUID 

32 created_at: datetime 

33 

34 

35class PasswordResetTokenCreate(SQLModel): 

36 token: str 

37 user_id: uuid.UUID 

38 expires_at: datetime