from otree.api import Currency as c, currency_range import time from ._builtin import Page, WaitPage from .models import Constants import numpy as np from itertools import chain import json class abs1_Pairs(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' form_fields = ['pair_answer'] def before_next_page(self): self.player.timestamp_pairs = time.time() if self.player.pair_answer==self.player.pairs1_1: self.player.pair_answer_mask = self.player.mask1_1 self.player.pair_answer_mean = self.player.mask1_1_value if self.player.pair_answer==self.player.pairs1_2: self.player.pair_answer_mask = self.player.mask1_2 self.player.pair_answer_mean = self.player.mask1_2_value class abs1_Pairs2(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' form_fields = ['pair2_answer'] def before_next_page(self): self.player.timestamp_pairs2 = time.time() if self.player.pair2_answer==self.player.pairs2_1: self.player.pair2_answer_mask = self.player.mask2_1 self.player.pair2_answer_mean = self.player.mask2_1_value if self.player.pair2_answer==self.player.pairs2_2: self.player.pair2_answer_mask = self.player.mask2_2 self.player.pair2_answer_mean = self.player.mask2_2_value class End3(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' class abs2_Five_scarce(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' form_fields = ['five_scarce'] def before_next_page(self): self.player.timestamp_five = time.time() if self.player.five_scarce== self.player.five_scarce1_1: self.player.five_scarce_answer_mask = self.player.five_mask1 self.player.five_scarce_answer_mean = self.player.five_mask1_value if self.player.five_scarce== self.player.five_scarce1_2: self.player.five_scarce_answer_mask = self.player.five_mask2 self.player.five_scarce_answer_mean = self.player.five_mask2_value if self.player.five_scarce== self.player.five_scarce1_3: self.player.five_scarce_answer_mask = self.player.five_mask3 self.player.five_scarce_answer_mean = self.player.five_mask3_value if self.player.five_scarce== self.player.five_scarce1_4: self.player.five_scarce_answer_mask = self.player.five_mask4 self.player.five_scarce_answer_mean = self.player.five_mask4_value if self.player.five_scarce== self.player.five_scarce1_5: self.player.five_scarce_answer_mask = self.player.five_mask5 self.player.five_scarce_answer_mean = self.player.five_mask5_value class abs2_Five_scarce2(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' form_fields = ['five_scarce2'] def before_next_page(self): if self.player.five_scarce2== self.player.five_scarce2_1: self.player.five_scarce2_answer_mask = self.player.five_mask2_1 self.player.five_scarce2_answer_mean = self.player.five_mask2_1_value if self.player.five_scarce2== self.player.five_scarce2_2: self.player.five_scarce2_answer_mask = self.player.five_mask2_2 self.player.five_scarce2_answer_mean = self.player.five_mask2_2_value if self.player.five_scarce2== self.player.five_scarce2_3: self.player.five_scarce2_answer_mask = self.player.five_mask2_3 self.player.five_scarce2_answer_mean = self.player.five_mask2_3_value if self.player.five_scarce2== self.player.five_scarce2_4: self.player.five_scarce2_answer_mask = self.player.five_mask2_4 self.player.five_scarce2_answer_mean = self.player.five_mask2_4_value if self.player.five_scarce2== self.player.five_scarce2_5: self.player.five_scarce2_answer_mask = self.player.five_mask2_5 self.player.five_scarce2_answer_mean = self.player.five_mask2_5_value self.player.timestamp_five2 = time.time() class Multiple_choice(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' form_fields = ["five_mc", "five_mc_mean1", "five_mc_mean2","five_mc_mean3","five_mc_mean4","five_mc_mean5"] class Rating_end(Page): def vars_for_template(self): return{ 'rating_deviation_1': abs(self.player.rating1 - self.player.rating1_value), 'rating_deviation_2': abs(self.player.rating2 - self.player.rating2_value), 'rating_deviation_3': abs(self.player.rating3 - self.player.rating3_value), 'rating1_value': int(np.round(self.player.rating1_value)), 'rating2_value': int(np.round(self.player.rating2_value)), 'rating3_value': int(np.round(self.player.rating3_value)), 'min_deviation': min(abs(self.player.rating1 - self.player.rating1_value), abs(self.player.rating2 - self.player.rating2_value), abs(self.player.rating3 - self.player.rating3_value)), } def before_next_page(self): self.player.timestamp_rating = time.time() form_model = 'player' form_fields = ["rating_join_player", "rating_join_mask", "rating_join_value"] class abs3_Lottery1_1(Page): def vars_for_template(self): return self.player.vars_for_template() def before_next_page(self): self.player.timestamp_lottery1 = time.time() form_model = 'player' form_fields = ['lottery1_1'] class abs3_Lottery1_2(Page): def vars_for_template(self): return self.player.vars_for_template() def before_next_page(self): self.player.timestamp_lottery2 = time.time() form_model = 'player' form_fields = ['lottery1_2', "lottery1_player", "lottery1_mask", "lottery1_value"] class abs3_Lottery1_3(Page): def vars_for_template(self): return self.player.vars_for_template() def before_next_page(self): self.player.timestamp_lottery3 = time.time() def is_displayed(self): return self.player.lottery1_1 != 1 form_model = 'player' form_fields = ['lottery1_3', "lottery1_player", "lottery1_mask", "lottery1_value"] class abs3_Lottery1_4(Page): def vars_for_template(self): return self.player.vars_for_template() def before_next_page(self): self.player.timestamp_lottery4 = time.time() def is_displayed(self): return self.player.lottery1_1 != 1 and self.player.lottery1_2 != 1 form_model = 'player' form_fields = ['lottery1_4', "lottery1_player", "lottery1_mask", "lottery1_value"] class abs3_Lottery1_5(Page): def vars_for_template(self): return self.player.vars_for_template() def before_next_page(self): self.player.timestamp_lottery5 = time.time() def is_displayed(self): return self.player.lottery1_1 != 1 and self.player.lottery1_2 != 1 and self.player.lottery1_3 != 1 form_model = 'player' form_fields = ['lottery1_5', "lottery1_player", "lottery1_mask", "lottery1_value"] class Endowment(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' class Start(Page): form_model = 'player' def before_next_page(self): self.player.timestamp_start = time.time() class End(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' class End2(Page): def vars_for_template(self): return self.player.vars_for_template() def before_next_page(self): self.player.timestamp_end = time.time() form_model = 'player' form_fields = ['worker_id'] class Rating1(Page): def vars_for_template(self): return self.player.vars_for_template() def before_next_page(self): self.player.timestamp_rating1 = time.time() form_model = 'player' form_fields = ['rating1'] class Rating2(Page): def vars_for_template(self): return self.player.vars_for_template() def before_next_page(self): self.player.timestamp_rating2 = time.time() form_model = 'player' form_fields = ['rating2'] class Rating3(Page): def vars_for_template(self): return self.player.vars_for_template() def before_next_page(self): self.player.timestamp_rating3 = time.time() form_model = 'player' form_fields = ['rating3'] class Multiple_choice_expl(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' class abs2_Five_scarce_expl(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' class abs1_Pair_expl(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' class Risk_expl(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' class Risk1(Page): def vars_for_template(self): return self.player.vars_for_template() def before_next_page(self): self.player.timestamp_risk1 = time.time() form_model = 'player' form_fields = ['risk1'] class Risk2(Page): def vars_for_template(self): return self.player.vars_for_template() def before_next_page(self): self.player.timestamp_risk2 = time.time() form_model = 'player' form_fields = ['risk2'] class Risk1_after(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' form_fields = ['risk1_player', 'risk1_mask', 'risk1_value'] class Risk2_after(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' form_fields = ['risk2_player', 'risk2_mask', 'risk2_value'] def before_next_page(self): self.player.timestamp_risk = time.time() class abs3_Lottery1_expl(Page): def vars_for_template(self): return self.player.vars_for_template() def before_next_page(self): self.player.timestamp_lottery = time.time() form_model = 'player' class Demographics(Page): def vars_for_template(self): return self.player.vars_for_template() form_model = 'player' form_fields = ['age', 'sex', 'education', "nationality", "party", "zip", 'interest_football', 'interest_games', 'interest_sportschau', "contact", "contact2", "jobs", 'comments'] start_pages = [Start, Endowment, Rating1, Rating2, Rating3, Rating_end ] end_pages = [Risk_expl, Risk1, Risk1_after, Risk2, Risk2_after, Demographics, End, End2, End3 ] initial_page_sequence = [ abs1_Pair_expl, abs1_Pairs, abs1_Pairs2, abs2_Five_scarce_expl, abs2_Five_scarce, abs2_Five_scarce2, abs3_Lottery1_expl, abs3_Lottery1_1, abs3_Lottery1_2, abs3_Lottery1_3, abs3_Lottery1_4, abs3_Lottery1_5 ] page_sequence = [ ] class MyPage(Page): def inner_dispatch(self): page_seq = int(self.__class__.__name__.split('_')[1]) page_to_show = json.loads(self.player.page_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