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

1from typing import TYPE_CHECKING 

2from uuid import UUID 

3 

4from authlib.integrations.sqla_oauth2 import OAuth2ClientMixin 

5from sqlalchemy import ForeignKey, String, UniqueConstraint, Uuid 

6from sqlalchemy.orm import Mapped, declared_attr, mapped_column, relationship 

7 

8from polar.kit.db.models import RateLimitGroupMixin, RecordModel 

9from polar.oauth2.sub_type import SubType 

10 

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 

13 

14 

15class OAuth2Client(RateLimitGroupMixin, RecordModel, OAuth2ClientMixin): 

16 __tablename__ = "oauth2_clients" 

17 __table_args__ = (UniqueConstraint("client_id"),) 

18 

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 ) 

24 

25 user_id: Mapped[UUID | None] = mapped_column( 

26 Uuid, ForeignKey("users.id"), nullable=True, index=True 

27 ) 

28 

29 @declared_attr 

30 def user(cls) -> "Mapped[User | None]": 

31 return relationship("User", lazy="raise") 

32 

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