from otree.api import * from audiotest import Constants as AudiotestConstants from audiotest import nr_correct_words doc = """ This app contains the delayed memory task. """ class Constants(BaseConstants): name_in_url = "audiotestdelay" players_per_group = None num_rounds = 1 words = AudiotestConstants.words class Group(BaseGroup): pass class Subsession(BaseSubsession): pass class Player(BasePlayer): a1 = models.StringField(blank=True, label=1) a2 = models.StringField(blank=True, label=2) a3 = models.StringField(blank=True, label=3) a4 = models.StringField(blank=True, label=4) a5 = models.StringField(blank=True, label=5) a6 = models.StringField(blank=True, label=6) a7 = models.StringField(blank=True, label=7) a8 = models.StringField(blank=True, label=8) a9 = models.StringField(blank=True, label=9) a10 = models.StringField(blank=True, label=10) num_words = models.IntegerField() class Answers(Page): form_model = "player" form_fields = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10"] timeout_seconds = 600 @staticmethod def before_next_page(player: Player, timeout_happened): if timeout_happened: player.participant.timeout = True player.num_words = nr_correct_words(player) participant = player.participant participant.num_correct_words_delay = player.num_words @staticmethod def vars_for_template(player: Player): return {"audio_points": player.session.config["audio_points"]} @staticmethod def app_after_this_page(player: Player, upcoming_apps): participant = player.participant if participant.timeout: return "kick" if participant.order == 2: return "end" page_sequence = [Answers]