from otree.api import * from .comprehension_questions import * from shared import helpers from shared.reward_group import RewardGroup import random import time from shared.helpers import NOCPARTNER_FEE, NOCPARTNER_URL doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = "intro2" PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 NUM_TASKS = helpers.NUM_ROUNDS MIN_ON_CHAT = helpers.MIN_ON_CHAT TIME_FOR_PART = "y" NUM_ATTEMPTS = 2 ERR_MSG = "Not all questions were answered correctly. Please try again." COMPREHENSION_DROPOUT_MSG = ( f"it took you more than {NUM_ATTEMPTS} attempts to answer the comprehension questions correctly" ) class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): # Info models name = models.StringField() profile_picture = models.StringField() reward_group = models.StringField() # Comprehension question models question1 = models.StringField(blank=True) question2 = models.StringField(blank=True) question4 = models.StringField(blank=True) question3 = models.StringField(blank=True) attempts = models.IntegerField(initial=0) # PAGES class InitialDetails(Page): @staticmethod def vars_for_template(player: Player): helpers.set_info([player], set_reward=False) return dict() class Instructions(Page): form_model = "player" form_fields = ["question1", "question3", "question4", "question2"] @staticmethod def vars_for_template(player: Player): return dict( multiple_choice_questions=multiple_choice_questions, opp_reward_group=str(player.participant.reward_group.get_opposite()), ) @staticmethod def error_message(player: Player, values): solutions = dict( question1='Your Matched Worker', question2='True', question3=str(player.participant.reward_group.get_opposite()), question4='Your Conversation Partner' ) error_messages = dict() for field_name in solutions: if values[field_name] != solutions[field_name]: error_messages[field_name] = 'You gave the wrong answer to the question above, please try again' player.attempts += 1 return error_messages class Result(Page): pass class Instructions2(Page): @staticmethod def vars_for_template(player: Player): return dict(task_name=helpers.get_task_name(player)) @staticmethod def before_next_page(player: Player, timeout_happened): # Set the target reward group of communication partner for Matching in app after player.participant.reward_group_comm_partner = random.choice([RewardGroup.HIGH, RewardGroup.LOW]) # Set WaitPage arrival player.participant.wait_page_arrival = time.time() page_sequence = [InitialDetails, Instructions, Result, Instructions2]