Coverage for polar/enums.py: 59%

57 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 12:42 +0000

1from datetime import datetime 

2from enum import StrEnum 

3from typing import Literal 

4 

5from dateutil.relativedelta import relativedelta 

6 

7 

8class Platforms(StrEnum): 

9 github = "github" 

10 

11 

12class PaymentProcessor(StrEnum): 

13 stripe = "stripe" 

14 

15 

16class AccountType(StrEnum): 

17 stripe = "stripe" 

18 manual = "manual" 

19 open_collective = "open_collective" 

20 

21 def get_display_name(self) -> str: 

22 return { 

23 AccountType.stripe: "Stripe Connect Express", 

24 AccountType.open_collective: "Open Collective", 

25 AccountType.manual: "Manual", 

26 }[self] 

27 

28 

29class SubscriptionRecurringInterval(StrEnum): 

30 day = "day" 

31 week = "week" 

32 month = "month" 

33 year = "year" 

34 

35 def as_literal(self) -> Literal["day", "week", "month", "year"]: 

36 return self.value 

37 

38 def get_next_period(self, d: datetime, leap: int = 1) -> datetime: 

39 match self: 

40 case SubscriptionRecurringInterval.day: 

41 return d + relativedelta(days=leap) 

42 case SubscriptionRecurringInterval.week: 

43 return d + relativedelta(weeks=leap) 

44 case SubscriptionRecurringInterval.month: 

45 return d + relativedelta(months=leap) 

46 case SubscriptionRecurringInterval.year: 

47 return d + relativedelta(years=leap) 

48 

49 

50class SubscriptionProrationBehavior(StrEnum): 

51 invoice = "invoice" # Invoice immediately 

52 prorate = "prorate" # Add prorations to next invoice 

53 

54 def to_stripe(self) -> Literal["always_invoice", "create_prorations"]: 

55 if self == SubscriptionProrationBehavior.invoice: 

56 return "always_invoice" 

57 if self == SubscriptionProrationBehavior.prorate: 

58 return "create_prorations" 

59 raise ValueError(f"Invalid proration behavior: {self}") 

60 

61 

62class InvoiceNumbering(StrEnum): 

63 organization = "organization" 

64 customer = "customer" 

65 

66 

67class TokenType(StrEnum): 

68 client_secret = "polar_client_secret" 

69 client_registration_token = "polar_client_registration_token" 

70 authorization_code = "polar_authorization_code" 

71 access_token = "polar_access_token" 

72 refresh_token = "polar_refresh_token" 

73 personal_access_token = "polar_personal_access_token" 

74 organization_access_token = "polar_organization_access_token" 

75 customer_session_token = "polar_customer_session_token" 

76 user_session_token = "polar_user_session_token" 

77 

78 

79class RateLimitGroup(StrEnum): 

80 web = "web" 

81 default = "default" 

82 elevated = "elevated"