from otree.api import *
import random
import itertools
import json
doc = """
Your app description
"""
class C(BaseConstants):
NAME_IN_URL = 'controls'
PLAYERS_PER_GROUP = None
NUM_ROUNDS = 1
class Subsession(BaseSubsession):
pass
class Group(BaseGroup):
pass
class Player(BasePlayer):
# Example for Saudi Arabia
S_Arab_stability = models.StringField(
choices=["hoch", "mittel", "niedrig"],
label=""
)
S_Arab_environment = models.StringField(
choices=["hoch", "mittel", "niedrig"],
label=""
)
S_Arab_freedom = models.StringField(
choices=["frei", "teilweise frei", "nicht frei"],
label=""
)
S_Arab_trade = models.StringField(
choices=["aktiver Handel", "kein Handel"],
label=""
)
# China
China_stability = models.StringField(
choices=["hoch", "mittel", "niedrig"],
label=""
)
China_environment = models.StringField(
choices=["hoch", "mittel", "niedrig"],
label=""
)
China_freedom = models.StringField(
choices=["frei", "teilweise frei", "nicht frei"],
label=""
)
China_trade = models.StringField(
choices=["aktiver Handel", "kein Handel"],
label=""
)
# Chile
Chile_stability = models.StringField(
choices=["hoch", "mittel", "niedrig"],
label=""
)
Chile_environment = models.StringField(
choices=["hoch", "mittel", "niedrig"],
label=""
)
Chile_freedom = models.StringField(
choices=["frei", "teilweise frei", "nicht frei"],
label=""
)
Chile_trade = models.StringField(
choices=["aktiver Handel", "kein Handel"],
label=""
)
"""
# USA
USA_stability = models.StringField(
choices=["hoch", "mittel", "niedrig"],
label=""
)
USA_security = models.StringField(
choices=["hoch", "mittel", "niedrig"],
label=""
)
USA_environment = models.StringField(
choices=["hoch", "mittel", "niedrig"],
label=""
)
USA_freedom = models.StringField(
choices=["frei", "teilweise frei", "nicht frei"],
label=""
)
USA_trade = models.StringField(
choices=["aktiver Handel", "kein Handel"],
label=""
)
"""
# Control Variables
risk = models.IntegerField(
choices=[
[0, "0: gar nicht risikobereit"],
[1, 1],
[2, 2],
[3, 3],
[4, 4],
[5, "5: weder noch"],
[6, 6],
[7, 7],
[8, 8],
[9, 9],
[10, "10: sehr risikobereit"],
],
label="Wie schätzen Sie sich persönlich ein? Sind Sie im Allgemeinen ein risikobereiter Mensch oder versuchen Sie, Risiken zu vermeiden? "
""
"Bitte klicken Sie einen Punkt auf der Skala an, wobei der Wert 0 bedeutet \"gar nicht risikobereit\", und der Wert 10 bedeutet \"sehr risikobereit\". "
"Mit den Werten dazwischen können Sie Ihre Einschätzung abstufen."
"",
widget=widgets.RadioSelect
)
discounting = models.IntegerField(
choices=[
[0, "0: gar nicht bereit"],
[1, 1],
[2, 2],
[3, 3],
[4, 4],
[5, "5: weder noch"],
[6, 6],
[7, 7],
[8, 8],
[9, 9],
[10, "10: sehr bereit"],
],
label="Sind Sie im Vergleich zu anderen im Allgemeinen bereit, heute auf etwas zu verzichten, um in der Zukunft davon zu profitieren, "
"oder sind Sie im Vergleich zu anderen dazu nicht bereit? "
""
"Bitte klicken Sie einen Punkt auf der Skala an, wobei der Wert 0 bedeutet \"gar nicht bereit\", und der Wert 10 bedeutet \"sehr bereit\". "
"Mit den Werten dazwischen können Sie Ihre Einschätzung abstufen."
"",
widget=widgets.RadioSelect
)
trust = models.IntegerField(
choices=[
[0, "0: trifft gar nicht zu"],
[1, 1],
[2, 2],
[3, 3],
[4, 4],
[5, "5: weder noch"],
[6, 6],
[7, 7],
[8, 8],
[9, 9],
[10, "10: trifft voll zu"],
],
label="Wie sehr trifft die folgende Aussage auf Sie zu? \"Solange man mich nicht vom Gegenteil überzeugt, gehe ich stets davon aus, dass andere Menschen nur das Beste im Sinn haben.\" "
""
"Bitte klicken Sie einen Punkt auf der Skala an, wobei der Wert 0 bedeutet \"trifft gar nicht zu\", und der Wert 10 bedeutet \"trifft voll zu\". "
"Mit den Werten dazwischen können Sie Ihre Einschätzung abstufen."
"",
widget=widgets.RadioSelect
)
altruism = models.IntegerField(
choices=[
[0, "0: gar nicht bereit zu teilen"],
[1, 1],
[2, 2],
[3, 3],
[4, 4],
[5, "5: weder noch"],
[6, 6],
[7, 7],
[8, 8],
[9, 9],
[10, "10: sehr bereit zu teilen"],
],
label="Wie schätzen Sie Ihre Bereitschaft mit anderen zu teilen, ohne dafür eine Gegenleistung zu erwarten, in Bezug auf den folgenden Bereich ein: wenn es um gemeinnützige Zwecke geht? "
""
"Bitte klicken Sie einen Punkt auf der Skala an, wobei der Wert 0 bedeutet \"gar nicht bereit zu teilen ohne eine Gegenleistung zu erwarten\", "
"und der Wert 10 bedeutet \"sehr bereit zu teilen ohne eine Gegenleistung zu erwarten\". "
"Mit den Werten dazwischen können Sie Ihre Einschätzung abstufen."
"",
widget=widgets.RadioSelect
)
climate_change = models.StringField(
choices=[
["nein", "Nein"],
["natürlich", "Ja, hauptsächlich durch natürlich Prozesse"],
["menschlich", "Ja, hauptsächlich durch menschliche Aktivitäten"],
["weiß_nicht", "Weiß ich nicht"]
],
label="Glauben Sie persönlich, dass sich das Klima der Erde verändert?",
widget=widgets.RadioSelect
)
climate_problem = models.IntegerField(
choices=[
[1, "stimme überhaupt nicht zu"],
[2, "stimme eher nicht zu"],
[3, "weder noch"],
[4, "stimme eher zu"],
[5, "stimme voll zu"],
[99, "weiß ich nicht"]
],
label="Inwiefern stimmen Sie der folgenden Aussage zu? \"Der Klimawandel ist ein ernstzunehmendes Problem.\"",
widget=widgets.RadioSelect
)
energy_security_expensive = models.IntegerField(
choices=[[1, '1: überhaupt nicht besorgt'], [2, "2: eher nicht besorgt"], [3, "3: eher besorgt"],
[4, "4: sehr besorgt"], [99, '5: weiß ich nicht']],
label="... Strom in Deutschland zu teuer wird.",
widget=widgets.RadioSelectHorizontal
)
energy_security_rationed = models.IntegerField(
choices=[[1, '1: überhaupt nicht besorgt'], [2, "2: eher nicht besorgt"], [3, "3: eher besorgt"],
[4, "4: sehr besorgt"], [99, '5: weiß ich nicht']],
label="... Strom in Deutschland rationiert wird.",
widget=widgets.RadioSelectHorizontal
)
energy_security_dependent = models.IntegerField(
choices=[[1, '1: überhaupt nicht besorgt'], [2, "2: eher nicht besorgt"], [3, "3: eher besorgt"],
[4, "4: sehr besorgt"], [99, '5: weiß ich nicht']],
label="... Deutschland abhängig von der Energie anderer Länder bleibt.",
widget=widgets.RadioSelectHorizontal
)
energy_security_attacked = models.IntegerField(
choices=[[1, '1: überhaupt nicht besorgt'], [2, "2: eher nicht besorgt"], [3, "3: eher besorgt"],
[4, "4: sehr besorgt"], [99, '5: weiß ich nicht']],
label="... (digitale) Angriffe zu Unterbrechungen der deutschen Stromversorgung führen.",
widget=widgets.RadioSelectHorizontal
)
energy_security_scarce = models.IntegerField(
choices=[[1, '1: überhaupt nicht besorgt'], [2, "2: eher nicht besorgt"], [3, "3: eher besorgt"],
[4, "4: sehr besorgt"], [99, '5: weiß ich nicht']],
label="... die Vorräte an fossilen Brennstoffen zur Neige gehen.",
widget=widgets.RadioSelectHorizontal
)
energy_security_blackout = models.IntegerField(
choices=[[1, '1: überhaupt nicht besorgt'], [2, "2: eher nicht besorgt"], [3, "3: eher besorgt"],
[4, "4: sehr besorgt"], [99, '5: weiß ich nicht']],
label="... es in Deutschland zu Stromausfällen kommt.",
widget=widgets.RadioSelectHorizontal
)
party_vote = models.StringField(
choices=[
["AfD", "AfD"],
["Grüne", "Bündnis 90/ Die Grünen"],
["BSW", "Bündnis Sahra Wagenknecht"],
["Union", "CDU/ CSU"],
["FDP", "FDP"],
["Linke", "Linke"],
["SPD", "SPD"],
["Andere", "Eine andere Partei"],
["nichtwähler", "Ich würde nicht wählen"],
["kein_wahlrecht", "Ich habe in Deutschland kein Wahlrecht"],
["keine_angabe", "Keine Angabe"]
],
label="Wenn nächsten Sonntag Bundestagswahl wäre, welche Partei würden Sie wählen?",
widget=widgets.RadioSelect
)
political_opinion = models.IntegerField(
choices=[
[0, "0: ganz links"],
[1, 1],
[2, 2],
[3, 3],
[4, 4],
[5, 5],
[6, 6],
[7, 7],
[8, 8],
[9, 9],
[10, "10: ganz rechts"],
],
label="Menschen werden manchmal anhand der Begriffe \"Rechts\" und \"Links\" einer politischen Richtung zugeordnet. "
"Wo würden Sie sich einordnen, wenn der Wert 0 bedeutet \"ganz links\" und der Wert 10 bedeutet \"ganz rechts\"?",
widget=widgets.RadioSelect
)
politician_influence = models.IntegerField(
choices=[
[1,
"1: Politiker lassen sich in ihrem Verhalten auf jeden Fall von der Meinung der Bevölkerung beeinflussen"],
[2, 2],
[3, "3: weder noch"],
[4, 4],
[5, "5: Politiker werden die Meinung der Bevölkerung auf jeden Fall ignorieren"]
],
label="Glauben Sie persönlich, dass Politiker sich von der Meinung der Bevölkerung beeinflussen lassen "
"(z.B. durch die Ergebnisse dieser oder ähnlicher Befragungen)?",
widget=widgets.RadioSelect
)
credibility = models.IntegerField(
choices=[
[1, "1: sehr seriös"],
[2, "2: eher seriös"],
[3, "3: weder noch"],
[4, "4: eher unseriös"],
[5, "5: sehr unseriös"]
],
label="Abschließend möchten wir von Ihnen nur noch wissen, für wie seriös Sie diese Befragung und die enthaltenen Informationen empfunden haben.",
widget=widgets.RadioSelect
)
open_feedback = models.LongStringField(
label="Haben Sie noch Anmerkungen zur Umfrage?",
blank=True,
)
open_feedback_dk = models.BooleanField(
label="Keine Angabe",
blank=True
)
# PAGES
# -------- Control variables --------
class Country_Attributes(Page):
form_model = 'player'
form_fields = [
'S_Arab_stability', 'S_Arab_environment', 'S_Arab_freedom', 'S_Arab_trade',
'China_stability', 'China_environment', 'China_freedom', 'China_trade',
'Chile_stability', 'Chile_environment', 'Chile_freedom', 'Chile_trade',
#'USA_stability', 'USA_security', 'USA_environment', 'USA_freedom', 'USA_trade'
]
class Risk(Page):
form_model = "player"
form_fields = ["risk"]
class Discounting(Page):
form_model = "player"
form_fields = ["discounting"]
class Trust(Page):
form_model = "player"
form_fields = ["trust"]
class Altruism(Page):
form_model = "player"
form_fields = ["altruism"]
class Climate_Change(Page):
form_model = "player"
form_fields = ["climate_change"]
class Climate_Problem(Page):
form_model = "player"
form_fields = ["climate_problem"]
class Energy_Security(Page):
form_model = 'player'
@staticmethod
def get_form_fields(player: Player):
form_fields = ['energy_security_expensive', 'energy_security_rationed', 'energy_security_dependent',
'energy_security_attacked', "energy_security_scarce", "energy_security_blackout"]
random.shuffle(form_fields)
return form_fields
class Party_Vote(Page):
form_model = "player"
form_fields = ["party_vote"]
class Political_Opinion(Page):
form_model = "player"
form_fields = ["political_opinion"]
class Politician_Influence(Page):
form_model = "player"
form_fields = ["politician_influence"]
class Credibility(Page):
form_model = "player"
form_fields = ["credibility"]
class OpenFeedback(Page):
# Page shown if bid_order == upper_first & answer == yes
form_model = "player"
form_fields = ["open_feedback", "open_feedback_dk"]
def error_message(self, values):
if not values['open_feedback'] and not values['open_feedback_dk']:
return "Wenn Sie keine Anmerkungen mehr haben, wählen Sie bitte \"Keine Angabe\" aus."
class End(Page):
form_model = "player"
page_sequence = [Country_Attributes, Energy_Security, Climate_Change, Climate_Problem, Risk, Discounting, Trust, Altruism, Party_Vote, Political_Opinion, Politician_Influence, Credibility, OpenFeedback, End]
#page_sequence = [Country_Attributes]