from ._builtin import Page from .models import Constants import random class Consent(Page): form_model = 'player' form_fields = ['consent'] def is_displayed(self): return self.round_number == 1 def before_next_page(self): if self.round_number == 1: self.player.colors_reversed = random.randint(0, 1) self.player.participant.vars['colors_reversed'] = self.player.colors_reversed self.player.roles_reversed = random.randint(0, 1) self.player.participant.vars['roles_reversed'] = self.player.roles_reversed randomized_problems = random.sample(Constants.problems, len(Constants.problems)) self.player.participant.vars['randomized_problems'] = randomized_problems class End1(Page): def is_displayed(self): return self.round_number == 1 and self.player.consent == 2 class GeneralInstructions1(Page): def is_displayed(self): return self.round_number == 1 class GeneralInstructions2(Page): def is_displayed(self): return self.round_number == 1 class Loading(Page): timeout_seconds = 0.5 def before_next_page(self): problem_data = self.player.current_problem() self.player.problem_id = int(problem_data['id']) self.player.problem_type = int(problem_data['type']) self.player.payoff_a = int(problem_data['a']) self.player.payoff_b = int(problem_data['b']) self.player.payoff_c = int(problem_data['c']) self.player.payoff_d = int(problem_data['d']) self.player.payoff_e = int(problem_data['e']) self.player.payoff_f = int(problem_data['f']) self.player.payoff_g = int(problem_data['g']) self.player.payoff_h = int(problem_data['h']) self.player.colors_reversed = self.participant.vars.get('colors_reversed') self.player.roles_reversed = self.participant.vars.get('roles_reversed') class Instructions1(Page): def is_displayed(self): return self.round_number == 1 class ComprehensionQuestions1(Page): form_model = 'player' form_fields = ['q1', 'q2', 'q3'] def is_displayed(self): return self.round_number == 1 def before_next_page(self): if self.player.roles_reversed == 0: self.player.q1_error = False if self.player.q1 != 2: self.player.q1_error = True if self.player.roles_reversed == 1: self.player.q1_error = False if self.player.q1 != 1: self.player.q1_error = True self.player.q2_error = False if self.player.q2 != 180: self.player.q2_error = True self.player.q3_error = False if self.player.q3 != 470: self.player.q3_error = True self.player.cq_error = False if self.player.q1_error or self.player.q2_error or self.player.q3_error: self.player.cq_error = True if self.player.cq_error: self._is_frozen = False self._index_in_pages -= 2 self.participant._index_in_pages -= 2 class Instructions2(Page): def is_displayed(self): return self.round_number == 1 class ComprehensionQuestions2(Page): form_model = 'player' form_fields = ['q4', 'q5'] def is_displayed(self): return self.round_number == 1 def q4_choices(self): if self.player.roles_reversed == 0: choices = [ [1, 'U: 100%, D: 0%'], [2, 'U: 74%, D: 26%'], [3, 'U: 26%, D: 74%'], [4, 'U: 0%, D: 100%'] ] return choices if self.player.roles_reversed == 1: choices = [ [1, 'L: 100%, R: 0%'], [2, 'L: 74%, R: 26%'], [3, 'L: 26%, R: 74%'], [4, 'L: 0%, R: 100%'] ] return choices def before_next_page(self): self.player.q4_error = False if self.player.q4 != 2: self.player.q4_error = True self.player.q5_error = False if self.player.q5 != 1: self.player.q5_error = True self.player.cq_error = False if self.player.q4_error or self.player.q5_error: self.player.cq_error = True if self.player.cq_error: self._is_frozen = False self._index_in_pages -= 2 self.participant._index_in_pages -= 2 class Instructions3(Page): def is_displayed(self): return self.round_number == 1 class PracticeSituation1(Page): timeout_seconds = 1.0 def is_displayed(self): return self.round_number == 1 class PracticeSituation2(Page): def is_displayed(self): return self.round_number == 1 class PracticeSituation3(Page): form_model = 'player' form_fields = ['practice_submitted_belief'] def is_displayed(self): return self.round_number == 1 class PracticeSituation4(Page): timeout_seconds = 1.0 def is_displayed(self): return self.round_number == 1 class PracticeSituation5(Page): def is_displayed(self): return self.round_number == 1 class PracticeSituation6(Page): form_model = 'player' form_fields = ['practice_submitted_choice'] def is_displayed(self): return self.round_number == 1 class Start(Page): def is_displayed(self): return self.round_number == 1 class DecisionSituation0(Page): timeout_seconds = 1.0 class DecisionSituation1(Page): pass class DecisionSituation2(Page): form_model = 'player' form_fields = ['submitted_choice'] def is_displayed(self): return self.player.problem_type == 1 class DecisionSituation3(Page): form_model = 'player' form_fields = ['submitted_belief'] def is_displayed(self): return self.player.problem_type == 2 class PaymentInformation(Page): form_model = 'player' form_fields = ['first_name', 'last_name', 'address', 'city', 'country', 'dob', 'iban', 'email'] def is_displayed(self): return self.round_number == Constants.num_rounds class End2(Page): def is_displayed(self): return self.round_number == Constants.num_rounds page_sequence = [ Consent, End1, GeneralInstructions1, GeneralInstructions2, Loading, Instructions1, ComprehensionQuestions1, Instructions2, ComprehensionQuestions2, Instructions3, PracticeSituation1, PracticeSituation2, PracticeSituation3, PracticeSituation4, PracticeSituation5, PracticeSituation6, Start, DecisionSituation0, DecisionSituation1, DecisionSituation2, DecisionSituation3, PaymentInformation, End2 ]