""" Options: Date: 2025-08-05 02:15:41 Version: 8.0 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://www.asg.com.au/RestApi #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: GetABTestsCount.* #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 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class VariationViewModel: id: Optional[str] = None name: Optional[str] = None distribution: int = 0 is_original: bool = False ordinal: int = 0 page_data_id: Optional[str] = None is_winner: bool = False class GoalType(str, Enum): NEXT_PAGE_VIEW = 'NextPageView' FORM_SUBMISSION = 'FormSubmission' DEC_CONVERSION = 'DecConversion' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class GoalViewModel: id: Optional[str] = None goal_type: Optional[GoalType] = None goal_name_resource_key: Optional[str] = None predicate_operator: Optional[str] = None object_id: Optional[str] = None object_name: Optional[str] = None object_culture: Optional[str] = None is_primary: bool = False ordinal: int = 0 class ABTestStatus(str, Enum): NOT_STARTED = 'NotStarted' SCHEDULED = 'Scheduled' ACTIVE = 'Active' STOPPED = 'Stopped' ENDED = 'Ended' class IABTestsFilter: search_text: Optional[str] = None status: Optional[ABTestStatus] = None my_tests: bool = False # @Route("/ab-testing", "PUT") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ABTestViewModel(IReturn["ABTestViewModel"]): id: Optional[str] = None title: Optional[str] = None description: Optional[str] = None start_date: Optional[datetime.datetime] = None stop_date: Optional[datetime.datetime] = None page: Optional[str] = None site_id: Optional[str] = None culture: Optional[str] = None variations: Optional[List[VariationViewModel]] = None goals: Optional[List[GoalViewModel]] = None report_url: Optional[str] = None last_modified: datetime.datetime = datetime.datetime(1, 1, 1) status: Optional[ABTestStatus] = None owner: Optional[str] = None winner_variation_id: Optional[str] = None selected_variation_id: Optional[str] = None page_node_error_message: Optional[str] = None warning_message: Optional[str] = None api_key: Optional[str] = None user_segment_id: Optional[str] = None # @Route("/ab-testing/tests/count", "GET") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class GetABTestsCount(IReturn[List[ABTestViewModel]], IABTestsFilter): search_text: Optional[str] = None status: Optional[ABTestStatus] = None my_tests: bool = False