from otree.api import * from otree.api import widgets from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants from . import models # CONDITIONS class Aa_Cond(Page): form_model = "player" form_fields = ["agreed_to_conditions"] class Fail_Conditions(Page): form_model = "player" #form_fields = ["rid"] def is_displayed(self): return self.player.agreed_to_conditions # CAPTCHA class Ab_Ca(Page): form_model = "player" form_fields = ["captcha"] def error_message(self, values): if values['captcha'] != "smwm": return "Bitte lösen Sie das Captcha." # ATTENTION CHECK class Ac_At1(Page): form_model = "player" form_fields = ["attention_1a", "attention_1b", "attention_1c", "attention_1d", "attention_1e"] def error_message(self, values): if all(v is None for v in [values['attention_1a'], values['attention_1b'], values['attention_1c'], values['attention_1d'], values['attention_1e']]): return 'Bitte beantworten Sie die Frage.' class Fail_Attention_1(Page): form_model = "player" #form_fields = ["rid"] def is_displayed(self): return not (self.player.attention_1a == "on" and self.player.attention_1e == "on") # PRE DEMOGRAPHICS ARE ELICITED class Ad_Pre(Page): form_model = "player" form_fields = ["gender", "age", "education", "income"] # QUOTAS ARE CALCULATED def before_next_page(self): self.player.count_females = self.group.number_females self.player.count_males = self.group.number_males #self.player.count_diverse = self.group.number_diverse self.player.count_age_group_1 = self.group.age_group_1 self.player.count_age_group_2 = self.group.age_group_2 self.player.count_age_group_3 = self.group.age_group_3 self.player.count_age_group_4 = self.group.age_group_4 self.player.count_uneducated = self.group.uneducated self.player.count_educated = self.group.educated self.player.count_income_group_1 = self.group.income_group_1 self.player.count_income_group_2 = self.group.income_group_2 self.player.count_income_group_3 = self.group.income_group_3 if((self.player.count_females >= 120000 and self.player.gender == "1") or (self.player.count_males >= 116000 and self.player.gender == "0") #or (self.player.count_diverse >= 40 and self.player.gender == "2") or (self.player.count_age_group_1 >= 39500 and self.player.age < 30) or (self.player.count_age_group_2 >= 69000 and self.player.age >= 30 and self.player.age < 50) or (self.player.count_age_group_3 >= 50000 and self.player.age >= 50 and self.player.age < 60) or (self.player.count_age_group_4 >= 80000 and self.player.age >= 60 ) or (self.player.count_uneducated >= 17400 and (self.player.education== "1" or self.player.education == "2" or self.player.education == "3" ) ) or (self.player.count_educated >= 72000 and (self.player.education== "4" or self.player.education == "5" ) ) or (self.player.count_income_group_1 >= 333680 and self.player.income == "1" ) or (self.player.count_income_group_2 >= 333700 and self.player.income == "2" ) or (self.player.count_income_group_3 >= 86000 and self.player.income == "3" ) ): self.player.is_quota_full = True else: self.player.is_quota_full = False if(self.player.gender=="1"): self.group.number_females = self.group.number_females + 1 else: pass if(self.player.gender=="0"): self.group.number_males = self.group.number_males + 1 else: pass # if(self.player.gender=="2"): # self.group.number_diverse = self.group.number_diverse + 1 #else: # pass if(self.player.age < 30): self.group.age_group_1 = self.group.age_group_1 + 1 else: pass if(self.player.age >= 30 and self.player.age < 50): self.group.age_group_2 = self.group.age_group_2 + 1 else: pass if(self.player.age >= 50 and self.player.age < 60): self.group.age_group_3 = self.group.age_group_3 + 1 else: pass if(self.player.age >= 60): self.group.age_group_4 = self.group.age_group_4 + 1 else: pass if(self.player.education == "1" or self.player.education == "2" or self.player.education == "3"): self.group.uneducated= self.group.uneducated + 1 else: pass if(self.player.education == "4" or self.player.education == "5" ): self.group.educated= self.group.educated + 1 else: pass if(self.player.income == "1" ): self.group.income_group_1 = self.group.income_group_1 + 1 else: pass if(self.player.income == "2"): self.group.income_group_2 = self.group.income_group_2 + 1 else: pass if(self.player.income == "3"): self.group.income_group_3 = self.group.income_group_3 + 1 else: pass class Quota_full(Page): form_model = "player" #form_fields = ["rid"] def is_displayed(self): return self.player.is_quota_full # ATTITUDES OF SUBJECTS AND THEIR BELIEFS ABOUT THE ATTITUDES OF OTHER PEOPLE ARE ELICITED. ATTITUDE VARIABLE DIFFERS BY TREATMENT class Aga_BEQ(Page): form_model = 'player' form_fields = ["attitude_immigration", "attitude_immigration_importance", "attitude_immigration_confidence", "prior_belief_median_immigration_cdu", "prior_belief_median_immigration_afd", "prior_belief_median_immigration_spd", "prior_belief_median_immigration_gruene", "prior_belief_median_immigration_fdp", "prior_belief_median_immigration_linke" ] def is_displayed(self): return self.player.color == "treatment_immigration" def before_next_page(self): # access the data_signals variable from the subsession.session.vars dictionary ## FOR CDU/CSU data_signal_immi_cdu_median = self.subsession.session.vars["data_signal_immi_cdu_median"] data_subject_cdu_median = list(data_signal_immi_cdu_median.iloc[self.group.subject_numbering]) self.player.signal_immi_cdu_median = int(data_subject_cdu_median[0]) ## FOR AFD #data_signal_immi_afd_median = self.subsession.session.vars["data_signal_immi_afd_median"] #data_subject_afd_median = list(data_signal_immi_afd_median.iloc[self.group.subject_numbering]) #self.player.signal_immi_afd_median = int(data_subject_afd_median[0]) ## FOR SPD data_signal_immi_spd_median = self.subsession.session.vars["data_signal_immi_spd_median"] data_subject_spd_median = list(data_signal_immi_spd_median.iloc[self.group.subject_numbering]) self.player.signal_immi_spd_median = int(data_subject_spd_median[0]) ## FOR GRUENE data_signal_immi_gruene_median = self.subsession.session.vars["data_signal_immi_gruene_median"] data_subject_gruene_median = list(data_signal_immi_gruene_median.iloc[self.group.subject_numbering]) self.player.signal_immi_gruene_median = int(data_subject_gruene_median[0]) ## FOR FDP data_signal_immi_fdp_median = self.subsession.session.vars["data_signal_immi_fdp_median"] data_subject_fdp_median = list(data_signal_immi_fdp_median.iloc[self.group.subject_numbering]) self.player.signal_immi_fdp_median = int(data_subject_fdp_median[0]) ## FOR LINKE data_signal_immi_linke_median = self.subsession.session.vars["data_signal_immi_linke_median"] data_subject_linke_median = list(data_signal_immi_linke_median.iloc[self.group.subject_numbering]) self.player.signal_immi_linke_median = int(data_subject_linke_median[0]) # Generate string_immis for median signals ## For CDU/CSU if(self.player.signal_immi_cdu_median==2): self.player.string_immi_cdu_median = "erleichtern." self.player.string_rg_magnitude = "l" else: if(self.player.signal_immi_cdu_median==3): self.player.string_immi_cdu_median = "unverändert lassen." self.player.string_rg_magnitude = "m" else: if(self.player.signal_immi_cdu_median==4): self.player.string_immi_cdu_median = "einschränken." self.player.string_rg_magnitude = "s" else: self.player.string_immi_cdu_median = "NA" self.player.string_rg_magnitude = "NA" ## For spd if(self.player.signal_immi_spd_median==1): self.player.string_immi_spd_median = "stark erleichtern." else: if(self.player.signal_immi_spd_median==2): self.player.string_immi_spd_median = "erleichtern." else: if(self.player.signal_immi_spd_median==3): self.player.string_immi_spd_median = "unverändert lassen." else: self.player.string_immi_spd_median = "NA" ## For gruene if(self.player.signal_immi_gruene_median==1): self.player.string_immi_gruene_median = "stark erleichtern." else: if(self.player.signal_immi_gruene_median==2): self.player.string_immi_gruene_median = "erleichtern." else: if(self.player.signal_immi_gruene_median==3): self.player.string_immi_gruene_median = "unverändert lassen." else: self.player.string_immi_gruene_median = "NA" ## For fdp if(self.player.signal_immi_fdp_median==1): self.player.string_immi_fdp_median = "stark erleichtern." else: if(self.player.signal_immi_fdp_median==2): self.player.string_immi_fdp_median = "erleichtern." else: if(self.player.signal_immi_fdp_median==3): self.player.string_immi_fdp_median = "unverändert lassen." else: self.player.string_immi_fdp_median = "NA" ## For linke if(self.player.signal_immi_linke_median==1): self.player.string_immi_linke_median = "stark erleichtern." else: if(self.player.signal_immi_linke_median==2): self.player.string_immi_linke_median = "erleichtern." else: if(self.player.signal_immi_linke_median==3): self.player.string_immi_linke_median = "unverändert lassen." else: self.player.string_immi_linke_median = "NA" # Gather information on what signal image should be shown to participants #if(self.player.signal_immi_citizen_median==1): # For own attitude if(self.player.attitude_immigration=="1"): self.player.string_immi_own_attitude = "stark erleichtern" else: if(self.player.attitude_immigration=="2"): self.player.string_immi_own_attitude = "erleichtern" else: if(self.player.attitude_immigration=="3"): self.player.string_immi_own_attitude = "unverändert lassen" else: if(self.player.attitude_immigration=="4"): self.player.string_immi_own_attitude = "einschränken" else: if(self.player.attitude_immigration=="5"): self.player.string_immi_own_attitude = "stark einschränken" else: self.player.string_immi_own_attitude = "NA" self.group.subject_numbering += 1 class Agb_BEQ(Page): form_model = "player" form_fields = ["attitude_redistribution", "attitude_redistribution_importance", "attitude_redistribution_confidence", "prior_belief_median_redistribution_cdu", "prior_belief_median_redistribution_afd", "prior_belief_median_redistribution_spd", "prior_belief_median_redistribution_gruene", "prior_belief_median_redistribution_fdp", "prior_belief_median_redistribution_linke" ] def is_displayed(self): return self.player.color == "treatment_redistribution" def before_next_page(self): # access the data_signals variable from the subsession.session.vars dictionary ## FOR CDU/CSU data_signal_red_cdu_median = self.subsession.session.vars["data_signal_red_cdu_median"] data_subject_cdu_median = list(data_signal_red_cdu_median.iloc[self.group.subject_numbering]) self.player.signal_red_cdu_median = int(data_subject_cdu_median[0]) ## FOR AFD #data_signal_red_afd_median = self.subsession.session.vars["data_signal_red_afd_median"] #data_subject_afd_median = list(data_signal_red_afd_median.iloc[self.group.subject_numbering]) #self.player.signal_red_afd_median = int(data_subject_afd_median[0]) ## FOR SPD data_signal_red_spd_median = self.subsession.session.vars["data_signal_red_spd_median"] data_subject_spd_median = list(data_signal_red_spd_median.iloc[self.group.subject_numbering]) self.player.signal_red_spd_median = int(data_subject_spd_median[0]) ## FOR GRUENE data_signal_red_gruene_median = self.subsession.session.vars["data_signal_red_gruene_median"] data_subject_gruene_median = list(data_signal_red_gruene_median.iloc[self.group.subject_numbering]) self.player.signal_red_gruene_median = int(data_subject_gruene_median[0]) ## FOR FDP data_signal_red_fdp_median = self.subsession.session.vars["data_signal_red_fdp_median"] data_subject_fdp_median = list(data_signal_red_fdp_median.iloc[self.group.subject_numbering]) self.player.signal_red_fdp_median = int(data_subject_fdp_median[0]) ## FOR LINKE data_signal_red_linke_median = self.subsession.session.vars["data_signal_red_linke_median"] data_subject_linke_median = list(data_signal_red_linke_median.iloc[self.group.subject_numbering]) self.player.signal_red_linke_median = int(data_subject_linke_median[0]) # Generate string_reds for median signals ## For CDU/CSU if(self.player.signal_red_cdu_median==2): self.player.string_red_cdu_median = "erleichtern." else: if(self.player.signal_red_cdu_median==3): self.player.string_red_cdu_median = "unverändert lassen." else: if(self.player.signal_red_cdu_median==4): self.player.string_red_cdu_median = "einschränken." else: self.player.string_red_cdu_median = "NA" ## For spd if(self.player.signal_red_spd_median==1): self.player.string_red_spd_median = "stark erleichtern." else: if(self.player.signal_red_spd_median==2): self.player.string_red_spd_median = "erleichtern." else: if(self.player.signal_red_spd_median==3): self.player.string_red_spd_median = "unverändert lassen." else: self.player.string_red_spd_median = "NA" ## For gruene if(self.player.signal_red_gruene_median==1): self.player.string_red_gruene_median = "stark erleichtern." else: if(self.player.signal_red_gruene_median==2): self.player.string_red_gruene_median = "erleichtern." else: if(self.player.signal_red_gruene_median==3): self.player.string_red_gruene_median = "unverändert lassen." else: self.player.string_red_gruene_median = "NA" ## For fdp if(self.player.signal_red_fdp_median==1): self.player.string_red_fdp_median = "stark erleichtern." else: if(self.player.signal_red_fdp_median==2): self.player.string_red_fdp_median = "erleichtern." else: if(self.player.signal_red_fdp_median==3): self.player.string_red_fdp_median = "unverändert lassen." else: self.player.string_red_fdp_median = "NA" ## For linke if(self.player.signal_red_linke_median==1): self.player.string_red_linke_median = "stark erleichtern." else: if(self.player.signal_red_linke_median==2): self.player.string_red_linke_median = "erleichtern." else: if(self.player.signal_red_linke_median==3): self.player.string_red_linke_median = "unverändert lassen." else: self.player.string_red_linke_median = "NA" # For own attitude if(self.player.attitude_redistribution=="1"): self.player.string_red_own_attitude = "Sie selbst stimmen der Aussage voll zu," else: if(self.player.attitude_redistribution=="2"): self.player.string_red_own_attitude = "Sie selbst stimmen der Aussage zu," else: if(self.player.attitude_redistribution=="3"): self.player.string_red_own_attitude = "Sie selbst stimmen der Aussage teilweise zu und teilweise nicht zu," else: if(self.player.attitude_redistribution=="4"): self.player.string_red_own_attitude = "Sie selbst stimmen der Aussage nicht zu," else: if(self.player.attitude_redistribution=="5"): self.player.string_red_own_attitude = "Sie selbst stimmen der Aussage gar nicht zu," else: self.player.string_red_own_attitude = "NA" self.group.subject_numbering += 1 class Agc_BEQ(Page): form_model = "player" form_fields = ["attitude_environment", "attitude_environment_importance", "attitude_environment_confidence", "prior_belief_median_environment_cdu", "prior_belief_median_environment_afd", "prior_belief_median_environment_spd", "prior_belief_median_environment_gruene", "prior_belief_median_environment_fdp", "prior_belief_median_environment_linke" ] def is_displayed(self): return self.player.color == "treatment_environment" def before_next_page(self): # access the data_signals variable from the subsession.session.vars dictionary ## FOR CDU/CSU data_signal_env_cdu_median = self.subsession.session.vars["data_signal_env_cdu_median"] data_subject_cdu_median = list(data_signal_env_cdu_median.iloc[self.group.subject_numbering]) self.player.signal_env_cdu_median = int(data_subject_cdu_median[0]) ## FOR AFD #data_signal_env_afd_median = self.subsession.session.vars["data_signal_env_afd_median"] #data_subject_afd_median = list(data_signal_env_afd_median.iloc[self.group.subject_numbering]) #self.player.signal_env_afd_median = int(data_subject_afd_median[0]) ## FOR SPD data_signal_env_spd_median = self.subsession.session.vars["data_signal_env_spd_median"] data_subject_spd_median = list(data_signal_env_spd_median.iloc[self.group.subject_numbering]) self.player.signal_env_spd_median = int(data_subject_spd_median[0]) ## FOR GRUENE data_signal_env_gruene_median = self.subsession.session.vars["data_signal_env_gruene_median"] data_subject_gruene_median = list(data_signal_env_gruene_median.iloc[self.group.subject_numbering]) self.player.signal_env_gruene_median = int(data_subject_gruene_median[0]) ## FOR FDP data_signal_env_fdp_median = self.subsession.session.vars["data_signal_env_fdp_median"] data_subject_fdp_median = list(data_signal_env_fdp_median.iloc[self.group.subject_numbering]) self.player.signal_env_fdp_median = int(data_subject_fdp_median[0]) ## FOR LINKE data_signal_env_linke_median = self.subsession.session.vars["data_signal_env_linke_median"] data_subject_linke_median = list(data_signal_env_linke_median.iloc[self.group.subject_numbering]) self.player.signal_env_linke_median = int(data_subject_linke_median[0]) # Generate string_envs for median signals ## For CDU/CSU if(self.player.signal_env_cdu_median==2): self.player.string_env_cdu_median = "erleichtern." else: if(self.player.signal_env_cdu_median==3): self.player.string_env_cdu_median = "unverändert lassen." else: if(self.player.signal_env_cdu_median==4): self.player.string_env_cdu_median = "einschränken." else: self.player.string_env_cdu_median = "NA" ## For spd if(self.player.signal_env_spd_median==1): self.player.string_env_spd_median = "stark erleichtern." else: if(self.player.signal_env_spd_median==2): self.player.string_env_spd_median = "erleichtern." else: if(self.player.signal_env_spd_median==3): self.player.string_env_spd_median = "unverändert lassen." else: self.player.string_env_spd_median = "NA" ## For gruene if(self.player.signal_env_gruene_median==1): self.player.string_env_gruene_median = "stark erleichtern." else: if(self.player.signal_env_gruene_median==2): self.player.string_env_gruene_median = "erleichtern." else: if(self.player.signal_env_gruene_median==3): self.player.string_env_gruene_median = "unverändert lassen." else: self.player.string_env_gruene_median = "NA" ## For fdp if(self.player.signal_env_fdp_median==1): self.player.string_env_fdp_median = "stark erleichtern." else: if(self.player.signal_env_fdp_median==2): self.player.string_env_fdp_median = "erleichtern." else: if(self.player.signal_env_fdp_median==3): self.player.string_env_fdp_median = "unverändert lassen." else: self.player.string_env_fdp_median = "NA" ## For linke if(self.player.signal_env_linke_median==1): self.player.string_env_linke_median = "stark erleichtern." else: if(self.player.signal_env_linke_median==2): self.player.string_env_linke_median = "erleichtern." else: if(self.player.signal_env_linke_median==3): self.player.string_env_linke_median = "unverändert lassen." else: self.player.string_env_linke_median = "NA" # For own attitude if(self.player.attitude_environment=="1"): self.player.string_env_own_attitude = "Sie selbst stimmen der Aussage voll zu," else: if(self.player.attitude_environment=="2"): self.player.string_env_own_attitude = "Sie selbst stimmen der Aussage zu," else: if(self.player.attitude_environment=="3"): self.player.string_env_own_attitude = "Sie selbst stimmen der Aussage teilweise zu und teilweise nicht zu," else: if(self.player.attitude_environment=="4"): self.player.string_env_own_attitude = "Sie selbst stimmen der Aussage nicht zu," else: if(self.player.attitude_environment=="5"): self.player.string_env_own_attitude = "Sie selbst stimmen der Aussage gar nicht zu," else: self.player.string_env_own_attitude = "NA" self.group.subject_numbering += 1 # SUBJECTS RECEIVE GENERAL INFORMATION ABOUT THE SIGNAL THEY WILL RECEIVE, DIFFERS BY TREATMENT class Aia_I(Page): form_model = "player" def is_displayed(self): return self.player.color == "treatment_immigration" class Aib_I(Page): form_model = "player" def is_displayed(self): return self.player.color == "treatment_redistribution" class Aic_I(Page): form_model = "player" def is_displayed(self): return self.player.color == "treatment_environment" # SUBJECTS RECEIVE SIGNALS ABOUT THE ATTITUDES OF OTHERS. ATTITUDE VARIABLE DIFFERS BY TREATMENT class Aia_Ix(Page): form_model = "player" def is_displayed(self): return self.player.color == "treatment_immigration" def vars_for_template(self): image_url = 'info_images_party/immi' + '_s' + str(self.player.attitude_immigration) + '_rg' + str(self.player.string_rg_magnitude) + '.png' return {'image_url': image_url} class Aib_Ix(Page): form_model = "player" def is_displayed(self): return self.player.color == "treatment_redistribution" def vars_for_template(self): image_url = 'info_images/redist/redist_v' + str(self.player.signal_red_citizen_median) + '_s' + str(self.player.attitude_redistribution) + '_m' + str(self.player.signal_red_mp_median) + '.png' return {'image_url': image_url} class Aic_Ix(Page): form_model = "player" def is_displayed(self): return self.player.color == "treatment_environment" def vars_for_template(self): image_url = 'info_images/env/env_v' + str(self.player.signal_env_citizen_median) + '_s' + str(self.player.attitude_environment) + '_m' + str(self.player.signal_env_mp_median) + '.png' return {'image_url': image_url} # SUBJECTS' POSTERIOR BELIEFS ABOUT THE ATTITUDES OF OTHERS ARE ELICITED class Aja_Pos(Page): form_model = "player" form_fields = ["posterior_belief_median_immigration_cdu", "posterior_belief_median_immigration_afd", "posterior_belief_median_immigration_spd", "posterior_belief_median_immigration_gruene", "posterior_belief_median_immigration_fdp", "posterior_belief_median_immigration_linke" ] def is_displayed(self): return self.player.color == "treatment_immigration" class Ajb_Pos(Page): form_model = "player" form_fields = ["posterior_belief_median_redistribution_cdu", "posterior_belief_median_redistribution_afd", "posterior_belief_median_redistribution_spd", "posterior_belief_median_redistribution_gruene", "posterior_belief_median_redistribution_fdp", "posterior_belief_median_redistribution_linke" ] def is_displayed(self): return self.player.color == "treatment_redistribution" class Ajc_Pos(Page): form_model = "player" form_fields = ["posterior_belief_median_environment_cdu", "posterior_belief_median_environment_afd", "posterior_belief_median_environment_spd", "posterior_belief_median_environment_gruene", "posterior_belief_median_environment_fdp", "posterior_belief_median_environment_linke" ] def is_displayed(self): return self.player.color == "treatment_environment" page_sequence = [ Aa_Cond, Fail_Conditions, Ab_Ca, Ac_At1, Fail_Attention_1, Ad_Pre, Quota_full, Aga_BEQ, Agb_BEQ, Agc_BEQ, Aia_I, Aib_I, Aic_I, Aia_Ix, Aib_Ix, Aic_Ix, Aja_Pos, Ajb_Pos, Ajc_Pos ]