from otree.api import * class C(BaseConstants): NAME_IN_URL = 'instructions' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): session = subsession.session session.treat = session.config['treat'] for player in subsession.get_players(): player.participant.progress = 0 if session.treat in {3, 4}: player.num_pages = 8 elif session.treat in {1, 2}: player.num_pages = 7 class Group(BaseGroup): pass class Player(BasePlayer): num_pages = models.IntegerField(initial=5) id_number = models.StringField(label="Prolific ID") # ------------------------------------------------------------------------------------------- # # PAGES # # ------------------------------------------------------------------------------------------- # class Welcome(Page): form_model = 'player' form_fields = ['id_number'] class Introduction(Page): @staticmethod def vars_for_template(player): return dict(page=1) @staticmethod def before_next_page(player, timeout_happened): player.participant.progress = 1 print(player.session.config['treat']) print(player.session.treat) class TheGame(Page): @staticmethod def vars_for_template(player): return dict(page=2) class Stage1(Page): @staticmethod def vars_for_template(player): return dict(page=3) class Stage2B(Page): @staticmethod def vars_for_template(player): return dict(page=4) class Stage2A(Page): @staticmethod def vars_for_template(player): return dict(page=5) @staticmethod def before_next_page(player, timeout_happened): player.participant.progress = 2 class Stage3Manip(Page): @staticmethod def is_displayed(player): return player.session.treat == 3 @staticmethod def vars_for_template(player): return dict(page=6) class Stage3Choice(Page): @staticmethod def is_displayed(player): return player.session.treat == 4 @staticmethod def vars_for_template(player): return dict(page=6) class Results(Page): @staticmethod def vars_for_template(player): if player.session.treat in {3, 4}: page = 7 else: page = 6 return dict(page=page) @staticmethod def before_next_page(player, timeout_happened): player.participant.progress = 3 class Earnings(Page): @staticmethod def vars_for_template(player): if player.session.treat in {3, 4}: page = 8 else: page = 7 return dict(page=page) # ------------------------------------------------------------------------------------------- # # SEQUENCE # # ------------------------------------------------------------------------------------------- # page_sequence = [ Welcome, Introduction, TheGame, Stage1, Stage2B, Stage2A, Stage3Manip, Stage3Choice, Results, Earnings ]