Coverage for polar/benefit/strategies/meter_credit/schemas.py: 100%
15 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 typing import Annotated, Literal
3from annotated_types import Gt, Le
4from pydantic.types import UUID4
6from polar.kit.schemas import Schema
7from polar.models.benefit import BenefitType
9from ..base.schemas import (
10 BenefitBase,
11 BenefitCreateBase,
12 BenefitSubscriberBase,
13 BenefitUpdateBase,
14)
16INT_MAX_VALUE = 2_147_483_647
19class BenefitMeterCreditProperties(Schema):
20 """
21 Properties for a benefit of type `meter_unit`.
22 """
24 units: int
25 rollover: bool
26 meter_id: UUID4
29class BenefitMeterCreditCreateProperties(Schema):
30 """
31 Properties for creating a benefit of type `meter_unit`.
32 """
34 units: Annotated[int, Gt(0), Le(INT_MAX_VALUE)]
35 rollover: bool
36 meter_id: UUID4
39class BenefitMeterCreditSubscriberProperties(Schema):
40 """
41 Properties available to subscribers for a benefit of type `meter_unit`.
42 """
44 units: int
45 rollover: bool
46 meter_id: UUID4
49class BenefitMeterCreditCreate(BenefitCreateBase):
50 """
51 Schema to create a benefit of type `meter_unit`.
52 """
54 type: Literal[BenefitType.meter_credit]
55 properties: BenefitMeterCreditCreateProperties
58class BenefitMeterCreditUpdate(BenefitUpdateBase):
59 type: Literal[BenefitType.meter_credit]
60 properties: BenefitMeterCreditCreateProperties | None = None
63class BenefitMeterCredit(BenefitBase):
64 """
65 A benefit of type `meter_unit`.
67 Use it to grant a number of units on a specific meter.
68 """
70 type: Literal[BenefitType.meter_credit]
71 properties: BenefitMeterCreditProperties
74class BenefitMeterCreditSubscriber(BenefitSubscriberBase):
75 type: Literal[BenefitType.meter_credit]
76 properties: BenefitMeterCreditSubscriberProperties