from otree.api import * from constants import * doc = """Endowment History Revelation and Oneness Questions for Gen2""" class C(BaseConstants): NAME_IN_URL = 'G_Endowment_History_Gen12_D' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): Ana_generation = models.IntegerField() Ana_own_id = models.IntegerField() Ana_family_assignment = models.StringField() Ana_Oneness1 = models.StringField(choices=['A', 'B', 'C', 'D', 'E', 'F', 'G'], widget=widgets.RadioSelectHorizontal, label='') Ana_Oneness2 = models.StringField(choices=['A', 'B', 'C', 'D', 'E', 'F', 'G'], widget=widgets.RadioSelectHorizontal, label='') Ana_Oneness3 = models.StringField(choices=['A', 'B', 'C', 'D', 'E', 'F', 'G'], widget=widgets.RadioSelectHorizontal, label='') Ana_Att1 = models.IntegerField(label="", choices=[(1, 'most'), (2, 'least')], blank=True) Ana_Att1_attempts = models.IntegerField(initial=0) Ana_RankingType = models.IntegerField() class Q_oneness0(Page): @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 2 and player.participant.vars.get('state') == "active") class Q_oneness1(Page): form_model = 'player' form_fields = ['Ana_Oneness1'] @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 2 and player.participant.vars.get('state') == "active") class Q_oneness2(Page): form_model = 'player' form_fields = ['Ana_Oneness2'] @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 2 and player.participant.vars.get('state') == "active") class Q_oneness3(Page): form_model = 'player' form_fields = ['Ana_Oneness3'] @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 2 and player.participant.vars.get('state') == "active") class WaitForinfoRevl2(WaitPage): wait_for_all_groups = True @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 2 and player.participant.vars.get('state') == "active") class GennFamily0_G2(Page): @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 2 and player.participant.vars.get('state') == "active") @staticmethod def vars_for_template(player): players_in_gen1 = [p for p in player.subsession.get_players() if p.participant.vars.get('Ana_generation') == 1 and p.participant.vars.get('state') == "active"] num_players = len(players_in_gen1) return { 'player_ids': [player.participant.vars.get('Ana_Mmb1_id'), player.participant.vars.get('Ana_Mmb2_id'), player.participant.vars.get('Ana_Mmb3_id')], 'display_order': [1, 2, 3], 'Ana_generation': player.participant.Ana_generation, 'Ana_own_id': player.participant.Ana_own_id, 'Ana_family_assignment': player.participant.vars.get('Ana_family_assignment'), 'round_number': player.round_number, 'player_numbers': range(1, num_players + 1), 'MyOrder': player.participant.vars.get('my_order'), } class GennFamily1_G2(Page): @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 2 and player.participant.vars.get('state') == "active") @staticmethod def vars_for_template(player): players_in_gen1 = [p for p in player.subsession.get_players() if p.participant.vars.get('Ana_generation') == 1 and p.participant.vars.get('state') == "active"] num_players = len(players_in_gen1) return { 'player_ids': [player.participant.vars.get('Ana_Mmb1_id'), player.participant.vars.get('Ana_Mmb2_id'), player.participant.vars.get('Ana_Mmb3_id')], 'display_order': [1, 2, 3], 'Ana_generation': player.participant.Ana_generation, 'Ana_own_id': player.participant.Ana_own_id, 'Ana_family_assignment': player.participant.vars.get('Ana_family_assignment'), 'round_number': player.round_number, 'player_numbers': range(1, num_players + 1), 'MyOrder': player.participant.vars.get('my_order'), } class GennFamily2_G2_p1(Page): timeout_seconds = TIME_TO_SHOWBUTTON @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 2 and player.participant.vars.get('state') == "active") @staticmethod def vars_for_template(player): return { 'player_ids': [player.participant.vars.get('Ana_Mmb1_id'), player.participant.vars.get('Ana_Mmb2_id'), player.participant.vars.get('Ana_Mmb3_id')], 'display_order': [1, 2, 3], 'Ana_generation': player.participant.Ana_generation, 'Ana_own_id': player.participant.Ana_own_id, 'Ana_family_assignment': player.participant.vars.get('Ana_family_assignment'), 'round_number': player.round_number, 'MyOrder': player.participant.vars.get('my_order'), 'Ana_EndowmentReason': player.participant.vars.get('Ana_EndowmentReason'), 'Ana_RankingType': player.participant.vars.get('Ana_RankingType'), } class GennFamily2_G2_p1_withbtn(Page): form_model = 'player' form_fields = ['Ana_Att1', 'Ana_Att1_attempts'] @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 2 and player.participant.vars.get('state') == "active") @staticmethod def vars_for_template(player): return { 'player_ids': [player.participant.vars.get('Ana_Mmb1_id'), player.participant.vars.get('Ana_Mmb2_id'), player.participant.vars.get('Ana_Mmb3_id')], 'display_order': [1, 2, 3], 'Ana_generation': player.participant.Ana_generation, 'Ana_own_id': player.participant.Ana_own_id, 'Ana_family_assignment': player.participant.vars.get('Ana_family_assignment'), 'round_number': player.round_number, 'MyOrder': player.participant.vars.get('my_order'), 'Ana_EndowmentReason': player.participant.vars.get('Ana_EndowmentReason'), 'Ana_RankingType': player.participant.vars.get('Ana_RankingType'), } class GennFamily2_G2_p2(Page): timeout_seconds = TIME_TO_SHOWBUTTON @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 2 and player.participant.vars.get('state') == "active") @staticmethod def vars_for_template(player): return { 'player_ids': [player.participant.vars.get('Ana_Mmb1_id'), player.participant.vars.get('Ana_Mmb2_id'), player.participant.vars.get('Ana_Mmb3_id')], 'display_order': [1, 2, 3], 'Ana_generation': player.participant.Ana_generation, 'Ana_own_id': player.participant.Ana_own_id, 'Ana_family_assignment': player.participant.vars.get('Ana_family_assignment'), 'round_number': player.round_number, 'MyOrder': player.participant.vars.get('my_order'), 'Ana_EndowmentReason': player.participant.vars.get('Ana_EndowmentReason'), 'Ana_RankingType': player.participant.vars.get('Ana_RankingType'), } class GennFamily2_G2_p2_withbtn(Page): @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 2 and player.participant.vars.get('state') == "active") @staticmethod def vars_for_template(player): return { 'player_ids': [player.participant.vars.get('Ana_Mmb1_id'), player.participant.vars.get('Ana_Mmb2_id'), player.participant.vars.get('Ana_Mmb3_id')], 'display_order': [1, 2, 3], 'Ana_generation': player.participant.Ana_generation, 'Ana_own_id': player.participant.Ana_own_id, 'Ana_family_assignment': player.participant.vars.get('Ana_family_assignment'), 'round_number': player.round_number, 'MyOrder': player.participant.vars.get('my_order'), 'Ana_EndowmentReason': player.participant.vars.get('Ana_EndowmentReason'), 'Ana_RankingType': player.participant.vars.get('Ana_RankingType'), } page_sequence = [ Q_oneness0, Q_oneness1, Q_oneness2, Q_oneness3, WaitForinfoRevl2, GennFamily0_G2, GennFamily1_G2, GennFamily2_G2_p1, GennFamily2_G2_p1_withbtn, GennFamily2_G2_p2, GennFamily2_G2_p2_withbtn, ]