from ._builtin import Page, WaitPage import time class start(Page): def is_displayed(self): return self.round_number == 1 def before_next_page(self): self.participant.vars['expiry_timestamp'] = time.time() + self.player.task_timer class Task_trial(Page): form_model = 'player' form_fields = ['effort'] timer_text = 'Time left to complete as many matrices as possible:' def effort_choices(self): return self.player.letters_list def get_timeout_seconds(self): return self.participant.vars['expiry_timestamp'] - time.time() def is_displayed(self): return self.participant.vars['expiry_timestamp'] - time.time() > 0 def before_next_page(self): if self.player.effort is not None: self.player.count_effort() self.player.check_correctness() if self.player.round_number == 1: self.player.total_correct = self.player.correct elif self.player.round_number > 1: self.player.total_correct = self.player.in_round( self.round_number - 1).total_correct + self.player.in_round(self.round_number).correct class ResultsWaitPage(WaitPage): pass class Results(Page): def is_displayed(self): return self.participant.vars['expiry_timestamp'] - time.time() < 0 def vars_for_template(self): table_rows = [] for prev_player in self.player.in_all_rounds(): row = { 'round_number': prev_player.round_number, 'd_crossed': round(prev_player.d_crossed), 'b_crossed': round(prev_player.b_crossed), 'is_correct': round(prev_player.is_correct), } table_rows.append(row) self.participant.vars['t1_results'] = table_rows return { 'table_rows': table_rows, 'total_payoff': self.player.total_correct, } page_sequence = [start, Task_trial, Results ]