""" Options: Date: 2026-09-24 03:10:12 Version: 10.05 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://testapi.bokamera.se #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: GetVossPackage.* #ExcludeTypes: #DefaultImports: datetime,decimal,marshmallow.fields:*,servicestack:*,typing:*,dataclasses:dataclass/field,dataclasses_json:dataclass_json/LetterCase/Undefined/config,enum:Enum/IntEnum #DataClass: #DataClassJson: """ import datetime import decimal from marshmallow.fields import * from servicestack import * from typing import * from dataclasses import dataclass, field from dataclasses_json import dataclass_json, LetterCase, Undefined, config from enum import Enum, IntEnum Object = TypeVar('Object') class ProductTypeEnum(str, Enum): MAIN = 'Main' ADDON = 'Addon' LICENSE = 'License' USAGE = 'Usage' class PeriodAnchorEnum(str, Enum): LATEST_PERIOD = 'LatestPeriod' CURRENT_PERIOD = 'CurrentPeriod' class TypeEnum(str, Enum): AT_SUBSCRIPTION_BILLING_PERIOD_END = 'AtSubscriptionBillingPeriodEnd' AT_BINDING_PERIOD_END = 'AtBindingPeriodEnd' class ProductGroupTypeEnum(str, Enum): OPTIONAL = 'Optional' INCLUDED = 'Included' class StatusEnum(str, Enum): ACTIVE = 'Active' TERMINATED = 'Terminated' class PackageStatusEnum(str, Enum): DRAFT = 'Draft' STAGED = 'Staged' PUBLISHED = 'Published' ARCHIVED = 'Archived' DISCARDED = 'Discarded' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ProductGroupTagDto: type: Optional[TypeEnum] = None tag: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PackageProductDto: product_type: Optional[ProductTypeEnum] = None status: Optional[StatusEnum] = None id: Optional[str] = None name: Optional[str] = None external_id: Optional[str] = None article_number: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PackageProductGroupDto: product_group_type: Optional[ProductGroupTypeEnum] = None id: Optional[str] = None name: Optional[str] = None external_id: Optional[str] = None tags: List[ProductGroupTagDto] = field(default_factory=list) products: List[PackageProductDto] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PackageTierDto: id: Optional[str] = None name: Optional[str] = None external_id: Optional[str] = None product_groups: List[PackageProductGroupDto] = field(default_factory=list) class PeriodEndActionEnum(str, Enum): RENEW = 'Renew' TERMINATE = 'Terminate' class UnitEnum(str, Enum): DAY = 'Day' MONTH = 'Month' YEAR = 'Year' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class TimeLengthDto: unit: Optional[UnitEnum] = None value: int = 0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class BindingPeriodCycleDto: period_end_action: Optional[PeriodEndActionEnum] = None length: Optional[TimeLengthDto] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PeriodDateOffsetDto: period_anchor: Optional[PeriodAnchorEnum] = None length: Optional[TimeLengthDto] = None value_anchor: Optional[int] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class BillingPeriodCycleDto: length: Optional[TimeLengthDto] = None invoice_date_offset: Optional[PeriodDateOffsetDto] = None renewal_date_offset: Optional[PeriodDateOffsetDto] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PackagePlanDto: id: Optional[str] = None name: Optional[str] = None external_id: Optional[str] = None binding_period_cycle: Optional[BindingPeriodCycleDto] = None subscription_billing_period_cycle: Optional[BillingPeriodCycleDto] = None usage_billing_period_cycle: Optional[BillingPeriodCycleDto] = None class PricingSchemeEnum(str, Enum): UNIT_PRICING = 'UnitPricing' TIER_PRICING = 'TierPricing' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ProductTierPricingDto: index: int = 0 unit_price: float = 0.0 flat_price: float = 0.0 repeat_every: Optional[int] = None upper_limit: Optional[int] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ProductPricingDto: pricing_scheme: Optional[PricingSchemeEnum] = None product_id: Optional[str] = None included_quantity: Optional[int] = None max_quantity: Optional[int] = None unit_price: Optional[float] = None tier_pricing: List[ProductTierPricingDto] = field(default_factory=list) article_number: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ProductGroupPricingDto: product_group_id: Optional[str] = None article_number: Optional[str] = None price: float = 0.0 product_pricings: List[ProductPricingDto] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PackageChargePlanDto: id: Optional[str] = None tier_id: Optional[str] = None plan_id: Optional[str] = None product_group_pricings: List[ProductGroupPricingDto] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PackageSalesChannelDto: id: Optional[str] = None name: Optional[str] = None description: Optional[str] = None valid_from: Optional[datetime.datetime] = None valid_to: Optional[datetime.datetime] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PackageTargetGroupDto: id: Optional[str] = None name: Optional[str] = None is_default: bool = False external_id: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PackageScheduledChangeResultDto: status: Optional[PackageStatusEnum] = None name: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PackageScheduledChangeResult: status: Optional[StatusEnum] = None id: Optional[str] = None version_id: Optional[str] = None package: Optional[PackageScheduledChangeResultDto] = None scheduled_date: datetime.datetime = datetime.datetime(1, 1, 1) class PeriodAnchorEnum(str, Enum): PERIOD_CREATED = 'PeriodCreated' PERIOD_START = 'PeriodStart' PERIOD_END = 'PeriodEnd' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PackageResult: package_status: Optional[PackageStatusEnum] = None id: Optional[str] = None version_id: Optional[str] = None source_version_id: Optional[str] = None name: Optional[str] = None external_id: Optional[str] = None tiers: List[PackageTierDto] = field(default_factory=list) plans: List[PackagePlanDto] = field(default_factory=list) charge_plans: List[PackageChargePlanDto] = field(default_factory=list) sales_channels: List[PackageSalesChannelDto] = field(default_factory=list) target_groups: List[PackageTargetGroupDto] = field(default_factory=list) scheduled_changes: List[PackageScheduledChangeResult] = field(default_factory=list) # @Route("/voss/packages", "GET") # @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class GetVossPackage(IReturn[PackageResult]): # @ApiMember(Description="The package id; if not passed the configured BokaMera package will be used.") package_id: Optional[str] = None """ The package id; if not passed the configured BokaMera package will be used. """