Source code for autumn.models.customers
from __future__ import annotations
from enum import Enum
from typing import Any, Dict, List, Optional
from pydantic import BaseModel
from .env import AppEnv
from .products import ProductItemInterval
__all__ = (
"ProductStatus",
"FeatureType",
"CustomerInvoice",
"CustomerFeature",
"CustomerProduct",
"Customer",
"PriceInfo",
"ItemInfo",
"GetPricingTableParams",
"PricingTableProduct",
)
[docs]
class ProductStatus(str, Enum):
ACTIVE = "active"
EXPIRED = "expired"
TRIALING = "trialing"
SCHEDULED = "scheduled"
[docs]
class FeatureType(str, Enum):
STATIC = "static"
CONTINUOUS_USE = "continuous_use"
SINGLE_USE = "single_use"
BOOLEAN = "boolean"
[docs]
class CustomerInvoice(BaseModel):
product_ids: List[str]
stripe_id: str
status: str
total: float
currency: str
created_at: int
hosted_invoice_url: str
[docs]
class CustomerFeature(BaseModel):
id: str
name: str
unlimited: Optional[bool] = None
type: Optional[FeatureType] = None
interval: Optional[ProductItemInterval] = None
balance: Optional[float] = None
usage: Optional[float] = None
included_usage: Optional[float] = None
next_reset_at: Optional[int] = None
breakdown: Optional[List[Dict[str, Any]]] = None
class ReferredCustomer(BaseModel):
id: str
name: Optional[str] = None
email: Optional[str] = None
class CustomerReferral(BaseModel):
program_id: str
customer: ReferredCustomer
reward_applied: bool
created_at: int
[docs]
class CustomerProduct(BaseModel):
id: str
name: Optional[str] = None
group: Optional[str] = None
status: ProductStatus
started_at: int
canceled_at: Optional[int] = None
subscription_ids: Optional[List[str]] = None
current_period_start: Optional[int] = None
current_period_end: Optional[int] = None
quantity: Optional[int] = None
[docs]
class Customer(BaseModel):
id: Optional[str] = None
created_at: int
name: Optional[str] = None
email: Optional[str] = None
fingerprint: Optional[str] = None
stripe_id: Optional[str] = None
env: AppEnv
metadata: Dict[str, Any]
products: List[CustomerProduct]
features: Dict[str, CustomerFeature]
invoices: Optional[List[CustomerInvoice]] = None
payment_method: Optional[Any] = None
referrals: Optional[List[CustomerReferral]] = None
[docs]
class PriceInfo(BaseModel):
primaryText: str
secondaryText: Optional[str] = None
[docs]
class ItemInfo(BaseModel):
primaryText: str
secondaryText: Optional[str] = None
[docs]
class GetPricingTableParams(BaseModel):
customer_id: Optional[str] = None
[docs]
class PricingTableProduct(BaseModel):
id: str
name: str
buttonText: str
price: PriceInfo
items: List[ItemInfo]