from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import json class MyPage1(Page): form_model = 'player' form_fields = ['row_1'] timeout_seconds = 30 class MyPage2(Page): form_model = 'player' form_fields = ['row_2'] timeout_seconds = 30 class MyPage3(Page): form_model = 'player' form_fields = ['row_3'] timeout_seconds = 30 class MyPage4(Page): form_model = 'player' form_fields = ['row_4'] timeout_seconds = 30 class MyPage5(Page): form_model = 'player' form_fields = ['row_5'] timeout_seconds = 30 class MyPage6(Page): form_model = 'player' form_fields = ['row_6'] timeout_seconds = 30 class MyPage7(Page): form_model = 'player' form_fields = ['row_7'] timeout_seconds = 30 class Intro(Page): pass class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): pass class Results(Page): pass class Decision(Page): form_model = 'player' form_fields = ['dec_1', 'dec_2', 'dec_3'] def error_message(self, values): print('values is', values) if values["dec_1"] + values["dec_2"] + values["dec_3"] != 7: return 'Die Summe muss 7 ergeben' intro_page_sequence = [ Intro ] dec_page_sequence = [ Decision, Results ] no_page_sequence = [ MyPage1, MyPage2, MyPage3, MyPage4, MyPage5, MyPage6, MyPage7, ] 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(no_page_sequence): NewClassName = "Page_{}".format(i) A = type(NewClassName, (MyPage,), {}) locals()[NewClassName] = A page_sequence.append(locals()[NewClassName]) page_sequence = intro_page_sequence + page_sequence + dec_page_sequence class Results(Page): def vars_for_template(self): return { 'row_1': self.player.row_1, 'row_2': self.player.row_2, 'rows_right': 1 if self.player.row_1 == 23 or self.player.row_2 == 2 else 2 if self.player.row_1 == 23 and self.player.row_2==2 else 0, 'rows_payoff': 0.50 if self.player.row_1 == 23 or self.player.row_2 == 2 else 1 if self.player.row_1 == 23 and self.player.row_2 == 2 else 0 } def before_next_page(self): self.participant.vars['row_1'] = self.player.row_1 self.participant.vars['row_2'] = self.player.row_2