Coverage for polar/enums.py: 59%
57 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 datetime import datetime
2from enum import StrEnum
3from typing import Literal
5from dateutil.relativedelta import relativedelta
8class Platforms(StrEnum):
9 github = "github"
12class PaymentProcessor(StrEnum):
13 stripe = "stripe"
16class AccountType(StrEnum):
17 stripe = "stripe"
18 manual = "manual"
19 open_collective = "open_collective"
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]
29class SubscriptionRecurringInterval(StrEnum):
30 day = "day"
31 week = "week"
32 month = "month"
33 year = "year"
35 def as_literal(self) -> Literal["day", "week", "month", "year"]:
36 return self.value
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)
50class SubscriptionProrationBehavior(StrEnum):
51 invoice = "invoice" # Invoice immediately
52 prorate = "prorate" # Add prorations to next invoice
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}")
62class InvoiceNumbering(StrEnum):
63 organization = "organization"
64 customer = "customer"
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"
79class RateLimitGroup(StrEnum):
80 web = "web"
81 default = "default"
82 elevated = "elevated"