Coverage for polar/models/oauth2_client.py: 93%
25 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 12:42 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 12:42 +0000
1from typing import TYPE_CHECKING
2from uuid import UUID
4from authlib.integrations.sqla_oauth2 import OAuth2ClientMixin
5from sqlalchemy import ForeignKey, String, UniqueConstraint, Uuid
6from sqlalchemy.orm import Mapped, declared_attr, mapped_column, relationship
8from polar.kit.db.models import RateLimitGroupMixin, RecordModel
9from polar.oauth2.sub_type import SubType
11if TYPE_CHECKING: 11 ↛ 12line 11 didn't jump to line 12 because the condition on line 11 was never true
12 from polar.models import User
15class OAuth2Client(RateLimitGroupMixin, RecordModel, OAuth2ClientMixin):
16 __tablename__ = "oauth2_clients"
17 __table_args__ = (UniqueConstraint("client_id"),)
19 client_id: Mapped[str] = mapped_column(String(52), nullable=False)
20 client_secret: Mapped[str] = mapped_column(String(52), nullable=False)
21 registration_access_token: Mapped[str] = mapped_column(
22 String, index=True, nullable=False
23 )
25 user_id: Mapped[UUID | None] = mapped_column(
26 Uuid, ForeignKey("users.id"), nullable=True, index=True
27 )
29 @declared_attr
30 def user(cls) -> "Mapped[User | None]":
31 return relationship("User", lazy="raise")
33 @property
34 def default_sub_type(self) -> SubType:
35 try:
36 return SubType(self.client_metadata["default_sub_type"])
37 except KeyError:
38 return SubType.organization