from otree import settings from otree.api import * import time import random doc = """ Extra Decisions """ #SESSION class Constants(BaseConstants): name_in_url = "MoreDecisions" players_per_group = None num_rounds = 1 #SUBSESSION class Subsession(BaseSubsession): pass #GROUP class Group(BaseGroup): pass ##PLAYER class Player(BasePlayer): time_decisions0 = models.FloatField() time_decisions1 = models.FloatField() time_decisions2 = models.FloatField() time_decisions3 = models.FloatField() time_decisions4 = models.FloatField() time_decisions5 = models.FloatField() time_decisions6 = models.FloatField() time_decisions7 = models.FloatField() time_decisions8 = models.FloatField() time_decisions9 = models.FloatField() versionA = models.BooleanField(initial=False) sg1 = models.IntegerField(initial=6,max=6) sg2 = models.IntegerField(initial=0,max=6) sg3 = models.IntegerField(initial=6,max=6) sg4 = models.IntegerField(initial=0,max=6) sgA = models.IntegerField(initial=6,max=6) sgB = models.IntegerField(initial=0,max=6) sgC = models.IntegerField(initial=6,max=6) sgD = models.IntegerField(initial=0,max=6) types = models.IntegerField( choices=[[1, 'Type 1'], [2, 'Type 2'], [3, 'Type 3'], [4, 'Type 4'], [5, 'Type 5'], ], widget=widgets.RadioSelect, blank=True, ) #FUNCTIONS def types_error_message(player, value): if value not in [1, 2, 3, 4, 5]: return 'You have to select one of the options.' #PAGES class SpectatorIntro(Page): form_model = 'player' @staticmethod def before_next_page(player, timeout_happened): player.time_decisions0 = round(time.time(),3) class SpectatorGame1(Page): form_model = 'player' form_fields = ['sgA','sgB'] @staticmethod def before_next_page(player, timeout_happened): player.versionA = random.choice([True, False]) player.time_decisions1 = round(time.time(),3) class SpectatorGame2(Page): form_model = 'player' form_fields = ['sg1','sg2'] @staticmethod def vars_for_template(player): if player.versionA: version = "A" else: version = "B" return dict( version=version, ) @staticmethod def before_next_page(player, timeout_happened): player.time_decisions2 = round(time.time(),3) class SpectatorGame3(Page): form_model = 'player' form_fields = ['sg3','sg4'] @staticmethod def before_next_page(player, timeout_happened): player.time_decisions3 = round(time.time(),3) class VignetteIntro(Page): form_model = 'player' @staticmethod def before_next_page(player, timeout_happened): player.time_decisions4 = round(time.time(),3) class VignetteContext(Page): form_model = 'player' @staticmethod def before_next_page(player, timeout_happened): player.time_decisions5 = round(time.time(),3) class VignetteDecision(Page): form_model = 'player' form_fields = ['sgC','sgD'] @staticmethod def before_next_page(player, timeout_happened): player.time_decisions6 = round(time.time(),3) class TypesIntro(Page): form_model = 'player' @staticmethod def before_next_page(player, timeout_happened): player.time_decisions7 = round(time.time(),3) class Types(Page): form_model = 'player' form_fields = ['types'] @staticmethod def before_next_page(player, timeout_happened): player.time_decisions8 = round(time.time(),3) class End(Page): form_model = 'player' @staticmethod def before_next_page(player, timeout_happened): player.time_decisions9 = round(time.time(),3) #SEQUENCE page_sequence = [SpectatorIntro, SpectatorGame1, SpectatorGame2,SpectatorGame3, VignetteIntro, VignetteContext, VignetteDecision, TypesIntro, Types, End]