Source code for autumn.models.products

from enum import Enum
from typing import List, Optional, Union

from pydantic import BaseModel

from .env import AppEnv

__all__ = (
    "FreeTrialDuration",
    "UsageModel",
    "ProductItemInterval",
    "PriceCurrencyPair",
    "PriceTier",
    "ProductItem",
    "FreeTrial",
    "Product",
)


[docs] class FreeTrialDuration(str, Enum): DAY = "day"
[docs] class UsageModel(str, Enum): PREPAID = "prepaid" PAY_PER_USE = "pay_per_use"
[docs] class ProductItemInterval(str, Enum): MINUTE = "minute" HOUR = "hour" DAY = "day" WEEK = "week" MONTH = "month" QUARTER = "quarter" SEMI_ANNUAL = "semi_annual" YEAR = "year" MULTIPLE = "multiple" LIFETIME = "lifetime"
[docs] class PriceCurrencyPair(BaseModel): price: float currency: str
[docs] class PriceTier(BaseModel): to: float amount: Union[float, str] # Can be a number or "inf"
[docs] class ProductItem(BaseModel): feature_id: Optional[str] = None included_usage: Optional[Union[float, str]] = None # Infinite is "inf" interval: Optional[ProductItemInterval] = None usage_model: Optional[UsageModel] = None price: Optional[float] = None billing_units: Optional[float] = None entity_feature_id: Optional[str] = None reset_usage_on_billing: Optional[bool] = None reset_usage_when_enabled: Optional[bool] = None
[docs] class FreeTrial(BaseModel): duration: FreeTrialDuration length: float unique_fingerprint: bool
[docs] class ProductScenario(str, Enum): SCHEDULED = "scheduled" ACTIVE = "active" NEW = "new" RENEW = "renew" UPGRADE = "upgrade" DOWNGRADE = "downgrade" CANCEL = "cancel"
[docs] class Product(BaseModel): created_at: float id: str name: Optional[str] = None env: AppEnv is_add_on: bool is_default: bool group: Optional[str] = None version: float items: List[ProductItem] free_trial: Optional[FreeTrial] = None scenario: Optional[ProductScenario] = None base_variant_id: Optional[str] = None
[docs] class ProductPreview(BaseModel): title: str message: str scenario: ProductScenario product_id: str product_name: str recurring: bool next_cycle_at: int current_product_name: str items: List[ProductItem] options: List[str] due_today: PriceCurrencyPair due_next_cycle: PriceCurrencyPair