import time from asyncio import wait_for from ._builtin import Page, WaitPage from .models import Constants, get_fields class WaitPgg(WaitPage): def is_displayed(self): return self.round_number == 1 def after_all_players_arrive(self): pass class WaitContribute(WaitPage): def after_all_players_arrive(self): self.group.set_endowment() print('@@@WaitPage1 set endowment') class Contribute(Page): form_model = 'player' form_fields = ['contribution'] def before_next_page(self): self.player.calculate_proportion() def vars_for_template(self): if self.player.round_number > 1: prev_player1 = self.player.in_round(self.player.round_number - 1) prev_group1 = self.group.in_round(self.group.round_number - 1) else: prev_player1 = None prev_group1 = None return dict( prev_player=prev_player1, prev_group=prev_group1, treatment=self.session.vars['treatment'], ) class WaitScore(WaitPage): pass # def after_all_players_arrive(self): # self.group.set_payoff() class Score_show_baseline(Page): def is_displayed(self): return self.subsession.treatment == 1 # @staticmethod def vars_for_template(self): return dict( treatment=self.session.vars['treatment'], other_players=self.player.get_others_in_group(), ) class Score(Page): form_model = 'player' # get_form_fields = [score_fields, belief_score_fields, belief_score_belief_fields] get_form_fields = get_fields def is_displayed(self): return self.subsession.treatment != 1 # return self.subsession.treatment == 2 or self.subsession.treatment == 3 or self.subsession.treatment == 4 # @staticmethod def vars_for_template(self): return dict( treatment=self.session.vars['treatment'], other_players=self.player.get_others_in_group(), ) class WaitScoreResult(WaitPage): def is_displayed(self): return self.subsession.treatment != 1 # return self.subsession.treatment == 2 or self.subsession.treatment == 3 or self.subsession.treatment == 4 def after_all_players_arrive(self): self.group.set_group_account() self.group.set_score() for player in self.group.get_players(): player.set_AIScore() self.group.set_AIscore_diff() self.group.set_rate() class WaitResult(WaitPage): def after_all_players_arrive(self): self.group.set_payoff() class Score_result(Page): def is_displayed(self): return self.subsession.treatment != 1 # @staticmethod def vars_for_template(self): return dict( treatment=self.session.vars['treatment'], other_players=self.player.get_others_in_group(), ) class Result(Page): def vars_for_template(self): return dict( treatment=self.session.vars['treatment'], ) class WaitPayoffResult(WaitPage): def is_displayed(self): return self.round_number == Constants.num_rounds # wait_for_all_groups = True def after_all_players_arrive(self): self.group.set_random12() self.group.set_random345() for player in self.subsession.get_players(): player.trans() class Payoff(Page): def is_displayed(self): return self.round_number == Constants.num_rounds def vars_for_template(self): token_per_RMB1 = Constants.token_per_RMB experiment_earnings1 = int(self.player.total_payoff) / token_per_RMB1 return dict( random1=self.participant.vars['random1_trans'], random2=self.participant.vars['random2_trans'], random1_payoff=self.participant.vars['random1_payoff_trans'], random2_payoff=self.participant.vars['random2_payoff_trans'], belief_payoff=self.participant.vars['belief_payoff_trans'], belief_num=self.participant.vars['belief_num_trans'], token_per_RMB=token_per_RMB1, experiment_earnings=experiment_earnings1 ) page_sequence = [ WaitPgg, WaitContribute, Contribute, WaitScore, Score_show_baseline, Score, WaitScoreResult, WaitResult, Score_result, Result, WaitPayoffResult, # Payoff, ]