from ._builtin import Page, WaitPage from .models import Constants import random class Wait(Page): timeout_seconds = 1 def before_next_page(self): if self.round_number == 1: randomized_statements = random.sample(Constants.statements, len(Constants.statements)) self.player.participant.vars['randomized_statements'] = randomized_statements self.player.participant.vars['submitted_answers'] = [0] * 20 self.player.participant.vars['submitted_importances'] = [0] * 20 statement_data = self.player.current_statement() self.player.statement_id = int(statement_data['id']) self.player.statement = statement_data['statement'] class Statement(Page): form_model = 'player' form_fields = ['submitted_answer', 'submitted_importance'] def before_next_page(self): self.player.participant.vars['submitted_answers'][self.player.statement_id - 1] = self.player.submitted_answer self.player.participant.vars['submitted_importances'][self.player.statement_id - 1] = \ 10 - self.player.submitted_importance class End(Page): def is_displayed(self): return self.round_number == Constants.num_rounds def before_next_page(self): if self.round_number == Constants.num_rounds: self.player.participant.vars['shuffled_statements'] = \ [x for _, x in sorted(zip(self.player.participant.vars['submitted_importances'], list(range(1, 21))))] class FinalWaitPage(WaitPage): def is_displayed(self): return self.round_number == Constants.num_rounds def after_all_players_arrive(self): if self.round_number == Constants.num_rounds: self.subsession.perform_matching() page_sequence = [ Wait, Statement, End, FinalWaitPage ]