from otree.api import * from common_modules import functions class Constants(BaseConstants): name_in_url = 'crt' players_per_group = None num_rounds = 1 def creating_session(subsession): # Initializing parameters in subsessions: if subsession.round_number == 1: # Initializing or updating "message" of each participant for player in subsession.get_players(): # We must check that message is a key in participant.vars functions.initialize_var_as_dict(player.participant.vars, 'message', 'crt') class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): crt_bat = models.IntegerField( label=''' Un bate y una pelota de beisbol cuestan 22 euros en total. El bate cuesta 20 euros más que la pelota. ¿Cuántos euros cuesta la pelota?''', blank = True ) crt_widget = models.IntegerField( label=''' Si 5 personas necesitan 5 minutos para fabricar 5 platos, ¿cuánto tardarán 100 personas en fabricar 100 platos? ''', blank = True ) crt_lake = models.IntegerField( label=''' Imagina un lago con nenúfares. Cada día la formación de nenúfares crece el doble en su tamaño. Si el lago se acabará llenando de nenúfares en 48 días, ¿cuánto tardarán los nenúfares en cubrir la mitad de la superficie del lago? ''', blank = True ) def custom_export(players): # header row yield ['session', 'participant_code', 'id_in_group', 'crt1', 'crt2', 'crt3'] for p in players: participant = p.participant session = p.session yield [session.code, participant.code, p.id_in_group, p.crt_bat, p.crt_widget, p.crt_lake] # FUNCTIONS # PAGES class CognitiveReflectionTest(Page): form_model = 'player' form_fields = ['crt_bat', 'crt_widget', 'crt_lake'] @staticmethod def error_message(player, values): player.participant.message['crt']['answers'] = values @staticmethod def get_timeout_seconds(player): return player.session.config['crt_timeout'] page_sequence = [CognitiveReflectionTest]