from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) #from .fields import OtherModelField import random #random.init() import itertools import json treat_op = ( (0, 'control'), (1, 'public'), (2, 'consumption'), ) subtreat_op = ( (0, 'control'), (1, 'transfer'), (2, 'outside'), ) class Constants(BaseConstants): name_in_url = "BE_spite" players_per_group = 2 tasks = ['1', '2', '3', '4'] num_rounds = len(tasks) new_template = "BE_spite/new.html" ''' for group in self.get_groups(): group.treatment = random.choice([0, 1, 2]) #0, 1, 2 print('set group.treatment to', group.treatment) for group in self.get_groups(): group.version = random.choice(['EPC', 'EPH', 'EA']) print('set group.version to', group.version)''' class Subsession(BaseSubsession): def creating_session(self): for player in self.get_players(): slider_initial = random.randint(0, 50) player.slider_initial = slider_initial player.slider = slider_initial type = itertools.cycle(['EA']) #, 'EA', 'EA', 'EPC', 'EPC', 'EPC', 'EPH', 'EPH', 'EPH' for g in self.get_groups(): g.type = next(type) treatment = itertools.cycle([0, 2]) for g in self.get_groups(): g.treatment = next(treatment) subtreatment = itertools.cycle([0, 0]) for g in self.get_groups(): g.subtreatment = next(subtreatment) if self.round_number == 1: for p in self.get_players(): round_numbers = list(range(1, Constants.num_rounds + 1)) random.shuffle(round_numbers) p.participant.vars['task_rounds'] = dict(zip(Constants.tasks, round_numbers)) class Group(BaseGroup): def random_num(): return random.randint(0, 10) treatment = models.IntegerField() subtreatment = models.IntegerField() type = models.StringField() #################### PUNISHMENT EXPERIMENT #################### riceplate_practice = models.IntegerField( label="", choices=[ [0, 'The bad plate - খারাপ বাটি'], [1, 'The good plate - ভাল বাটি'], ], ) be01 = models.IntegerField( label="", choices=[ [0, 'The bad plate - খারাপ বাটি'], [1, 'The good plate - ভাল বাটি'], ], ) be02 = models.IntegerField( label="", choices=[ [0, "No sound - শব্দ শুনতে চাই না"], [1, "Sound - শব্দ শুনতে চাই "], ], ) be03 = models.IntegerField( label="", choices=[ [0, "Blue - নীল "], [1, "Red - লাল"], ], ) slider_practice = models.IntegerField( label="", min=0, max=40, widget=widgets.Slider(attrs={'step': '1'}, show_value=False), default=random_num, ) ################################################################### be03_w = models.IntegerField( label="", choices=[ [0, 'No'], [1, 'Yes'], ] ) ###### ROLE OF SPITE ######### sound_spite = models.IntegerField( label="", min=0, max=40, widget=widgets.Slider(attrs={'step': '1'}, show_value=False), default=random_num, ) money_spite = models.IntegerField( label="", min=0, max=50, widget=widgets.Slider(attrs={'step': '5'}), default=random_num, ) class Player(BasePlayer): slider_initial = models.IntegerField() slider = models.IntegerField( label="", min=0, max=50, widget=widgets.Slider(attrs={'step': '1'}), ) def random_num(): return random.randint(0, 10) be01a_man = models.IntegerField( label="", min=0, max=40, widget=widgets.Slider(attrs={'step': '1'}, show_value=False), default=random_num, ) be01b_man = models.IntegerField( label="", min=0, max=100, widget=widgets.Slider(attrs={'step': '5'}), default=random_num, ) be02a_man = models.IntegerField( label="", min=0, max=40, widget=widgets.Slider(attrs={'step': '1'}, show_value=False), default=random_num, ) be02b_man = models.IntegerField( label="", min=0, max=100, widget=widgets.Slider(attrs={'step': '5'}), default=random_num, ) HHID = models.IntegerField( label="Household ID", min=0, max=100, ) person_id = models.IntegerField( label="Person ID", min=0, max=100, ) def role(self): # write your code here return {1: "A", 2: "B"}[self.id_in_group] enumerator_ID = models.StringField( label="Name of enumerator?", choices=[ "Sakib", "Dilshad", "Anne", "Hasib", ], ) practice = models.IntegerField( label="Is this a real game?", choices=[ [1, "Yes"], [0, "No"], ], ) be01a_stored = models.IntegerField() be01b_stored = models.IntegerField() be02a_stored = models.IntegerField() be02b_stored = models.IntegerField() be01a_stored_m = models.IntegerField() be01b_stored_m = models.IntegerField() be02a_stored_m = models.IntegerField() be02b_stored_m = models.IntegerField() def guess_be01a_man(self): self.participant.vars['be01a_man_st'] = self.be01a_man print('Slider is', self.participant.vars['be01a_man_st'], 'if she keeps good plate') def guess_be01b_man(self): self.participant.vars['be01b_man_st'] = self.be01b_man print('Slider is', self.participant.vars['be01b_man_st'], 'for money if she keeps the good plate') # print(self.be01b_man) def guess_be02a_CAZZO_man(self): self.participant.vars['be02a_man_st'] = self.be02a_man print('Slider is', self.participant.vars['be02a_man_st'], 'for sound if she keeps the bad plate') # print(self.be02a_man) def guess_be02b_man(self): self.participant.vars['be02b_man_st'] = self.be02b_man print('Slider is', self.participant.vars['be02b_man_st'], 'for money if she keeps tha bad plate') def other_player(self): return self.get_others_in_group()[0] def vars_for_template(self): if self.group.subtreatment != 1 and self.id_in_group == 1: # What I am doing: set the model field value and return that model field in dict() # I've done it for this and the next condition. self.be01a_stored = self.other_player().participant.vars['be01a_man_st'] self.be02a_stored = self.other_player().participant.vars['be02a_man_st'] return dict( be01a_stored=self.be01a_stored, be02a_stored=self.be02a_stored, ) elif self.group.subtreatment == 1 and self.id_in_group == 1: self.be01a_stored = self.other_player().participant.vars['be01a_man_st'] self.be01b_stored = self.other_player().participant.vars['be01b_man_st'] self.be02a_stored = self.other_player().participant.vars['be02a_man_st'] self.be02b_stored = self.other_player().participant.vars['be02b_man_st'] return dict( be01a_stored=self.be01a_stored, be01b_stored=self.be01b_stored, be02a_stored=self.be02a_stored, be02b_stored=self.be02b_stored, ) elif self.group.subtreatment != 1 and self.id_in_group == 2: self.be01a_stored_m = self.participant.vars['be01a_man_st'] self.be02a_stored_m = self.participant.vars['be02a_man_st'] return dict( be01a_stored_m=self.be01a_stored_m, be02a_stored_m=self.be02a_stored_m, ) elif self.group.subtreatment == 1 and self.id_in_group == 2: self.be01a_stored_m = self.participant.vars['be01a_man_st'] self.be02a_stored_m = self.participant.vars['be02a_man_st'] self.be01b_stored_m = self.participant.vars['be01b_man_st'] self.be02b_stored_m = self.participant.vars['be02b_man_st'] return dict( be01a_stored_m=self.be01a_stored_m, be01b_stored_m=self.be01b_stored_m, be02a_stored_m=self.be02a_stored_m, be02b_stored_m=self.be02b_stored_m, )