from otree.api import * import random import time class C(BaseConstants): NAME_IN_URL = 'welcome' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 IMPLEMENTABLE_PARTS = ['part1', 'part2', 'part3'] # 'part4' IMPLEMENTABLE_PARTS_SESSION1 = ['part1', 'part2'] #, 'part4' WTP_PROB = 0 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): pass def init_participant_vars(player: Player): participant = player.participant is_session1 = bool(player.session.config.get('session1', False)) is_pilot = bool(player.session.config.get('sessionPilot', False)) # Implemented part: exclude part3 in session1 parts = C.IMPLEMENTABLE_PARTS_SESSION1 if is_session1 else C.IMPLEMENTABLE_PARTS participant.vars.setdefault('implemented_part', random.choice(parts)) # WTP: # - never in session1 # - never in sessionPilot (since WTP app is removed from pilot app_sequence) # - otherwise follow WTP_PROB (main session) if is_session1 or is_pilot: participant.vars.setdefault('use_wtp', False) else: participant.vars.setdefault('use_wtp', (random.random() < C.WTP_PROB)) participant.vars.setdefault('wtp_pair', None) participant.vars.setdefault('wtp_pair_label', None) participant.vars.setdefault('wtp_bonus', 0) participant.vars.setdefault('implemented_scenario_id', None) participant.vars.setdefault('part1_payoff', 0) participant.vars.setdefault('part2_puzzles_payoff', 0) participant.vars.setdefault('part2_sliders_payoff', 0) participant.vars.setdefault('part3_payoff', 0) #participant.vars.setdefault('part4_payoff', 0) participant.vars.setdefault('beliefs_bonus', 0) class Welcome(Page): @staticmethod def before_next_page(player: Player, timeout_happened): init_participant_vars(player) p = player.participant p.vars.setdefault('started_ts', time.time()) @staticmethod def vars_for_template(player: Player): return dict( is_session1=bool(player.session.config.get('session1', False)), is_pilot=bool(player.session.config.get('sessionPilot', False)), participation_fee=player.session.config.get('participation_fee', cu(0)), ) page_sequence = [Welcome]