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

1from typing import Annotated 1a

2 

3from pydantic import UUID4, Discriminator 1a

4 

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

27 

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) 

60 

61BENEFIT_DESCRIPTION_MIN_LENGTH = 3 1a

62BENEFIT_DESCRIPTION_MAX_LENGTH = 42 1a

63 

64BenefitID = Annotated[ 1a

65 UUID4, 

66 MergeJSONSchema({"description": "The benefit ID."}), 

67 SelectorWidget("/v1/benefits", "Benefit", "description"), 

68] 

69 

70 

71BenefitCreate = Annotated[ 1a

72 BenefitCustomCreate 

73 | BenefitDiscordCreate 

74 | BenefitGitHubRepositoryCreate 

75 | BenefitDownloadablesCreate 

76 | BenefitLicenseKeysCreate 

77 | BenefitMeterCreditCreate, 

78 Discriminator("type"), 

79 SetSchemaReference("BenefitCreate"), 

80] 

81 

82 

83BenefitUpdate = ( 1a

84 BenefitCustomUpdate 

85 | BenefitDiscordUpdate 

86 | BenefitGitHubRepositoryUpdate 

87 | BenefitDownloadablesUpdate 

88 | BenefitLicenseKeysUpdate 

89 | BenefitMeterCreditUpdate 

90) 

91 

92 

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] 

104 

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} 

113 

114 

115class BenefitGrant(BenefitGrantBase): 1a

116 customer: Customer 1a

117 benefit: "Benefit" 1a

118 properties: BenefitGrantProperties 1a

119 

120 

121class BenefitGrantWebhookBase(BenefitGrantBase): 1a

122 customer: Customer 1a

123 

124 

125class BenefitGrantDiscordWebhook(BenefitGrantWebhookBase): 1a

126 benefit: BenefitDiscord 1a

127 properties: BenefitGrantDiscordProperties 1a

128 previous_properties: BenefitGrantDiscordProperties | None = None 1a

129 

130 

131class BenefitGrantCustomWebhook(BenefitGrantWebhookBase): 1a

132 benefit: BenefitCustom 1a

133 properties: BenefitGrantCustomProperties 1a

134 previous_properties: BenefitGrantCustomProperties | None = None 1a

135 

136 

137class BenefitGrantGitHubRepositoryWebhook(BenefitGrantWebhookBase): 1a

138 benefit: BenefitGitHubRepository 1a

139 properties: BenefitGrantGitHubRepositoryProperties 1a

140 previous_properties: BenefitGrantGitHubRepositoryProperties | None = None 1a

141 

142 

143class BenefitGrantDownloadablesWebhook(BenefitGrantWebhookBase): 1a

144 benefit: BenefitDownloadables 1a

145 properties: BenefitGrantDownloadablesProperties 1a

146 previous_properties: BenefitGrantDownloadablesProperties | None = None 1a

147 

148 

149class BenefitGrantLicenseKeysWebhook(BenefitGrantWebhookBase): 1a

150 benefit: BenefitLicenseKeys 1a

151 properties: BenefitGrantLicenseKeysProperties 1a

152 previous_properties: BenefitGrantLicenseKeysProperties | None = None 1a

153 

154 

155class BenefitGrantMeterCreditWebhook(BenefitGrantWebhookBase): 1a

156 benefit: BenefitMeterCredit 1a

157 properties: BenefitGrantMeterCreditProperties 1a

158 previous_properties: BenefitGrantMeterCreditProperties | None = None 1a

159 

160 

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] 

172 

173 

174# Properties that are public (when embedding products benefits in storefront and checkout) 

175class BenefitPublic(BenefitPublicBase): ... 1a