from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import json author = 'Laura Haller' doc = """ """ class Constants(BaseConstants): name_in_url = 'quiz' players_per_group = None num_rounds = 12 articles= [] with open('quiz/articles.json') as json_file: data = json.load(json_file) for article in data['articles']: articles.append(article) class Subsession(BaseSubsession): def creating_session(self): import itertools if self.round_number == 1: change_group = itertools.cycle(['group1', 'group2', 'group3', 'group4']) for p in self.get_players(): p.participant.vars['groups'] = next(change_group) if((p.participant.vars['groups']=='group1') | (p.participant.vars['groups']=='group3')): p.participant.vars['articles_left'] = 4 p.participant.vars['end'] = 0 if((p.participant.vars['groups']=='group2') | (p.participant.vars['groups']=='group4')): p.participant.vars['articles_left'] = 2 p.participant.vars['end'] = 0 if((p.participant.vars['groups']=='group3') | (p.participant.vars['groups']=='group4')): p.participant.vars['num_articles'] = p.participant.vars['articles_left'] self.session.vars['articles'] = Constants.articles.copy() for p in self.get_players(): article_data = p.current_article_1() p.category = article_data['category'] p.short_title = article_data['short_title'] p.title = article_data['title'] p.subtitle = article_data['subtitle'] p.picture = article_data['picture'] p.subtitle_picture = article_data['subtitle_picture'] p.text = article_data['text'] class Group(BaseGroup): pass def make_field(label, count): choices=[] for x in range(0, count): choices.append([x, ""]) return models.IntegerField( label=label, widget=widgets.RadioSelect, choices = choices ) class Player(BasePlayer): interesse = make_field('', 11) zahlen = make_field('', 11) category = models.StringField() short_title = models.StringField() title = models.StringField() subtitle = models.StringField() picture = models.StringField() subtitle_picture = models.StringField() text = models.StringField() buttons_clicked = models.IntegerField(initial = 0) like_button = models.IntegerField(initial = 0) go_to_end = models.StringField() def current_article_1(self): return self.session.vars['articles'][self.round_number-1] def current_article(self): number_clicked = self.in_round(self.round_number).buttons_clicked return self.session.vars['articles'][number_clicked-1]