Coverage for polar/benefit/schemas.py: 100%
58 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 typing import Annotated 1a
3from pydantic import UUID4, Discriminator 1a
5from polar.benefit.strategies.custom.properties import BenefitGrantCustomProperties 1a
6from polar.benefit.strategies.discord.properties import BenefitGrantDiscordProperties 1a
7from polar.benefit.strategies.downloadables.properties import ( 1a
8 BenefitGrantDownloadablesProperties,
9)
10from polar.benefit.strategies.github_repository.properties import ( 1a
11 BenefitGrantGitHubRepositoryProperties,
12)
13from polar.benefit.strategies.license_keys.properties import ( 1a
14 BenefitGrantLicenseKeysProperties,
15)
16from polar.benefit.strategies.meter_credit.properties import ( 1a
17 BenefitGrantMeterCreditProperties,
18)
19from polar.customer.schemas.customer import Customer 1a
20from polar.kit.schemas import ( 1a
21 ClassName,
22 MergeJSONSchema,
23 SelectorWidget,
24 SetSchemaReference,
25)
26from polar.models.benefit import BenefitType 1a
28from .strategies import BenefitGrantProperties 1a
29from .strategies.base.schemas import BenefitGrantBase, BenefitPublicBase 1a
30from .strategies.custom.schemas import ( 1a
31 BenefitCustom,
32 BenefitCustomCreate,
33 BenefitCustomUpdate,
34)
35from .strategies.discord.schemas import ( 1a
36 BenefitDiscord,
37 BenefitDiscordCreate,
38 BenefitDiscordUpdate,
39)
40from .strategies.downloadables.schemas import ( 1a
41 BenefitDownloadables,
42 BenefitDownloadablesCreate,
43 BenefitDownloadablesUpdate,
44)
45from .strategies.github_repository.schemas import ( 1a
46 BenefitGitHubRepository,
47 BenefitGitHubRepositoryCreate,
48 BenefitGitHubRepositoryUpdate,
49)
50from .strategies.license_keys.schemas import ( 1a
51 BenefitLicenseKeys,
52 BenefitLicenseKeysCreate,
53 BenefitLicenseKeysUpdate,
54)
55from .strategies.meter_credit.schemas import ( 1a
56 BenefitMeterCredit,
57 BenefitMeterCreditCreate,
58 BenefitMeterCreditUpdate,
59)
61BENEFIT_DESCRIPTION_MIN_LENGTH = 3 1a
62BENEFIT_DESCRIPTION_MAX_LENGTH = 42 1a
64BenefitID = Annotated[ 1a
65 UUID4,
66 MergeJSONSchema({"description": "The benefit ID."}),
67 SelectorWidget("/v1/benefits", "Benefit", "description"),
68]
71BenefitCreate = Annotated[ 1a
72 BenefitCustomCreate
73 | BenefitDiscordCreate
74 | BenefitGitHubRepositoryCreate
75 | BenefitDownloadablesCreate
76 | BenefitLicenseKeysCreate
77 | BenefitMeterCreditCreate,
78 Discriminator("type"),
79 SetSchemaReference("BenefitCreate"),
80]
83BenefitUpdate = ( 1a
84 BenefitCustomUpdate
85 | BenefitDiscordUpdate
86 | BenefitGitHubRepositoryUpdate
87 | BenefitDownloadablesUpdate
88 | BenefitLicenseKeysUpdate
89 | BenefitMeterCreditUpdate
90)
93Benefit = Annotated[ 1a
94 BenefitCustom
95 | BenefitDiscord
96 | BenefitGitHubRepository
97 | BenefitDownloadables
98 | BenefitLicenseKeys
99 | BenefitMeterCredit,
100 SetSchemaReference("Benefit"),
101 MergeJSONSchema({"title": "Benefit"}),
102 ClassName("Benefit"),
103]
105benefit_schema_map: dict[BenefitType, type[Benefit]] = { 1a
106 BenefitType.discord: BenefitDiscord,
107 BenefitType.custom: BenefitCustom,
108 BenefitType.github_repository: BenefitGitHubRepository,
109 BenefitType.downloadables: BenefitDownloadables,
110 BenefitType.license_keys: BenefitLicenseKeys,
111 BenefitType.meter_credit: BenefitMeterCredit,
112}
115class BenefitGrant(BenefitGrantBase): 1a
116 customer: Customer 1a
117 benefit: "Benefit" 1a
118 properties: BenefitGrantProperties 1a
121class BenefitGrantWebhookBase(BenefitGrantBase): 1a
122 customer: Customer 1a
125class BenefitGrantDiscordWebhook(BenefitGrantWebhookBase): 1a
126 benefit: BenefitDiscord 1a
127 properties: BenefitGrantDiscordProperties 1a
128 previous_properties: BenefitGrantDiscordProperties | None = None 1a
131class BenefitGrantCustomWebhook(BenefitGrantWebhookBase): 1a
132 benefit: BenefitCustom 1a
133 properties: BenefitGrantCustomProperties 1a
134 previous_properties: BenefitGrantCustomProperties | None = None 1a
137class BenefitGrantGitHubRepositoryWebhook(BenefitGrantWebhookBase): 1a
138 benefit: BenefitGitHubRepository 1a
139 properties: BenefitGrantGitHubRepositoryProperties 1a
140 previous_properties: BenefitGrantGitHubRepositoryProperties | None = None 1a
143class BenefitGrantDownloadablesWebhook(BenefitGrantWebhookBase): 1a
144 benefit: BenefitDownloadables 1a
145 properties: BenefitGrantDownloadablesProperties 1a
146 previous_properties: BenefitGrantDownloadablesProperties | None = None 1a
149class BenefitGrantLicenseKeysWebhook(BenefitGrantWebhookBase): 1a
150 benefit: BenefitLicenseKeys 1a
151 properties: BenefitGrantLicenseKeysProperties 1a
152 previous_properties: BenefitGrantLicenseKeysProperties | None = None 1a
155class BenefitGrantMeterCreditWebhook(BenefitGrantWebhookBase): 1a
156 benefit: BenefitMeterCredit 1a
157 properties: BenefitGrantMeterCreditProperties 1a
158 previous_properties: BenefitGrantMeterCreditProperties | None = None 1a
161BenefitGrantWebhook = Annotated[ 1a
162 BenefitGrantDiscordWebhook
163 | BenefitGrantCustomWebhook
164 | BenefitGrantGitHubRepositoryWebhook
165 | BenefitGrantDownloadablesWebhook
166 | BenefitGrantLicenseKeysWebhook
167 | BenefitGrantMeterCreditWebhook,
168 SetSchemaReference("BenefitGrantWebhook"),
169 MergeJSONSchema({"title": "BenefitGrantWebhook"}),
170 ClassName("BenefitGrantWebhook"),
171]
174# Properties that are public (when embedding products benefits in storefront and checkout)
175class BenefitPublic(BenefitPublicBase): ... 1a