from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'uo_experiment' players_per_group = None num_rounds = 1 instruction1_template = 'uo_experiment/_instruction1.html' instruction2_template = 'uo_experiment/_instruction2.html' class Subsession(BaseSubsession): def creating_session(self): import random # randomize likelihood of disclosure # 50%: '5%' # 50%: '0 -10%' for player in self.get_players(): player.wahrscheinlichkeit = random.choice(['5%', '0 - 10%']) # print('set player.wahrscheinlichkeit to', player.wahrscheinlichkeit) # randomize disclosure (not beautiful but it works) # 5%: True (data disclosure) # 95%: False (no data disclosure) for player in self.get_players(): player.preisgabe = random.choice([True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]) # print('set player.preisgabe to', player.preisgabe) class Group(BaseGroup): pass class Player(BasePlayer): # contact informations vorname = models.StringField() nachname = models.StringField() straße = models.StringField() hausnummer = models.IntegerField(min=0, max=1000) plz = models.IntegerField(min=10000, max=99999) stadt = models.StringField() # disclosure wahrscheinlichkeit = models.StringField() preisgabe = models.BooleanField() # demographic data alter = models.IntegerField(min=16, max=99) geschlecht = models.IntegerField( choices=[ [0, 'weiblich'], [1, 'männlich'], [2, 'anderes'], ] ) beruf = models.StringField() gehalt = models.StringField( choices=[ [0, 'weniger als 10.000 Euro jährlich'], [1, 'zwischen 10.000 und 19.999 Euro jährlich'], [2, 'zwischen 20.000 und 29.999 Euro jährlich'], [3, 'zwischen 30.000 und 39.999 Euro jährlich'], [4, 'zwischen 40.000 und 49.999 Euro jährlich'], [5, 'zwischen 50.000 und 59.999 Euro jährlich'], [6, 'zwischen 60.000 und 69.999 Euro jährlich'], [7, 'zwischen 70.000 und 79.999 Euro jährlich'], [8, 'zwischen 80.000 und 89.999 Euro jährlich'], [9, 'zwischen 90.000 und 99.999 Euro jährlich'], [10, 'mehr als 99.999 Euro jährlich'] ] ) # indirect self-other-comparison (%- and likert-scale) # self-estimation preisgabe_selbst = models.IntegerField(min=0, max=100, label="Wie schätzen Sie die Wahrscheinlichkeit eines Angriffs auf ihre Daten ein (% zwischen 0 und 100)") bedenken_selbst = models.IntegerField(widget=widgets.RadioSelect, choices=[1,2,3,4,5,6,7]) fähigkeiten_selbst = models.IntegerField(widget=widgets.RadioSelect, choices=[1,2,3,4,5,6,7]) # other-estimation preisgabe_andere = models.IntegerField(min=0, max=100, label="Test") bedenken_andere = models.IntegerField(widget=widgets.RadioSelect, choices=[1,2,3,4,5,6,7]) fähigkeiten_andere = models.IntegerField(widget=widgets.RadioSelect, choices=[1,2,3,4,5,6,7]) # example for likert scale # offer_1 = models.IntegerField(widget=widgets.RadioSelect, choices=[1,2,3])