from otree.api import Currency as c, currency_range, safe_json from ._builtin import Page, WaitPage from .models import Constants, Player import numpy as np from ballotexperiment.data_cleaning import * from ballotexperiment.data import * from ballotexperiment.templates.ballotexperiment.ballot_groups import random_number, weighted_random_number import json from psycopg2.extensions import register_adapter, AsIs def addapt_numpy_float64(numpy_float64): return AsIs(numpy_float64) def addapt_numpy_int64(numpy_int64): return AsIs(numpy_int64) def addapt_numpy_float32(numpy_float32): return AsIs(numpy_float32) def addapt_numpy_int32(numpy_int32): return AsIs(numpy_int32) def addapt_numpy_array(numpy_array): return AsIs(tuple(numpy_array)) register_adapter(np.float64, addapt_numpy_float64) register_adapter(np.int64, addapt_numpy_int64) register_adapter(np.float32, addapt_numpy_float32) register_adapter(np.int32, addapt_numpy_int32) register_adapter(np.ndarray, addapt_numpy_array) # ##################### ## WELCOME PAGE AND PREPARATION## ##################### class Welcome(Page): form_model = Player form_fields = [] class preparation(Page): def before_next_page(self): while self.player.federalstate == str(self.player.random_federalstate_r2): self.player.flag_federalstate = True self.player.random_federalstate_r2 = random_number(1, 17) if self.player.federalstate == '9': # bavaria dummy variable self.player.bavaria_dummy = 1 if self.player.eligible_to_vote == 0: self.player.participate_vote = -777 # add screenout variable if this is a screenout if self.player.federalstate == '-888': # weights are based on the quotas in the quota.xlsx states = [x for x in range(1,17)] weights = [0.0349, 0.0221, 0.0957, 0.0082, 0.2155000000000001, 0.0751, 0.0493, 0.1323, 0.1570, 0.0122, 0.0437, 0.0306, 0.0198, 0.0497, 0.0275, 0.0264] self.player.federalstate = str(weighted_random_number(states,1, weights)[0]) #filtering filtering(self) if self.player.quota == 1: self.player.flag = 1 form_model = Player form_fields = ["time_preparation", "gender", "age", "eligible_to_vote", "participate_vote", "federalstate","bavaria_dummy","flag"] ##################### ## BALLOTEXPERIMENT## ##################### ########### ##ROUND 1## ########### class ballot_preparation_round1(Page): # def is_displayed(self): # return self.player.screenout == 0 and self.player.quota == 0 def vars_for_template(self): return {"eligible_to_vote": safe_json(self.player.eligible_to_vote), "screenout": safe_json(self.player.screenout), "quota": safe_json(self.player.quota), "participant_label": safe_json(self.participant.label)} form_model = Player form_fields = ["time_ballot_preparation_round1"] ###################### ##ROUND 1 - GROUPS 1## ###################### class groups1_round1_A_ErstStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 1 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "randlastname_CDU_r1": safe_json(self.player.randlastname_CDU_r1), "randfirstname_CDU_r1": safe_json(self.player.randfirstname_CDU_r1), "randlastname_SPD_r1": safe_json(self.player.randlastname_SPD_r1), "randfirstname_SPD_r1": safe_json(self.player.randfirstname_SPD_r1), "randlastname_FDP_r1": safe_json(self.player.randlastname_FDP_r1), "randfirstname_FDP_r1": safe_json(self.player.randfirstname_FDP_r1), "randlastname_GRUENE_r1": safe_json(self.player.randlastname_GRUENE_r1), "randfirstname_GRUENE_r1": safe_json(self.player.randfirstname_GRUENE_r1), "randlastname_AFD_r1": safe_json(self.player.randlastname_AFD_r1), "randfirstname_AFD_r1": safe_json(self.player.randfirstname_AFD_r1), "randlastname_LINKE_r1": safe_json(self.player.randlastname_LINKE_r1), "randfirstname_LINKE_r1": safe_json(self.player.randfirstname_LINKE_r1), "incumbent_CDU_r1": safe_json(self.player.incumbent_CDU_r1), "incumbent_SPD_r1": safe_json(self.player.incumbent_SPD_r1), "incumbent_GRUENE_r1": safe_json(self.player.incumbent_GRUENE_r1), "incumbent_FDP_r1": safe_json(self.player.incumbent_FDP_r1), "incumbent_AFD_r1": safe_json(self.player.incumbent_AFD_r1), "incumbent_LINKE_r1": safe_json(self.player.incumbent_LINKE_r1), "randdr_CDU_r1": safe_json(self.player.randdr_CDU_r1), "randdr_SPD_r1": safe_json(self.player.randdr_SPD_r1), "randdr_FDP_r1" :safe_json(self.player.randdr_FDP_r1), "randdr_AFD_r1": safe_json(self.player.randdr_AFD_r1), "randdr_GRUENE_r1": safe_json(self.player.randdr_GRUENE_r1), "randdr_LINKE_r1": safe_json(self.player.randdr_LINKE_r1) } def js_vars(self): return dict( federalstate = self.player.federalstate #import federalstate to JavaScript ) #@overriding def before_next_page(self): #remove #TODO: Try exception error einbauen self.player.candname_CDU_r1 = self.player.candname_CDU_r1.replace("", "") self.player.candname_CDU_r1 = self.player.candname_CDU_r1.replace("", "") self.player.candname_SPD_r1 = self.player.candname_SPD_r1.replace("", "") self.player.candname_SPD_r1 = self.player.candname_SPD_r1.replace("", "") self.player.candname_GRUENE_r1 = self.player.candname_GRUENE_r1.replace("", "") self.player.candname_GRUENE_r1 = self.player.candname_GRUENE_r1.replace("", "") self.player.candname_LINKE_r1 = self.player.candname_LINKE_r1.replace("", "") self.player.candname_LINKE_r1 = self.player.candname_LINKE_r1.replace("", "") self.player.candname_FDP_r1 = self.player.candname_FDP_r1.replace("", "") self.player.candname_FDP_r1 = self.player.candname_FDP_r1.replace("", "") self.player.candname_AFD_r1 = self.player.candname_AFD_r1.replace("", "") self.player.candname_AFD_r1 = self.player.candname_AFD_r1.replace("", "") #positioncCandidate try: federalstate_positions = federalstate_positions_data self.player.candidate_r1 = state_deployer(federalstate_positions, self.player.candidate_r1_pos, self.player.federalstate) except: pass form_model = Player form_fields = ["time_ballot_group1_round1_Erststimme", "time_checked_ballot_group1_round1_Erststimme", "candidate_r1_pos", "candname_CDU_r1", "candname_SPD_r1", "candname_GRUENE_r1", "candname_AFD_r1", "candname_LINKE_r1", "candname_FDP_r1", "incumbent_r1"] class groups1_round1_B_ZweitStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 1 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "random_list_CDU_r1": safe_json(self.player.random_list_CDU_r1), "random_list_SPD_r1": safe_json(self.player.random_list_SPD_r1), "random_list_GRUENE_r1": safe_json(self.player.random_list_GRUENE_r1), "random_list_FDP_r1": safe_json(self.player.random_list_FDP_r1), "random_list_AFD_r1": safe_json(self.player.random_list_AFD_r1), "random_list_LINKE_r1": safe_json(self.player.random_list_LINKE_r1) } def js_vars(self): return dict( federalstate = self.player.federalstate #import federalstate to JavaScript ) def before_next_page(self): #positionParty try: federalstate_positions = federalstate_positions_data self.player.party_r1 = state_deployer(federalstate_positions, self.player.party_r1_pos, self.player.federalstate) except: pass form_model = Player form_fields = ["time_ballot_group1_round1_ZweitStimme", "time_checked_ballot_group1_round1_ZweitStimme", "party_r1_pos"] ###################### ##ROUND 1 - GROUPS 2## ###################### class groups2_round1_A_ZweitStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 2 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "random_list_CDU_r1": safe_json(self.player.random_list_CDU_r1), "random_list_SPD_r1": safe_json(self.player.random_list_SPD_r1), "random_list_GRUENE_r1": safe_json(self.player.random_list_GRUENE_r1), "random_list_FDP_r1": safe_json(self.player.random_list_FDP_r1), "random_list_AFD_r1": safe_json(self.player.random_list_AFD_r1), "random_list_LINKE_r1": safe_json(self.player.random_list_LINKE_r1) } def js_vars(self): return dict( federalstate=self.player.federalstate # import federalstate to JavaScript ) def before_next_page(self): #positionParty try: federalstate_positions = federalstate_positions_data self.player.party_r1 = state_deployer(federalstate_positions, self.player.party_r1_pos, self.player.federalstate) except: pass form_model = Player form_fields = ["time_ballot_group2_round1_ZweitStimme", "time_checked_ballot_group2_round1_ZweitStimme", "party_r1_pos"] class groups2_round1_B_ErstStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 2 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "randlastname_CDU_r1": safe_json(self.player.randlastname_CDU_r1), "randfirstname_CDU_r1": safe_json(self.player.randfirstname_CDU_r1), "randlastname_SPD_r1": safe_json(self.player.randlastname_SPD_r1), "randfirstname_SPD_r1": safe_json(self.player.randfirstname_SPD_r1), "randlastname_FDP_r1": safe_json(self.player.randlastname_FDP_r1), "randfirstname_FDP_r1": safe_json(self.player.randfirstname_FDP_r1), "randlastname_GRUENE_r1": safe_json(self.player.randlastname_GRUENE_r1), "randfirstname_GRUENE_r1": safe_json(self.player.randfirstname_GRUENE_r1), "randlastname_AFD_r1": safe_json(self.player.randlastname_AFD_r1), "randfirstname_AFD_r1": safe_json(self.player.randfirstname_AFD_r1), "randlastname_LINKE_r1": safe_json(self.player.randlastname_LINKE_r1), "randfirstname_LINKE_r1": safe_json(self.player.randfirstname_LINKE_r1), "incumbent_CDU_r1": safe_json(self.player.incumbent_CDU_r1), "incumbent_SPD_r1": safe_json(self.player.incumbent_SPD_r1), "incumbent_GRUENE_r1": safe_json(self.player.incumbent_GRUENE_r1), "incumbent_FDP_r1": safe_json(self.player.incumbent_FDP_r1), "incumbent_AFD_r1": safe_json(self.player.incumbent_AFD_r1), "incumbent_LINKE_r1": safe_json(self.player.incumbent_LINKE_r1), "randdr_CDU_r1": safe_json(self.player.randdr_CDU_r1), "randdr_SPD_r1": safe_json(self.player.randdr_SPD_r1), "randdr_FDP_r1": safe_json(self.player.randdr_FDP_r1), "randdr_AFD_r1": safe_json(self.player.randdr_AFD_r1), "randdr_GRUENE_r1": safe_json(self.player.randdr_GRUENE_r1), "randdr_LINKE_r1": safe_json(self.player.randdr_LINKE_r1) } def js_vars(self): return dict( federalstate=self.player.federalstate # import federalstate to JavaScript ) def before_next_page(self): # remove self.player.candname_CDU_r1 = self.player.candname_CDU_r1.replace("", "") self.player.candname_CDU_r1 = self.player.candname_CDU_r1.replace("", "") self.player.candname_SPD_r1 = self.player.candname_SPD_r1.replace("", "") self.player.candname_SPD_r1 = self.player.candname_SPD_r1.replace("", "") self.player.candname_GRUENE_r1 = self.player.candname_GRUENE_r1.replace("", "") self.player.candname_GRUENE_r1 = self.player.candname_GRUENE_r1.replace("", "") self.player.candname_LINKE_r1 = self.player.candname_LINKE_r1.replace("", "") self.player.candname_LINKE_r1 = self.player.candname_LINKE_r1.replace("", "") self.player.candname_FDP_r1 = self.player.candname_FDP_r1.replace("", "") self.player.candname_FDP_r1 = self.player.candname_FDP_r1.replace("", "") self.player.candname_AFD_r1 = self.player.candname_AFD_r1.replace("", "") self.player.candname_AFD_r1 = self.player.candname_AFD_r1.replace("", "") try: federalstate_positions = federalstate_positions_data self.player.candidate_r1 = state_deployer(federalstate_positions, self.player.candidate_r1_pos, self.player.federalstate) except: pass form_model = Player form_fields = ["time_ballot_group2_round1_Erststimme", "time_checked_ballot_group2_round1_Erststimme","candidate_r1_pos", "candname_CDU_r1", "candname_SPD_r1", "candname_GRUENE_r1", "candname_AFD_r1", "candname_LINKE_r1", "candname_FDP_r1", "incumbent_r1"] ###################### ##ROUND 1 - GROUPS 3## ###################### class groups3_round1_ErstZweitStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 3 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "random_list_CDU_r1": safe_json(self.player.random_list_CDU_r1), "random_list_SPD_r1": safe_json(self.player.random_list_SPD_r1), "random_list_GRUENE_r1": safe_json(self.player.random_list_GRUENE_r1), "random_list_FDP_r1": safe_json(self.player.random_list_FDP_r1), "random_list_AFD_r1": safe_json(self.player.random_list_AFD_r1), "random_list_LINKE_r1": safe_json(self.player.random_list_LINKE_r1), "randlastname_CDU_r1": safe_json(self.player.randlastname_CDU_r1), "randfirstname_CDU_r1": safe_json(self.player.randfirstname_CDU_r1), "randlastname_SPD_r1": safe_json(self.player.randlastname_SPD_r1), "randfirstname_SPD_r1": safe_json(self.player.randfirstname_SPD_r1), "randlastname_FDP_r1": safe_json(self.player.randlastname_FDP_r1), "randfirstname_FDP_r1": safe_json(self.player.randfirstname_FDP_r1), "randlastname_GRUENE_r1": safe_json(self.player.randlastname_GRUENE_r1), "randfirstname_GRUENE_r1": safe_json(self.player.randfirstname_GRUENE_r1), "randlastname_AFD_r1": safe_json(self.player.randlastname_AFD_r1), "randfirstname_AFD_r1": safe_json(self.player.randfirstname_AFD_r1), "randlastname_LINKE_r1": safe_json(self.player.randlastname_LINKE_r1), "randfirstname_LINKE_r1": safe_json(self.player.randfirstname_LINKE_r1), "incumbent_CDU_r1": safe_json(self.player.incumbent_CDU_r1), "incumbent_SPD_r1": safe_json(self.player.incumbent_SPD_r1), "incumbent_GRUENE_r1": safe_json(self.player.incumbent_GRUENE_r1), "incumbent_FDP_r1": safe_json(self.player.incumbent_FDP_r1), "incumbent_AFD_r1": safe_json(self.player.incumbent_AFD_r1), "incumbent_LINKE_r1": safe_json(self.player.incumbent_LINKE_r1), "randdr_CDU_r1": safe_json(self.player.randdr_CDU_r1), "randdr_SPD_r1": safe_json(self.player.randdr_SPD_r1), "randdr_FDP_r1": safe_json(self.player.randdr_FDP_r1), "randdr_AFD_r1": safe_json(self.player.randdr_AFD_r1), "randdr_GRUENE_r1": safe_json(self.player.randdr_GRUENE_r1), "randdr_LINKE_r1": safe_json(self.player.randdr_LINKE_r1) } def js_vars(self): return dict( federalstate = self.player.federalstate #import federalstate to JavaScript ) def before_next_page(self): # remove self.player.candname_CDU_r1 = self.player.candname_CDU_r1.replace("", "") self.player.candname_CDU_r1 = self.player.candname_CDU_r1.replace("", "") self.player.candname_SPD_r1 = self.player.candname_SPD_r1.replace("", "") self.player.candname_SPD_r1 = self.player.candname_SPD_r1.replace("", "") self.player.candname_GRUENE_r1 = self.player.candname_GRUENE_r1.replace("", "") self.player.candname_GRUENE_r1 = self.player.candname_GRUENE_r1.replace("", "") self.player.candname_LINKE_r1 = self.player.candname_LINKE_r1.replace("", "") self.player.candname_LINKE_r1 = self.player.candname_LINKE_r1.replace("", "") self.player.candname_FDP_r1 = self.player.candname_FDP_r1.replace("", "") self.player.candname_FDP_r1 = self.player.candname_FDP_r1.replace("", "") self.player.candname_AFD_r1 = self.player.candname_AFD_r1.replace("", "") self.player.candname_AFD_r1 = self.player.candname_AFD_r1.replace("", "") # position variable try: federalstate_positions = federalstate_positions_data self.player.candidate_r1 = state_deployer(federalstate_positions, self.player.candidate_r1_pos, self.player.federalstate) self.player.party_r1 = state_deployer(federalstate_positions, self.player.party_r1_pos, self.player.federalstate) except: pass form_model = Player form_fields = ["time_ballot_group3_round1_ErstZweitStimme", "time_checked_ballot_group3_round1_ErstZweitStimme", "party_r1_pos", "candidate_r1_pos", "candname_CDU_r1", "candname_SPD_r1", "candname_GRUENE_r1", "candname_AFD_r1", "candname_LINKE_r1", "candname_FDP_r1", "incumbent_r1"] ########### ##ROUND 2## ########### class ballot_preparation_round2(Page): def vars_for_template(self): return {"eligible_to_vote": self.player.eligible_to_vote} form_model = Player form_fields = ["time_ballot_preparation_round2"] ###################### ##ROUND 2 - GROUPS 1## ###################### class groups1_round2_A_ErstStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 1 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "bavaria_dummy": self.player.bavaria_dummy, "randlastname_CDU_r2": safe_json(self.player.randlastname_CDU_r2), "randfirstname_CDU_r2": safe_json(self.player.randfirstname_CDU_r2), "randlastname_SPD_r2": safe_json(self.player.randlastname_SPD_r2), "randfirstname_SPD_r2": safe_json(self.player.randfirstname_SPD_r2), "randlastname_FDP_r2": safe_json(self.player.randlastname_FDP_r2), "randfirstname_FDP_r2": safe_json(self.player.randfirstname_FDP_r2), "randlastname_GRUENE_r2": safe_json(self.player.randlastname_GRUENE_r2), "randfirstname_GRUENE_r2": safe_json(self.player.randfirstname_GRUENE_r2), "randlastname_AFD_r2": safe_json(self.player.randlastname_AFD_r2), "randfirstname_AFD_r2": safe_json(self.player.randfirstname_AFD_r2), "randlastname_LINKE_r2": safe_json(self.player.randlastname_LINKE_r2), "randfirstname_LINKE_r2": safe_json(self.player.randfirstname_LINKE_r2), "incumbent_CDU_r2": safe_json(self.player.incumbent_CDU_r2), "incumbent_SPD_r2": safe_json(self.player.incumbent_SPD_r2), "incumbent_GRUENE_r2": safe_json(self.player.incumbent_GRUENE_r2), "incumbent_FDP_r2": safe_json(self.player.incumbent_FDP_r2), "incumbent_AFD_r2": safe_json(self.player.incumbent_AFD_r2), "incumbent_LINKE_r2": safe_json(self.player.incumbent_LINKE_r2), "random_federalstate_r2": safe_json(self.player.random_federalstate_r2), "randdr_CDU_r2": safe_json(self.player.randdr_CDU_r2), "randdr_SPD_r2": safe_json(self.player.randdr_SPD_r2), "randdr_FDP_r2": safe_json(self.player.randdr_FDP_r2), "randdr_AFD_r2": safe_json(self.player.randdr_AFD_r2), "randdr_GRUENE_r2": safe_json(self.player.randdr_GRUENE_r2), "randdr_LINKE_r2": safe_json(self.player.randdr_LINKE_r2) } def before_next_page(self): # remove self.player.candname_CDU_r2 = self.player.candname_CDU_r2.replace("", "") self.player.candname_CDU_r2 = self.player.candname_CDU_r2.replace("", "") self.player.candname_SPD_r2 = self.player.candname_SPD_r2.replace("", "") self.player.candname_SPD_r2 = self.player.candname_SPD_r2.replace("", "") self.player.candname_GRUENE_r2 = self.player.candname_GRUENE_r2.replace("", "") self.player.candname_GRUENE_r2 = self.player.candname_GRUENE_r2.replace("", "") self.player.candname_LINKE_r2 = self.player.candname_LINKE_r2.replace("", "") self.player.candname_LINKE_r2 = self.player.candname_LINKE_r2.replace("", "") self.player.candname_FDP_r2 = self.player.candname_FDP_r2.replace("", "") self.player.candname_FDP_r2 = self.player.candname_FDP_r2.replace("", "") self.player.candname_AFD_r2 = self.player.candname_AFD_r2.replace("", "") self.player.candname_AFD_r2 = self.player.candname_AFD_r2.replace("", "") # position variable try: federalstate_positions = federalstate_positions_data self.player.candidate_r2 = state_deployer(federalstate_positions, self.player.candidate_r2_pos, str(self.player.random_federalstate_r2)) except: pass form_model = Player form_fields = ["time_ballot_group1_round2_Erststimme", "time_checked_ballot_group1_round2_Erststimme", "candidate_r2_pos", "candname_CDU_r2", "candname_SPD_r2", "candname_GRUENE_r2", "candname_AFD_r2", "candname_LINKE_r2", "candname_FDP_r2", "incumbent_r2"] class groups1_round2_B_ZweitStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 1 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "bavaria_dummy" : self.player.bavaria_dummy, "random_list_CDU_r2": safe_json(self.player.random_list_CDU_r2), "random_list_SPD_r2": safe_json(self.player.random_list_SPD_r2), "random_list_GRUENE_r2": safe_json(self.player.random_list_GRUENE_r2), "random_list_FDP_r2": safe_json(self.player.random_list_FDP_r2), "random_list_AFD_r2": safe_json(self.player.random_list_AFD_r2), "random_list_LINKE_r2": safe_json(self.player.random_list_LINKE_r2), "random_federalstate_r2": safe_json(self.player.random_federalstate_r2) } def before_next_page(self): try: federalstate_positions = federalstate_positions_data self.player.party_r2 = state_deployer(federalstate_positions, self.player.party_r2_pos, str(self.player.random_federalstate_r2)) except: pass form_model = Player form_fields = ["time_ballot_group1_round2_ZweitStimme", "time_checked_ballot_group1_round2_ZweitStimme", "party_r2_pos"] ###################### ##ROUND 2 - GROUPS 2## ###################### class groups2_round2_A_ZweitStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 2 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "bavaria_dummy" : self.player.bavaria_dummy, "random_list_CDU_r2": safe_json(self.player.random_list_CDU_r2), "random_list_SPD_r2": safe_json(self.player.random_list_SPD_r2), "random_list_GRUENE_r2": safe_json(self.player.random_list_GRUENE_r2), "random_list_FDP_r2": safe_json(self.player.random_list_FDP_r2), "random_list_AFD_r2": safe_json(self.player.random_list_AFD_r2), "random_list_LINKE_r2": safe_json(self.player.random_list_LINKE_r2), "random_federalstate_r2": safe_json(self.player.random_federalstate_r2) } def before_next_page(self): try: federalstate_positions = federalstate_positions_data self.player.party_r2 = state_deployer(federalstate_positions, self.player.party_r2_pos, str(self.player.random_federalstate_r2)) except: pass form_model = Player form_fields = ["time_ballot_group2_round2_ZweitStimme", "time_checked_ballot_group2_round2_ZweitStimme", "party_r2_pos"] class groups2_round2_B_ErstStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 2 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "bavaria_dummy" : self.player.bavaria_dummy, "randlastname_CDU_r2": safe_json(self.player.randlastname_CDU_r2), "randfirstname_CDU_r2": safe_json(self.player.randfirstname_CDU_r2), "randlastname_SPD_r2": safe_json(self.player.randlastname_SPD_r2), "randfirstname_SPD_r2": safe_json(self.player.randfirstname_SPD_r2), "randlastname_FDP_r2": safe_json(self.player.randlastname_FDP_r2), "randfirstname_FDP_r2": safe_json(self.player.randfirstname_FDP_r2), "randlastname_GRUENE_r2": safe_json(self.player.randlastname_GRUENE_r2), "randfirstname_GRUENE_r2": safe_json(self.player.randfirstname_GRUENE_r2), "randlastname_AFD_r2": safe_json(self.player.randlastname_AFD_r2), "randfirstname_AFD_r2": safe_json(self.player.randfirstname_AFD_r2), "randlastname_LINKE_r2": safe_json(self.player.randlastname_LINKE_r2), "randfirstname_LINKE_r2": safe_json(self.player.randfirstname_LINKE_r2), "incumbent_CDU_r2": safe_json(self.player.incumbent_CDU_r2), "incumbent_SPD_r2": safe_json(self.player.incumbent_SPD_r2), "incumbent_GRUENE_r2": safe_json(self.player.incumbent_GRUENE_r2), "incumbent_FDP_r2": safe_json(self.player.incumbent_FDP_r2), "incumbent_AFD_r2": safe_json(self.player.incumbent_AFD_r2), "incumbent_LINKE_r2": safe_json(self.player.incumbent_LINKE_r2), "random_federalstate_r2": safe_json(self.player.random_federalstate_r2), "randdr_CDU_r2": safe_json(self.player.randdr_CDU_r2), "randdr_SPD_r2": safe_json(self.player.randdr_SPD_r2), "randdr_FDP_r2": safe_json(self.player.randdr_FDP_r2), "randdr_AFD_r2": safe_json(self.player.randdr_AFD_r2), "randdr_GRUENE_r2": safe_json(self.player.randdr_GRUENE_r2), "randdr_LINKE_r2": safe_json(self.player.randdr_LINKE_r2) } def before_next_page(self): # remove self.player.candname_CDU_r2 = self.player.candname_CDU_r2.replace("", "") self.player.candname_CDU_r2 = self.player.candname_CDU_r2.replace("", "") self.player.candname_SPD_r2 = self.player.candname_SPD_r2.replace("", "") self.player.candname_SPD_r2 = self.player.candname_SPD_r2.replace("", "") self.player.candname_GRUENE_r2 = self.player.candname_GRUENE_r2.replace("", "") self.player.candname_GRUENE_r2 = self.player.candname_GRUENE_r2.replace("", "") self.player.candname_LINKE_r2 = self.player.candname_LINKE_r2.replace("", "") self.player.candname_LINKE_r2 = self.player.candname_LINKE_r2.replace("", "") self.player.candname_FDP_r2 = self.player.candname_FDP_r2.replace("", "") self.player.candname_FDP_r2 = self.player.candname_FDP_r2.replace("", "") self.player.candname_AFD_r2 = self.player.candname_AFD_r2.replace("", "") self.player.candname_AFD_r2 = self.player.candname_AFD_r2.replace("", "") # position variable try: federalstate_positions = federalstate_positions_data self.player.candidate_r2 = state_deployer(federalstate_positions, self.player.candidate_r2_pos, str(self.player.random_federalstate_r2)) except: pass form_model = Player form_fields = ["time_ballot_group2_round2_Erststimme", "time_checked_ballot_group2_round2_Erststimme", "candidate_r2_pos", "candname_CDU_r2", "candname_SPD_r2", "candname_GRUENE_r2", "candname_AFD_r2", "candname_LINKE_r2", "candname_FDP_r2", "incumbent_r2"] ###################### ##ROUND 2 - GROUPS 3## ###################### class groups3_round2_ErstZweitStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 3 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "bavaria_dummy": self.player.bavaria_dummy, "random_list_CDU_r2": safe_json(self.player.random_list_CDU_r2), "random_list_SPD_r2": safe_json(self.player.random_list_SPD_r2), "random_list_GRUENE_r2": safe_json(self.player.random_list_GRUENE_r2), "random_list_FDP_r2": safe_json(self.player.random_list_FDP_r2), "random_list_AFD_r2": safe_json(self.player.random_list_AFD_r2), "random_list_LINKE_r2": safe_json(self.player.random_list_LINKE_r2), "randlastname_CDU_r2": safe_json(self.player.randlastname_CDU_r2), "randfirstname_CDU_r2": safe_json(self.player.randfirstname_CDU_r2), "randlastname_SPD_r2": safe_json(self.player.randlastname_SPD_r2), "randfirstname_SPD_r2": safe_json(self.player.randfirstname_SPD_r2), "randlastname_FDP_r2": safe_json(self.player.randlastname_FDP_r2), "randfirstname_FDP_r2": safe_json(self.player.randfirstname_FDP_r2), "randlastname_GRUENE_r2": safe_json(self.player.randlastname_GRUENE_r2), "randfirstname_GRUENE_r2": safe_json(self.player.randfirstname_GRUENE_r2), "randlastname_AFD_r2": safe_json(self.player.randlastname_AFD_r2), "randfirstname_AFD_r2": safe_json(self.player.randfirstname_AFD_r2), "randlastname_LINKE_r2": safe_json(self.player.randlastname_LINKE_r2), "randfirstname_LINKE_r2": safe_json(self.player.randfirstname_LINKE_r2), "incumbent_CDU_r2": safe_json(self.player.incumbent_CDU_r2), "incumbent_SPD_r2": safe_json(self.player.incumbent_SPD_r2), "incumbent_GRUENE_r2": safe_json(self.player.incumbent_GRUENE_r2), "incumbent_FDP_r2": safe_json(self.player.incumbent_FDP_r2), "incumbent_AFD_r2": safe_json(self.player.incumbent_AFD_r2), "incumbent_LINKE_r2": safe_json(self.player.incumbent_LINKE_r2), "random_federalstate_r2": safe_json(self.player.random_federalstate_r2), "randdr_CDU_r2": safe_json(self.player.randdr_CDU_r2), "randdr_SPD_r2": safe_json(self.player.randdr_SPD_r2), "randdr_FDP_r2": safe_json(self.player.randdr_FDP_r2), "randdr_AFD_r2": safe_json(self.player.randdr_AFD_r2), "randdr_GRUENE_r2": safe_json(self.player.randdr_GRUENE_r2), "randdr_LINKE_r2": safe_json(self.player.randdr_LINKE_r2) } def before_next_page(self): # remove self.player.candname_CDU_r2 = self.player.candname_CDU_r2.replace("", "") self.player.candname_CDU_r2 = self.player.candname_CDU_r2.replace("", "") self.player.candname_SPD_r2 = self.player.candname_SPD_r2.replace("", "") self.player.candname_SPD_r2 = self.player.candname_SPD_r2.replace("", "") self.player.candname_GRUENE_r2 = self.player.candname_GRUENE_r2.replace("", "") self.player.candname_GRUENE_r2 = self.player.candname_GRUENE_r2.replace("", "") self.player.candname_LINKE_r2 = self.player.candname_LINKE_r2.replace("", "") self.player.candname_LINKE_r2 = self.player.candname_LINKE_r2.replace("", "") self.player.candname_FDP_r2 = self.player.candname_FDP_r2.replace("", "") self.player.candname_FDP_r2 = self.player.candname_FDP_r2.replace("", "") self.player.candname_AFD_r2 = self.player.candname_AFD_r2.replace("", "") self.player.candname_AFD_r2 = self.player.candname_AFD_r2.replace("", "") try: federalstate_positions = federalstate_positions_data self.player.candidate_r2 = state_deployer(federalstate_positions, self.player.candidate_r2_pos, str(self.player.random_federalstate_r2)) self.player.party_r2 = state_deployer(federalstate_positions, self.player.party_r2_pos, str(self.player.random_federalstate_r2)) except: pass form_model = Player form_fields = ["time_ballot_group3_round2_ErstZweitStimme", "time_checked_ballot_group3_round2_ErstZweitStimme", "party_r2_pos", "candidate_r2_pos", "candname_CDU_r2", "candname_SPD_r2", "candname_GRUENE_r2", "candname_AFD_r2", "candname_LINKE_r2", "candname_FDP_r2", "incumbent_r2"] ########### ##ROUND 3## ########### class ballot_preparation_round3(Page): def vars_for_template(self): return {"eligible_to_vote": self.player.eligible_to_vote} form_model = Player form_fields = ["time_ballot_preparation_round3"] ###################### ##ROUND 3 - GROUPS 1## ###################### class groups1_round3_A_ErstStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 1 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "bavaria_dummy": self.player.bavaria_dummy, "randlastname_CDU_r3": safe_json(self.player.randlastname_CDU_r3), "randfirstname_CDU_r3": safe_json(self.player.randfirstname_CDU_r3), "randlastname_SPD_r3": safe_json(self.player.randlastname_SPD_r3), "randfirstname_SPD_r3": safe_json(self.player.randfirstname_SPD_r3), "randlastname_FDP_r3": safe_json(self.player.randlastname_FDP_r3), "randfirstname_FDP_r3": safe_json(self.player.randfirstname_FDP_r3), "randlastname_GRUENE_r3": safe_json(self.player.randlastname_GRUENE_r3), "randfirstname_GRUENE_r3": safe_json(self.player.randfirstname_GRUENE_r3), "randlastname_AFD_r3": safe_json(self.player.randlastname_AFD_r3), "randfirstname_AFD_r3": safe_json(self.player.randfirstname_AFD_r3), "randlastname_LINKE_r3": safe_json(self.player.randlastname_LINKE_r3), "randfirstname_LINKE_r3": safe_json(self.player.randfirstname_LINKE_r3), "incumbent_CDU_r3": safe_json(self.player.incumbent_CDU_r3), "incumbent_SPD_r3": safe_json(self.player.incumbent_SPD_r3), "incumbent_GRUENE_r3": safe_json(self.player.incumbent_GRUENE_r3), "incumbent_FDP_r3": safe_json(self.player.incumbent_FDP_r3), "incumbent_AFD_r3": safe_json(self.player.incumbent_AFD_r3), "incumbent_LINKE_r3": safe_json(self.player.incumbent_LINKE_r3), "random_federalstate_r2": safe_json(self.player.random_federalstate_r2), "randdr_CDU_r3": safe_json(self.player.randdr_CDU_r3), "randdr_SPD_r3": safe_json(self.player.randdr_SPD_r3), "randdr_FDP_r3": safe_json(self.player.randdr_FDP_r3), "randdr_AFD_r3": safe_json(self.player.randdr_AFD_r3), "randdr_GRUENE_r3": safe_json(self.player.randdr_GRUENE_r3), "randdr_LINKE_r3": safe_json(self.player.randdr_LINKE_r3) } def before_next_page(self): # remove self.player.candname_CDU_r3 = self.player.candname_CDU_r3.replace("", "") self.player.candname_CDU_r3 = self.player.candname_CDU_r3.replace("", "") self.player.candname_SPD_r3 = self.player.candname_SPD_r3.replace("", "") self.player.candname_SPD_r3 = self.player.candname_SPD_r3.replace("", "") self.player.candname_GRUENE_r3 = self.player.candname_GRUENE_r3.replace("", "") self.player.candname_GRUENE_r3 = self.player.candname_GRUENE_r3.replace("", "") self.player.candname_LINKE_r3 = self.player.candname_LINKE_r3.replace("", "") self.player.candname_LINKE_r3 = self.player.candname_LINKE_r3.replace("", "") self.player.candname_FDP_r3 = self.player.candname_FDP_r3.replace("", "") self.player.candname_FDP_r3 = self.player.candname_FDP_r3.replace("", "") self.player.candname_AFD_r3 = self.player.candname_AFD_r3.replace("", "") self.player.candname_AFD_r3 = self.player.candname_AFD_r3.replace("", "") try: federalstate_positions = federalstate_positions_data self.player.candidate_r3 = state_deployer(federalstate_positions, self.player.candidate_r3_pos, str(self.player.random_federalstate_r2)) except: pass form_model = Player form_fields = ["time_ballot_group1_round3_Erststimme", "time_checked_ballot_group1_round3_Erststimme", "candidate_r3_pos", "candname_CDU_r3", "candname_SPD_r3", "candname_GRUENE_r3", "candname_AFD_r3", "candname_LINKE_r3", "candname_FDP_r3", "incumbent_r3"] class groups1_round3_B_ZweitStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 1 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "bavaria_dummy": self.player.bavaria_dummy, "random_list_CDU_r3": safe_json(self.player.random_list_CDU_r3), "random_list_SPD_r3": safe_json(self.player.random_list_SPD_r3), "random_list_GRUENE_r3": safe_json(self.player.random_list_GRUENE_r3), "random_list_FDP_r3": safe_json(self.player.random_list_FDP_r3), "random_list_AFD_r3": safe_json(self.player.random_list_AFD_r3), "random_list_LINKE_r3": safe_json(self.player.random_list_LINKE_r3) } def js_vars(self): return dict( federalstate = self.player.federalstate #import federalstate to JavaScript ) def before_next_page(self): try: federalstate_positions = federalstate_positions_data self.player.party_r3 = state_deployer(federalstate_positions, self.player.party_r3_pos, self.player.federalstate) except: pass form_model = Player form_fields = ["time_ballot_group1_round3_ZweitStimme", "time_checked_ballot_group1_round3_ZweitStimme", "party_r3_pos"] ###################### ##ROUND 3 - GROUPS 2## ###################### class groups2_round3_A_ZweitStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 2 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "bavaria_dummy": self.player.bavaria_dummy, "random_list_CDU_r3": safe_json(self.player.random_list_CDU_r3), "random_list_SPD_r3": safe_json(self.player.random_list_SPD_r3), "random_list_GRUENE_r3": safe_json(self.player.random_list_GRUENE_r3), "random_list_FDP_r3": safe_json(self.player.random_list_FDP_r3), "random_list_AFD_r3": safe_json(self.player.random_list_AFD_r3), "random_list_LINKE_r3": safe_json(self.player.random_list_LINKE_r3) } def js_vars(self): return dict( federalstate = self.player.federalstate #import federalstate to JavaScript ) def before_next_page(self): try: federalstate_positions = federalstate_positions_data self.player.party_r3 = state_deployer(federalstate_positions, self.player.party_r3_pos, self.player.federalstate) except: pass form_model = Player form_fields = ["time_ballot_group2_round3_ZweitStimme", "time_checked_ballot_group2_round3_ZweitStimme", "party_r3_pos"] class groups2_round3_B_ErstStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 2 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "bavaria_dummy": self.player.bavaria_dummy, "randlastname_CDU_r3": safe_json(self.player.randlastname_CDU_r3), "randfirstname_CDU_r3": safe_json(self.player.randfirstname_CDU_r3), "randlastname_SPD_r3": safe_json(self.player.randlastname_SPD_r3), "randfirstname_SPD_r3": safe_json(self.player.randfirstname_SPD_r3), "randlastname_FDP_r3": safe_json(self.player.randlastname_FDP_r3), "randfirstname_FDP_r3": safe_json(self.player.randfirstname_FDP_r3), "randlastname_GRUENE_r3": safe_json(self.player.randlastname_GRUENE_r3), "randfirstname_GRUENE_r3": safe_json(self.player.randfirstname_GRUENE_r3), "randlastname_AFD_r3": safe_json(self.player.randlastname_AFD_r3), "randfirstname_AFD_r3": safe_json(self.player.randfirstname_AFD_r3), "randlastname_LINKE_r3": safe_json(self.player.randlastname_LINKE_r3), "randfirstname_LINKE_r3": safe_json(self.player.randfirstname_LINKE_r3), "incumbent_CDU_r3": safe_json(self.player.incumbent_CDU_r3), "incumbent_SPD_r3": safe_json(self.player.incumbent_SPD_r3), "incumbent_GRUENE_r3": safe_json(self.player.incumbent_GRUENE_r3), "incumbent_FDP_r3": safe_json(self.player.incumbent_FDP_r3), "incumbent_AFD_r3": safe_json(self.player.incumbent_AFD_r3), "incumbent_LINKE_r3": safe_json(self.player.incumbent_LINKE_r3), "random_federalstate_r2": safe_json(self.player.random_federalstate_r2), "randdr_CDU_r3": safe_json(self.player.randdr_CDU_r3), "randdr_SPD_r3": safe_json(self.player.randdr_SPD_r3), "randdr_FDP_r3": safe_json(self.player.randdr_FDP_r3), "randdr_AFD_r3": safe_json(self.player.randdr_AFD_r3), "randdr_GRUENE_r3": safe_json(self.player.randdr_GRUENE_r3), "randdr_LINKE_r3": safe_json(self.player.randdr_LINKE_r3) } def before_next_page(self): # remove self.player.candname_CDU_r3 = self.player.candname_CDU_r3.replace("", "") self.player.candname_CDU_r3 = self.player.candname_CDU_r3.replace("", "") self.player.candname_SPD_r3 = self.player.candname_SPD_r3.replace("", "") self.player.candname_SPD_r3 = self.player.candname_SPD_r3.replace("", "") self.player.candname_GRUENE_r3 = self.player.candname_GRUENE_r3.replace("", "") self.player.candname_GRUENE_r3 = self.player.candname_GRUENE_r3.replace("", "") self.player.candname_LINKE_r3 = self.player.candname_LINKE_r3.replace("", "") self.player.candname_LINKE_r3 = self.player.candname_LINKE_r3.replace("", "") self.player.candname_FDP_r3 = self.player.candname_FDP_r3.replace("", "") self.player.candname_FDP_r3 = self.player.candname_FDP_r3.replace("", "") self.player.candname_AFD_r3 = self.player.candname_AFD_r3.replace("", "") self.player.candname_AFD_r3 = self.player.candname_AFD_r3.replace("", "") try: federalstate_positions = federalstate_positions_data self.player.candidate_r3 = state_deployer(federalstate_positions, self.player.candidate_r3_pos, str(self.player.random_federalstate_r2)) except: pass form_model = Player form_fields = ["time_ballot_group2_round3_Erststimme", "time_checked_ballot_group2_round3_Erststimme", "candidate_r3_pos", "candname_CDU_r3", "candname_SPD_r3", "candname_GRUENE_r3", "candname_AFD_r3", "candname_LINKE_r3", "candname_FDP_r3", "incumbent_r3"] ###################### ##ROUND 3 - GROUPS 3## ###################### class groups3_round3_ErstZweitStimme(Page): def is_displayed(self): return self.player.ballot_group_number == 3 def vars_for_template(self): return {"ballot_group_number": self.player.ballot_group_number, "eligible_to_vote": self.player.eligible_to_vote, "bavaria_dummy": self.player.bavaria_dummy, "random_list_CDU_r3": safe_json(self.player.random_list_CDU_r3), "random_list_SPD_r3": safe_json(self.player.random_list_SPD_r3), "random_list_GRUENE_r3": safe_json(self.player.random_list_GRUENE_r3), "random_list_FDP_r3": safe_json(self.player.random_list_FDP_r3), "random_list_AFD_r3": safe_json(self.player.random_list_AFD_r3), "random_list_LINKE_r3": safe_json(self.player.random_list_LINKE_r3), "randlastname_CDU_r3": safe_json(self.player.randlastname_CDU_r3), "randfirstname_CDU_r3": safe_json(self.player.randfirstname_CDU_r3), "randlastname_SPD_r3": safe_json(self.player.randlastname_SPD_r3), "randfirstname_SPD_r3": safe_json(self.player.randfirstname_SPD_r3), "randlastname_FDP_r3": safe_json(self.player.randlastname_FDP_r3), "randfirstname_FDP_r3": safe_json(self.player.randfirstname_FDP_r3), "randlastname_GRUENE_r3": safe_json(self.player.randlastname_GRUENE_r3), "randfirstname_GRUENE_r3": safe_json(self.player.randfirstname_GRUENE_r3), "randlastname_AFD_r3": safe_json(self.player.randlastname_AFD_r3), "randfirstname_AFD_r3": safe_json(self.player.randfirstname_AFD_r3), "randlastname_LINKE_r3": safe_json(self.player.randlastname_LINKE_r3), "randfirstname_LINKE_r3": safe_json(self.player.randfirstname_LINKE_r3), "incumbent_CDU_r3": safe_json(self.player.incumbent_CDU_r3), "incumbent_SPD_r3": safe_json(self.player.incumbent_SPD_r3), "incumbent_GRUENE_r3": safe_json(self.player.incumbent_GRUENE_r3), "incumbent_FDP_r3": safe_json(self.player.incumbent_FDP_r3), "incumbent_AFD_r3": safe_json(self.player.incumbent_AFD_r3), "incumbent_LINKE_r3": safe_json(self.player.incumbent_LINKE_r3), "random_federalstate_r2": safe_json(self.player.random_federalstate_r2), "randdr_CDU_r3": safe_json(self.player.randdr_CDU_r3), "randdr_SPD_r3": safe_json(self.player.randdr_SPD_r3), "randdr_FDP_r3": safe_json(self.player.randdr_FDP_r3), "randdr_AFD_r3": safe_json(self.player.randdr_AFD_r3), "randdr_GRUENE_r3": safe_json(self.player.randdr_GRUENE_r3), "randdr_LINKE_r3": safe_json(self.player.randdr_LINKE_r3) } def js_vars(self): return dict( federalstate = self.player.federalstate #import federalstate to JavaScript ) def before_next_page(self): # remove self.player.candname_CDU_r3 = self.player.candname_CDU_r3.replace("", "") self.player.candname_CDU_r3 = self.player.candname_CDU_r3.replace("", "") self.player.candname_SPD_r3 = self.player.candname_SPD_r3.replace("", "") self.player.candname_SPD_r3 = self.player.candname_SPD_r3.replace("", "") self.player.candname_GRUENE_r3 = self.player.candname_GRUENE_r3.replace("", "") self.player.candname_GRUENE_r3 = self.player.candname_GRUENE_r3.replace("", "") self.player.candname_LINKE_r3 = self.player.candname_LINKE_r3.replace("", "") self.player.candname_LINKE_r3 = self.player.candname_LINKE_r3.replace("", "") self.player.candname_FDP_r3 = self.player.candname_FDP_r3.replace("", "") self.player.candname_FDP_r3 = self.player.candname_FDP_r3.replace("", "") self.player.candname_AFD_r3 = self.player.candname_AFD_r3.replace("", "") self.player.candname_AFD_r3 = self.player.candname_AFD_r3.replace("", "") try: federalstate_positions = federalstate_positions_data self.player.candidate_r3 = state_deployer(federalstate_positions, self.player.candidate_r3_pos, str(self.player.random_federalstate_r2)) self.player.party_r3 = state_deployer(federalstate_positions, self.player.party_r3_pos, self.player.federalstate) except: pass form_model = Player form_fields = ["time_ballot_group3_round3_ErstZweitStimme", "time_checked_ballot_group3_round3_ErstZweitStimme", "party_r3_pos", "candidate_r3_pos", "candname_CDU_r3", "candname_SPD_r3", "candname_GRUENE_r3", "candname_AFD_r3", "candname_LINKE_r3", "candname_FDP_r3", "incumbent_r3"] ########################### ##END OF BALLOTEXPERIMENT## ########################### ##################### ## OTHER QUESTIONS## ##################### class recall(Page): def vars_for_template(self): return {"eligible_to_vote": self.player.eligible_to_vote} form_model = Player form_fields = ["time_recall", "recall_list", "recall_direct"] class party_opinion(Page): form_model = Player form_fields = ["time_party_opinion", "skal_CDU", "skal_CSU", "skal_SPD", "skal_GRUENE", "skal_FDP", "skal_LINKE", "skal_AFD"] class politican_opinion(Page): form_model = Player form_fields = ["time_politican_opinion", "skal_Laschet", "skal_Merz", "skal_Söder", "skal_Dobrindt", "skal_Scholz", "skal_Esken", "skal_Weidel", "skal_Chrupalla", "skal_Lindner", "skal_Kubicki", "skal_Wissler", "skal_Bartsch", "skal_Baerbock", "skal_Habeck"] class political_questions(Page): form_model = Player form_fields = ["time_political_questions", "politicalinterest", "former_election", "number_election"] class education(Page): form_model = Player form_fields = ["time_education", "general_education", "vocationaltraining", "openfield_education", "openfield_vocationaltraining"] class socio_demographic_2(Page): form_model = Player form_fields = ["time_socio_demographic_2", "employment", "profession", "main_language", "language_at_home"] class income(Page): form_model = Player form_fields = ["time_income", "nettoincome"] def before_next_page(self): counting(self) class Endpage(Page): def vars_for_template(self): return {"participant_label": safe_json(self.participant.label)} form_model = Player form_fields = ["time_endpage"] #initial_page_sequence initial_page_sequence = [Welcome, preparation, ##starting ballotexperiment #Round1 ballot_preparation_round1, #Round1 - groups1 groups1_round1_A_ErstStimme, groups1_round1_B_ZweitStimme, #Round1 - groups2 groups2_round1_A_ZweitStimme, groups2_round1_B_ErstStimme, #Round1 - groups3 groups3_round1_ErstZweitStimme, #Round2 ballot_preparation_round2, #Round2 - groups1 groups1_round2_A_ErstStimme, groups1_round2_B_ZweitStimme, #Round2 - groups2 groups2_round2_A_ZweitStimme, groups2_round2_B_ErstStimme, #Round2 - groups3 groups3_round2_ErstZweitStimme, #Round3 ballot_preparation_round3, #Round3 - groups1 groups1_round3_A_ErstStimme, groups1_round3_B_ZweitStimme, #Round3 - groups2 groups2_round3_A_ZweitStimme, groups2_round3_B_ErstStimme, #Round3 - groups3 groups3_round3_ErstZweitStimme, ##End from ballotexperiment recall, party_opinion, politican_opinion, political_questions, education, socio_demographic_2, income, Endpage] page_sequence = [ ] class Welcome(Page): def inner_dispatch(self): page_seq = int(self.__class__.__name__.split('_')[1]) page_to_show = json.loads(self.player.page_sequence)[page_seq] self._is_frozen = False self.__class__ = globals()[page_to_show] return super(globals()[page_to_show], self).inner_dispatch() for i, _ in enumerate(initial_page_sequence): NewClassName = "Page_{}".format(i) A = type(NewClassName, (Welcome,), {}) locals()[NewClassName] = A page_sequence.append(locals()[NewClassName])