Coverage for polar/models/personal_access_token.py: 100%
21 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 17:15 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 17:15 +0000
1from datetime import datetime 1ab
2from uuid import UUID 1ab
4from sqlalchemy import CHAR, TIMESTAMP, ForeignKey, String, Text, Uuid 1ab
5from sqlalchemy.orm import Mapped, declared_attr, mapped_column, relationship 1ab
7from polar.auth.scope import Scope, scope_to_set 1ab
8from polar.kit.db.models.base import RecordModel 1ab
9from polar.models.user import User 1ab
12class PersonalAccessToken(RecordModel): 1ab
13 __tablename__ = "personal_access_tokens" 1ab
15 token: Mapped[str] = mapped_column(CHAR(64), unique=True, nullable=False) 1ab
16 scope: Mapped[str] = mapped_column(Text, nullable=False) 1ab
17 expires_at: Mapped[datetime | None] = mapped_column( 1ab
18 TIMESTAMP(timezone=True), nullable=True, index=True
19 )
20 comment: Mapped[str] = mapped_column(String, nullable=False) 1ab
21 last_used_at: Mapped[datetime | None] = mapped_column( 1ab
22 TIMESTAMP(timezone=True), nullable=True, default=None
23 )
25 user_id: Mapped[UUID] = mapped_column(Uuid, ForeignKey("users.id"), nullable=False) 1ab
27 @declared_attr 1ab
28 def user(cls) -> Mapped[User]: 1ab
29 return relationship(User, lazy="raise") 1ab
31 @property 1ab
32 def scopes(self) -> set[Scope]: 1ab
33 return scope_to_set(self.scope) 1c