from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import itertools import random author = 'Elisa Macchi' doc = """ This is an app to produce individuals descriptions. """ class Constants(BaseConstants): name_in_url = 'description' players_per_group = 3 num_rounds = 1 showupfee = 1 bonus = 1 raterbonus = 2 cost = 1 instructions_template = 'description/Instructions.html' # Portraits: img_f = ['1_fat.jpg'] img_o = ['1_original.jpg', '2_original.jpg'] img_t = ['2_thin.jpg'] treatments = ['original', 'thin', 'fat'] signals = ['poor', 'rich'] class Subsession(BaseSubsession): def creating_session(self): ts = Constants.treatments.copy() random.shuffle(ts) cycle_ts = itertools.cycle(ts) ss = Constants.signals.copy() random.shuffle(ss) cycle_ss = itertools.cycle(ss) for p in self.get_players(): p.participant.vars['treatment'] = next(cycle_ts) p.participant.vars['signal'] = next(cycle_ss) for p in self.get_players(): p.treatment = next(cycle_ts) p.participant.vars['treatment'] = p.treatment p.signal = next(cycle_ss) p.participant.vars['signal'] = p.signal if p.treatment == "fat": imgs = itertools.cycle(Constants.img_f) p.participant.vars['images'] = next(imgs) p.image_url = next(imgs) if p.treatment == "original": imgs = itertools.cycle(Constants.img_o) p.participant.vars['images'] = next(imgs) p.image_url = next(imgs) if p.treatment == "thin": imgs = itertools.cycle(Constants.img_t) p.participant.vars['images'] = next(imgs) p.image_url = next(imgs) class Group(BaseGroup): pass class Player(BasePlayer): # Player Treatment image_url = models.StringField() treatment = models.StringField() signal = models.StringField() # Description Characteristics: age = models.IntegerField(min=13, max=125) gender = models.StringField( choices=['Male', 'Female'], widget=widgets.RadioSelect) personality = models.StringField() education = models.StringField() bodymass = models.StringField( widget=widgets.RadioSelectHorizontal, choices=['XS', 'S','M','L','XL','XXL']) # Description choices: change = models.StringField( choices=['Yes', 'No'], widget=widgets.RadioSelect) include = models.BooleanField()