from otree.api import * import random, time doc = """ Andersen et al.(2008) 'Eliciting risk and time preferences' Econometrica https://doi.org/10.1111/j.1468-0262.2008.00848.x """ class C(BaseConstants): NAME_IN_URL = 'survey_risk_and_time_preference' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): for p in subsession.get_players(): p.is_RiskFirst = random.choice([0, 1]) class Group(BaseGroup): pass class Player(BasePlayer): time_TakeL_UpTo = models.IntegerField() risk_TakeL_UpTo = models.IntegerField() is_RiskFirst = models.IntegerField() time_stamp_time = models.FloatField(blank=True) time_stamp_risk = models.FloatField(blank=True) # PAGES class TimePreference(Page): form_model = "player" form_fields = ["time_TakeL_UpTo"] def vars_for_template(player: Player): return { "optR": [30750, 31520, 32290, 33080, 33870, 34670, 35480, 36300, 37130, 37970], } @staticmethod def before_next_page(player, timeout_happened): player.time_stamp_time = time.time() class RiskPreference(Page): form_model = "player" form_fields = ["risk_TakeL_UpTo"] def vars_for_template(player: Player): optL = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] optR = [100 - o for o in optL] optLR = dict(zip(optL, optR)) return { "optL": optL, "optLR": optLR } @staticmethod def is_displayed(player): return player.is_RiskFirst == 1 @staticmethod def before_next_page(player, timeout_happened): player.time_stamp_risk = time.time() class RiskPreference2(RiskPreference): template_name = 'survey_risk_and_time_preference/RiskPreference.html' @staticmethod def is_displayed(player): return player.is_RiskFirst != 1 page_sequence = [RiskPreference, TimePreference, RiskPreference2]