|
1 | 1 | import enum |
2 | | -from dataclasses import dataclass |
3 | | -from typing import List, Optional |
4 | 2 |
|
5 | 3 | from shared.django_apps.utils.config import RUN_ENV |
6 | 4 |
|
@@ -83,343 +81,5 @@ class TierName(enum.Enum): |
83 | 81 | TRIAL = "trial" |
84 | 82 |
|
85 | 83 |
|
86 | | -def convert_to_DTO(plan) -> dict: |
87 | | - return { |
88 | | - "marketing_name": plan.marketing_name, |
89 | | - "value": plan.name, |
90 | | - "billing_rate": plan.billing_rate, |
91 | | - "base_unit_price": plan.base_unit_price, |
92 | | - "benefits": plan.benefits, |
93 | | - "tier_name": plan.tier.tier_name, |
94 | | - "monthly_uploads_limit": plan.monthly_uploads_limit, |
95 | | - "is_free_plan": not plan.paid_plan, |
96 | | - "is_pro_plan": plan.tier.tier_name == TierName.PRO.value, |
97 | | - "is_team_plan": plan.tier.tier_name == TierName.TEAM.value, |
98 | | - "is_enterprise_plan": plan.tier.tier_name == TierName.ENTERPRISE.value, |
99 | | - "is_trial_plan": plan.tier.tier_name == TierName.TRIAL.value, |
100 | | - "is_sentry_plan": plan.tier.tier_name == TierName.SENTRY.value, |
101 | | - } |
102 | | - |
103 | | - |
104 | | -@dataclass(repr=False) |
105 | | -class PlanData: |
106 | | - """ |
107 | | - Dataclass that represents plan related information |
108 | | - """ |
109 | | - |
110 | | - marketing_name: PlanMarketingName |
111 | | - value: PlanName |
112 | | - billing_rate: Optional[PlanBillingRate] |
113 | | - base_unit_price: PlanPrice |
114 | | - benefits: List[str] |
115 | | - tier_name: TierName |
116 | | - monthly_uploads_limit: Optional[MonthlyUploadLimits] |
117 | | - trial_days: Optional[TrialDaysAmount] |
118 | | - |
119 | | - def convert_to_DTO(self) -> dict: |
120 | | - return { |
121 | | - "marketing_name": self.marketing_name, |
122 | | - "value": self.value, |
123 | | - "billing_rate": self.billing_rate, |
124 | | - "base_unit_price": self.base_unit_price, |
125 | | - "benefits": self.benefits, |
126 | | - "tier_name": self.tier_name, |
127 | | - "monthly_uploads_limit": self.monthly_uploads_limit, |
128 | | - "is_free_plan": self.tier_name == TierName.BASIC.value, |
129 | | - "is_pro_plan": self.tier_name == TierName.PRO.value, |
130 | | - "is_team_plan": self.tier_name == TierName.TEAM.value, |
131 | | - "is_enterprise_plan": self.tier_name == TierName.ENTERPRISE.value, |
132 | | - "is_trial_plan": self.value == PlanName.TRIAL_PLAN_NAME.value, |
133 | | - "is_sentry_plan": self.value in SENTRY_PAID_USER_PLAN_REPRESENTATIONS, |
134 | | - } |
135 | | - |
136 | | - |
137 | | -NON_PR_AUTHOR_PAID_USER_PLAN_REPRESENTATIONS = { |
138 | | - PlanName.CODECOV_PRO_MONTHLY_LEGACY.value: PlanData( |
139 | | - marketing_name=PlanMarketingName.CODECOV_PRO.value, |
140 | | - value=PlanName.CODECOV_PRO_MONTHLY_LEGACY.value, |
141 | | - billing_rate=PlanBillingRate.MONTHLY.value, |
142 | | - base_unit_price=PlanPrice.MONTHLY.value, |
143 | | - benefits=[ |
144 | | - "Configurable # of users", |
145 | | - "Unlimited public repositories", |
146 | | - "Unlimited private repositories", |
147 | | - "Priority Support", |
148 | | - ], |
149 | | - tier_name=TierName.PRO.value, |
150 | | - monthly_uploads_limit=None, |
151 | | - trial_days=None, |
152 | | - ), |
153 | | - PlanName.CODECOV_PRO_YEARLY_LEGACY.value: PlanData( |
154 | | - marketing_name=PlanMarketingName.CODECOV_PRO.value, |
155 | | - value=PlanName.CODECOV_PRO_YEARLY_LEGACY.value, |
156 | | - billing_rate=PlanBillingRate.YEARLY.value, |
157 | | - base_unit_price=PlanPrice.YEARLY.value, |
158 | | - benefits=[ |
159 | | - "Configurable # of users", |
160 | | - "Unlimited public repositories", |
161 | | - "Unlimited private repositories", |
162 | | - "Priority Support", |
163 | | - ], |
164 | | - tier_name=TierName.PRO.value, |
165 | | - monthly_uploads_limit=None, |
166 | | - trial_days=None, |
167 | | - ), |
168 | | -} |
169 | | - |
170 | | - |
171 | | -PR_AUTHOR_PAID_USER_PLAN_REPRESENTATIONS = { |
172 | | - PlanName.CODECOV_PRO_MONTHLY.value: PlanData( |
173 | | - marketing_name=PlanMarketingName.CODECOV_PRO.value, |
174 | | - value=PlanName.CODECOV_PRO_MONTHLY.value, |
175 | | - billing_rate=PlanBillingRate.MONTHLY.value, |
176 | | - base_unit_price=PlanPrice.MONTHLY.value, |
177 | | - benefits=[ |
178 | | - "Configurable # of users", |
179 | | - "Unlimited public repositories", |
180 | | - "Unlimited private repositories", |
181 | | - "Priority Support", |
182 | | - ], |
183 | | - tier_name=TierName.PRO.value, |
184 | | - monthly_uploads_limit=None, |
185 | | - trial_days=None, |
186 | | - ), |
187 | | - PlanName.CODECOV_PRO_YEARLY.value: PlanData( |
188 | | - marketing_name=PlanMarketingName.CODECOV_PRO.value, |
189 | | - value=PlanName.CODECOV_PRO_YEARLY.value, |
190 | | - billing_rate=PlanBillingRate.YEARLY.value, |
191 | | - base_unit_price=PlanPrice.YEARLY.value, |
192 | | - benefits=[ |
193 | | - "Configurable # of users", |
194 | | - "Unlimited public repositories", |
195 | | - "Unlimited private repositories", |
196 | | - "Priority Support", |
197 | | - ], |
198 | | - tier_name=TierName.PRO.value, |
199 | | - monthly_uploads_limit=None, |
200 | | - trial_days=None, |
201 | | - ), |
202 | | -} |
203 | | - |
204 | | -SENTRY_PAID_USER_PLAN_REPRESENTATIONS = { |
205 | | - PlanName.SENTRY_MONTHLY.value: PlanData( |
206 | | - marketing_name=PlanMarketingName.SENTRY_PRO.value, |
207 | | - value=PlanName.SENTRY_MONTHLY.value, |
208 | | - billing_rate=PlanBillingRate.MONTHLY.value, |
209 | | - base_unit_price=PlanPrice.MONTHLY.value, |
210 | | - benefits=[ |
211 | | - "Includes 5 seats", |
212 | | - "$12 per additional seat", |
213 | | - "Unlimited public repositories", |
214 | | - "Unlimited private repositories", |
215 | | - "Priority Support", |
216 | | - ], |
217 | | - tier_name=TierName.SENTRY.value, |
218 | | - trial_days=TrialDaysAmount.CODECOV_SENTRY.value, |
219 | | - monthly_uploads_limit=None, |
220 | | - ), |
221 | | - PlanName.SENTRY_YEARLY.value: PlanData( |
222 | | - marketing_name=PlanMarketingName.SENTRY_PRO.value, |
223 | | - value=PlanName.SENTRY_YEARLY.value, |
224 | | - billing_rate=PlanBillingRate.YEARLY.value, |
225 | | - base_unit_price=PlanPrice.YEARLY.value, |
226 | | - benefits=[ |
227 | | - "Includes 5 seats", |
228 | | - "$10 per additional seat", |
229 | | - "Unlimited public repositories", |
230 | | - "Unlimited private repositories", |
231 | | - "Priority Support", |
232 | | - ], |
233 | | - tier_name=TierName.SENTRY.value, |
234 | | - trial_days=TrialDaysAmount.CODECOV_SENTRY.value, |
235 | | - monthly_uploads_limit=None, |
236 | | - ), |
237 | | -} |
238 | | - |
239 | | -# TODO: Update these values |
240 | | -ENTERPRISE_CLOUD_USER_PLAN_REPRESENTATIONS = { |
241 | | - PlanName.ENTERPRISE_CLOUD_MONTHLY.value: PlanData( |
242 | | - marketing_name=PlanMarketingName.ENTERPRISE_CLOUD.value, |
243 | | - value=PlanName.ENTERPRISE_CLOUD_MONTHLY.value, |
244 | | - billing_rate=PlanBillingRate.MONTHLY.value, |
245 | | - base_unit_price=PlanPrice.MONTHLY.value, |
246 | | - benefits=[ |
247 | | - "Configurable # of users", |
248 | | - "Unlimited public repositories", |
249 | | - "Unlimited private repositories", |
250 | | - "Priority Support", |
251 | | - ], |
252 | | - tier_name=TierName.ENTERPRISE.value, |
253 | | - trial_days=None, |
254 | | - monthly_uploads_limit=None, |
255 | | - ), |
256 | | - PlanName.ENTERPRISE_CLOUD_YEARLY.value: PlanData( |
257 | | - marketing_name=PlanMarketingName.ENTERPRISE_CLOUD.value, |
258 | | - value=PlanName.ENTERPRISE_CLOUD_YEARLY.value, |
259 | | - billing_rate=PlanBillingRate.YEARLY.value, |
260 | | - base_unit_price=PlanPrice.YEARLY.value, |
261 | | - benefits=[ |
262 | | - "Configurable # of users", |
263 | | - "Unlimited public repositories", |
264 | | - "Unlimited private repositories", |
265 | | - "Priority Support", |
266 | | - ], |
267 | | - tier_name=TierName.ENTERPRISE.value, |
268 | | - trial_days=None, |
269 | | - monthly_uploads_limit=None, |
270 | | - ), |
271 | | -} |
272 | | - |
273 | | -GHM_PLAN_REPRESENTATION = { |
274 | | - PlanName.GHM_PLAN_NAME.value: PlanData( |
275 | | - marketing_name=PlanMarketingName.GITHUB_MARKETPLACE.value, |
276 | | - value=PlanName.GHM_PLAN_NAME.value, |
277 | | - billing_rate=None, |
278 | | - base_unit_price=PlanPrice.GHM_PRICE.value, |
279 | | - benefits=[ |
280 | | - "Configurable # of users", |
281 | | - "Unlimited public repositories", |
282 | | - "Unlimited private repositories", |
283 | | - ], |
284 | | - tier_name=TierName.PRO.value, |
285 | | - trial_days=None, |
286 | | - monthly_uploads_limit=None, |
287 | | - ) |
288 | | -} |
289 | | - |
290 | | -BASIC_PLAN = PlanData( |
291 | | - marketing_name=PlanMarketingName.BASIC.value, |
292 | | - value=PlanName.BASIC_PLAN_NAME.value, |
293 | | - billing_rate=None, |
294 | | - base_unit_price=PlanPrice.CODECOV_BASIC.value, |
295 | | - benefits=[ |
296 | | - "Up to 1 user", |
297 | | - "Unlimited public repositories", |
298 | | - "Unlimited private repositories", |
299 | | - ], |
300 | | - tier_name=TierName.BASIC.value, |
301 | | - monthly_uploads_limit=MonthlyUploadLimits.CODECOV_FREE_PLAN.value, |
302 | | - trial_days=None, |
303 | | -) |
304 | | - |
305 | | -FREE_PLAN = PlanData( |
306 | | - marketing_name=PlanMarketingName.FREE.value, |
307 | | - value=PlanName.FREE_PLAN_NAME.value, |
308 | | - billing_rate=None, |
309 | | - base_unit_price=PlanPrice.CODECOV_FREE.value, |
310 | | - benefits=[ |
311 | | - "Up to 1 user", |
312 | | - "Unlimited public repositories", |
313 | | - "Unlimited private repositories", |
314 | | - ], |
315 | | - tier_name=TierName.BASIC.value, |
316 | | - trial_days=None, |
317 | | - monthly_uploads_limit=None, |
318 | | -) |
319 | | - |
320 | | -DEVELOPER_PLAN = PlanData( |
321 | | - marketing_name=PlanMarketingName.FREE.value, |
322 | | - value=DEFAULT_FREE_PLAN, |
323 | | - billing_rate=None, |
324 | | - base_unit_price=PlanPrice.CODECOV_FREE.value, |
325 | | - benefits=[ |
326 | | - "Up to 1 user", |
327 | | - "Unlimited public repositories", |
328 | | - "Unlimited private repositories", |
329 | | - ], |
330 | | - tier_name=TierName.TEAM.value, |
331 | | - trial_days=None, |
332 | | - monthly_uploads_limit=250, |
333 | | -) |
334 | | - |
335 | | -FREE_PLAN_REPRESENTATIONS = { |
336 | | - PlanName.FREE_PLAN_NAME.value: FREE_PLAN, |
337 | | - PlanName.BASIC_PLAN_NAME.value: BASIC_PLAN, |
338 | | - DEFAULT_FREE_PLAN: DEVELOPER_PLAN, |
339 | | -} |
340 | | - |
341 | | -TEAM_PLAN_REPRESENTATIONS = { |
342 | | - PlanName.TEAM_MONTHLY.value: PlanData( |
343 | | - marketing_name=PlanMarketingName.TEAM.value, |
344 | | - value=PlanName.TEAM_MONTHLY.value, |
345 | | - billing_rate=PlanBillingRate.MONTHLY.value, |
346 | | - base_unit_price=PlanPrice.TEAM_MONTHLY.value, |
347 | | - benefits=[ |
348 | | - "Up to 10 users", |
349 | | - "Unlimited repositories", |
350 | | - "2500 private repo uploads", |
351 | | - "Patch coverage analysis", |
352 | | - ], |
353 | | - tier_name=TierName.TEAM.value, |
354 | | - trial_days=None, |
355 | | - monthly_uploads_limit=MonthlyUploadLimits.CODECOV_TEAM_PLAN.value, |
356 | | - ), |
357 | | - PlanName.TEAM_YEARLY.value: PlanData( |
358 | | - marketing_name=PlanMarketingName.TEAM.value, |
359 | | - value=PlanName.TEAM_YEARLY.value, |
360 | | - billing_rate=PlanBillingRate.YEARLY.value, |
361 | | - base_unit_price=PlanPrice.TEAM_YEARLY.value, |
362 | | - benefits=[ |
363 | | - "Up to 10 users", |
364 | | - "Unlimited repositories", |
365 | | - "2500 private repo uploads", |
366 | | - "Patch coverage analysis", |
367 | | - ], |
368 | | - tier_name=TierName.TEAM.value, |
369 | | - trial_days=None, |
370 | | - monthly_uploads_limit=MonthlyUploadLimits.CODECOV_TEAM_PLAN.value, |
371 | | - ), |
372 | | -} |
373 | | - |
374 | | -TRIAL_PLAN_REPRESENTATION = { |
375 | | - PlanName.TRIAL_PLAN_NAME.value: PlanData( |
376 | | - marketing_name=PlanMarketingName.TRIAL.value, |
377 | | - value=PlanName.TRIAL_PLAN_NAME.value, |
378 | | - billing_rate=None, |
379 | | - base_unit_price=PlanPrice.CODECOV_TRIAL.value, |
380 | | - benefits=[ |
381 | | - "Configurable # of users", |
382 | | - "Unlimited public repositories", |
383 | | - "Unlimited private repositories", |
384 | | - "Priority Support", |
385 | | - ], |
386 | | - tier_name=TierName.TRIAL.value, |
387 | | - trial_days=None, |
388 | | - monthly_uploads_limit=None, |
389 | | - ), |
390 | | -} |
391 | | - |
392 | | -PAID_PLANS = { |
393 | | - **PR_AUTHOR_PAID_USER_PLAN_REPRESENTATIONS, |
394 | | - **SENTRY_PAID_USER_PLAN_REPRESENTATIONS, |
395 | | - **ENTERPRISE_CLOUD_USER_PLAN_REPRESENTATIONS, |
396 | | - **TEAM_PLAN_REPRESENTATIONS, |
397 | | -} |
398 | | - |
399 | | -TRIAL_PLANS = {**TRIAL_PLAN_REPRESENTATION} |
400 | | - |
401 | | -TEAM_PLANS = {**TEAM_PLAN_REPRESENTATIONS} |
402 | | - |
403 | | - |
404 | | -USER_PLAN_REPRESENTATIONS = { |
405 | | - **FREE_PLAN_REPRESENTATIONS, |
406 | | - **NON_PR_AUTHOR_PAID_USER_PLAN_REPRESENTATIONS, |
407 | | - **GHM_PLAN_REPRESENTATION, |
408 | | - **PAID_PLANS, |
409 | | - **TRIAL_PLANS, |
410 | | - **TEAM_PLANS, |
411 | | -} |
412 | | - |
413 | | -PLANS_THAT_CAN_TRIAL = [ |
414 | | - DEFAULT_FREE_PLAN, |
415 | | - PlanName.FREE_PLAN_NAME.value, |
416 | | - PlanName.BASIC_PLAN_NAME.value, |
417 | | - PlanName.CODECOV_PRO_MONTHLY.value, |
418 | | - PlanName.CODECOV_PRO_YEARLY.value, |
419 | | - PlanName.SENTRY_MONTHLY.value, |
420 | | - PlanName.SENTRY_YEARLY.value, |
421 | | - PlanName.TRIAL_PLAN_NAME.value, |
422 | | -] |
423 | | - |
424 | 84 | TRIAL_PLAN_SEATS = 1000 |
425 | 85 | TEAM_PLAN_MAX_USERS = 10 |
0 commit comments