from otree.api import Currency as c, currency_range from . import models from ._builtin import Page, WaitPage from .models import Constants from otree.models import Participant from otree.api import Submission from django.http.response import HttpResponseRedirect import random import json class p1Consent(Page): pass class p2Welcome(Page): form_model = 'player' form_fields = ['username', 'gender', 'age', 'race', 'party1'] def gender_choices(self): choices = ['Male', 'Female'] random.shuffle(choices) return choices def race_choices(self): choices = ['White, non-Hispanic', 'Black, non-Hispanic', 'Hispanic or Latino', 'Other'] random.shuffle(choices) return choices def before_next_page(self): player = self.player player.player_id = player.chars class p3HowtoPlay_MJ(Page): def is_displayed(self): return self.player.system == 'MJ' and self.player.nteams == 3 class p3HowtoPlay_MJ_4(Page): def is_displayed(self): return self.player.system == 'MJ' and self.player.nteams == 4 class p3HowtoPlay_MJ_5(Page): def is_displayed(self): return self.player.system == 'MJ' and self.player.nteams == 5 class p3HowtoPlay_PR(Page): def is_displayed(self): return self.player.system == 'PR' and self.player.nteams == 3 class p3HowtoPlay_PR_4(Page): def is_displayed(self): return self.player.system == 'PR' and self.player.nteams == 4 class p3HowtoPlay_PR_5(Page): def is_displayed(self): return self.player.system == 'PR' and self.player.nteams == 5 class p3HowtoPlay_RCV(Page): def is_displayed(self): return self.player.system == 'RCV' and self.player.nteams == 3 class p3HowtoPlay_RCV_4(Page): def is_displayed(self): return self.player.system == 'RCV' and self.player.nteams == 4 class p3HowtoPlay_RCV_5(Page): def is_displayed(self): return self.player.system == 'RCV' and self.player.nteams == 5 class p3HowtoPlay2(Page): pass class p4beforeGame(Page): pass class p5m1_Trialsystem1(Page): def is_displayed(self): return self.player.system == 'MJ' form_model = 'player' form_fields = ['correct_clicked_system1', 'correct_clicked_system2'] class p5m2_Trialsystem2(Page): def is_displayed(self): return self.player.system == 'MJ' form_model = 'player' form_fields = ['correct_clicked_system3', 'correct_clicked_system4'] class p5p1_Trialsystem1(Page): def is_displayed(self): return self.player.system == 'PR' form_model = 'player' form_fields = ['correct_clicked_system1', 'correct_clicked_system2'] class p5p2_Trialsystem2(Page): def is_displayed(self): return self.player.system == 'PR' form_model = 'player' form_fields = ['correct_clicked_system3', 'correct_clicked_system4'] class p5a_Trialdecision1(Page): form_model = 'player' form_fields = ['correct_clicked_equal'] class p5b_Trialdecision2(Page): form_model = 'player' form_fields = ['correct_clicked_winner1', 'correct_clicked_winner2'] class p5c_Trialdecision3(Page): form_model = 'player' form_fields = ['correct_clicked_prop1', 'correct_clicked_prop2'] class p6toGame(Page): pass class p7Wait1(Page): timeout_seconds = 30 timer_text = "Starting..." class p8Assignment(Page): pass class p9Election(Page): def is_displayed(self): return self.player.nteams == 3 form_model = 'player' form_fields = ['vote'] def before_next_page(self): player = self.player if player.vote == "Team A": player.team = "A" player.otherteam1 = "B" player.otherteam2 = "C" if player.vote == "Team B": player.team = "B" player.otherteam1 = "A" player.otherteam2 = "C" if player.vote == "Team C": player.team = "C" player.otherteam1 = "A" player.otherteam2 = "B" class p9Election_4(Page): def is_displayed(self): return self.player.nteams == 4 form_model = 'player' form_fields = ['vote_4'] def before_next_page(self): player = self.player if player.vote_4 == "Team A": player.team = "A" player.otherteam1 = "B" player.otherteam2 = "C" player.otherteam3 = "D" if player.vote_4 == "Team B": player.team = "B" player.otherteam1 = "A" player.otherteam2 = "C" player.otherteam3 = "D" if player.vote_4 == "Team C": player.team = "C" player.otherteam1 = "A" player.otherteam2 = "B" player.otherteam3 = "C" if player.vote_4 == "Team D": player.team = "D" player.otherteam1 = "A" player.otherteam2 = "B" player.otherteam3 = "D" class p9Election_5(Page): def is_displayed(self): return self.player.nteams == 5 form_model = 'player' form_fields = ['vote_5'] def before_next_page(self): player = self.player if player.vote_5 == "Team A": player.team = "A" player.otherteam1 = "B" player.otherteam2 = "C" player.otherteam3 = "D" player.otherteam4 = "E" if player.vote_5 == "Team B": player.team = "B" player.otherteam1 = "A" player.otherteam2 = "C" player.otherteam3 = "D" player.otherteam4 = "B" if player.vote_5 == "Team C": player.team = "C" player.otherteam1 = "A" player.otherteam2 = "B" player.otherteam3 = "C" player.otherteam4 = "E" if player.vote_5 == "Team D": player.team = "D" player.otherteam1 = "A" player.otherteam2 = "B" player.otherteam3 = "C" player.otherteam4 = "E" if player.vote_5 == "Team E": player.team = "E" player.otherteam1 = "A" player.otherteam2 = "B" player.otherteam3 = "C" player.otherteam4 = "D" class p9Election_RCV(Page): def is_displayed(self): return self.player.nteams == 3 and self.player.system == "RCV" form_model = 'player' form_fields = ['rcv_vote_1', 'rcv_vote_2', 'rcv_vote_3'] def before_next_page(self): player = self.player player.team = player.rcv_vote_1 player.otherteam1 = player.rcv_vote_2 player.otherteam2 = player.rcv_vote_3 class p9Election_RCV_4(Page): def is_displayed(self): return self.player.nteams == 4 and self.player.system == "RCV" form_model = 'player' form_fields = ['rcv_vote_1', 'rcv_vote_2', 'rcv_vote_3', 'rcv_vote_4'] def before_next_page(self): player = self.player player.team = player.rcv_vote_1 player.otherteam1 = player.rcv_vote_2 player.otherteam2 = player.rcv_vote_3 player.otherteam3 = player.rcv_vote_4 class p9Election_RCV_5(Page): def is_displayed(self): return self.player.nteams == 5 and self.player.system == "RCV" form_model = 'player' form_fields = ['rcv_vote_1', 'rcv_vote_2', 'rcv_vote_3', 'rcv_vote_4', 'rcv_vote_5'] def before_next_page(self): player = self.player player.team = player.rcv_vote_1 player.otherteam1 = player.rcv_vote_2 player.otherteam2 = player.rcv_vote_3 player.otherteam3 = player.rcv_vote_4 player.otherteam4 = player.rcv_vote_5 class p10Wait2(Page): def is_displayed(self): return self.player.system != 'RCV' timeout_seconds = 20 timer_text = "Starting..." class p10Wait2_RCV(Page): def is_displayed(self): return self.player.system == 'RCV' and self.player.nteams == 3 timeout_seconds = 20 timer_text = "Starting..." class p10Wait2_RCV_4(Page): def is_displayed(self): return self.player.system == 'RCV' and self.player.nteams == 4 timeout_seconds = 20 timer_text = "Starting..." class p10Wait2_RCV_5(Page): def is_displayed(self): return self.player.system == 'RCV' and self.player.nteams == 5 timeout_seconds = 20 timer_text = "Starting..." class p11WinLose(Page): def is_displayed(self): return self.player.system != 'RCV' and self.player.nteams == 3 class p11WinLose_4(Page): def is_displayed(self): return self.player.system != 'RCV' and self.player.nteams == 4 class p11WinLose_5(Page): def is_displayed(self): return self.player.system != 'RCV' and self.player.nteams == 5 class p11WinLose_RCV(Page): def is_displayed(self): return self.player.system == 'RCV' and self.player.nteams == 3 class p11WinLose_RCV_4(Page): def is_displayed(self): return self.player.system == 'RCV' and self.player.nteams == 4 class p11WinLose_RCV_5(Page): def is_displayed(self): return self.player.system == 'RCV' and self.player.nteams == 5 # class p12HowtoDictator(Page): # pass # class p13HowtoDictator2(Page): # pass # class p14Wait3(Page): # timeout_seconds = 12 # timer_text = "Starting..." # class p15DictatorGame(Page): # form_model = 'player' # def get_form_fields(self): # fields = ['give', 'keep'] # random.shuffle(fields) # return fields # def error_message(self, values): # if values["keep"] + values["give"] > 10: # return 'The sum of the two numbers cannot exceed 10.' # if values["keep"] + values["give"] != 10: # return 'The sum of the two numbers must be equal to 10.' # class p15_r2Wait3(Page): # timeout_seconds = 12 # timer_text = "Starting..." # class p15_r2DictatorGame(Page): # form_model = 'player' # def get_form_fields(self): # fields = ['give2', 'keep2'] # random.shuffle(fields) # return fields # def error_message(self, values): # if values["keep2"] + values["give2"] > 10: # return 'The sum of the two numbers cannot exceed 10.' # if values["keep2"] + values["give2"] != 10: # return 'The sum of the two numbers must be equal to 10.' class p16HowDoYouFeel(Page): form_model = 'player' form_fields = ['happy', 'fair'] class p17Questionnaire(Page): form_model = 'player' def get_form_fields(self): fields = ['education', 'income', 'party1'] random.shuffle(fields) return fields class p18Debrief(Page): pass class p19Mturkcode(Page): pass start_pages = [ p1Consent, p2Welcome, p3HowtoPlay_PR, p3HowtoPlay_MJ, p3HowtoPlay_RCV, p3HowtoPlay_PR_4, p3HowtoPlay_MJ_4, p3HowtoPlay_RCV_4, p3HowtoPlay_PR_5, p3HowtoPlay_MJ_5, p3HowtoPlay_RCV_5, p3HowtoPlay2, p4beforeGame, p5m1_Trialsystem1, p5m2_Trialsystem2, p5p1_Trialsystem1, p5p2_Trialsystem2, ] end_pages = [ p6toGame, p7Wait1, p8Assignment, p9Election, p9Election_4, p9Election_5, p9Election_RCV, p9Election_RCV_4, p9Election_RCV_5, p10Wait2, p10Wait2_RCV, p10Wait2_RCV_4, p10Wait2_RCV_5, p11WinLose, p11WinLose_4, p11WinLose_5, p11WinLose_RCV, p11WinLose_RCV_4, p11WinLose_RCV_5, # p12HowtoDictator, # p13HowtoDictator2, # p14Wait3, # p15DictatorGame, # p15_r2Wait3, # p15_r2Wait3, # p15_r2DictatorGame, p16HowDoYouFeel, p17Questionnaire, p18Debrief, p19Mturkcode ] initial_page_sequence = [ p5a_Trialdecision1, p5b_Trialdecision2, p5c_Trialdecision3, ] page_sequence = [ ] class MyPage(Page): def inner_dispatch(self): page_seq = int(self.__class__.__name__.split('_')[1]) page_to_show = json.loads(self.participant.vars["trial_sequence"])[page_seq] self._is_frozen = False self.__class__ = globals()[page_to_show] return super(globals()[page_to_show], self).inner_dispatch() for i, _ in enumerate(initial_page_sequence): NewClassName = "Page_{}".format(i) A = type(NewClassName, (MyPage,), {}) locals()[NewClassName] = A page_sequence.append(locals()[NewClassName]) page_sequence = start_pages + page_sequence + end_pages