import os
from os import environ
import dj_database_url
from boto.mturk import qualification
import otree.settings
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# the environment variable OTREE_PRODUCTION controls whether Django runs in
# DEBUG mode. If OTREE_PRODUCTION==1, then DEBUG=False
if environ.get('OTREE_PRODUCTION') not in {None, '', '0'}:
DEBUG = False
else:
DEBUG = True
# don't share this with anybody.
SECRET_KEY = '9g=j^@g#t9&3#f35d*6!byt70nq=ojjd(tzzql%wv$k)yo6ky3'
# To use a database other than sqlite,
# set the DATABASE_URL environment variable.
# Examples:
# postgres://USER:PASSWORD@HOST:PORT/NAME
# mysql://USER:PASSWORD@HOST:PORT/NAME
DATABASES = {
'default': dj_database_url.config(
default='sqlite:///' + os.path.join(BASE_DIR, 'db.sqlite3')
)
}
# AUTH_LEVEL:
# this setting controls which parts of your site are freely accessible,
# and which are password protected:
# - If it's not set (the default), then the whole site is freely accessible.
# - If you are launching a study and want visitors to only be able to
# play your app if you provided them with a start link, set it to STUDY.
# - If you would like to put your site online in public demo mode where
# anybody can play a demo version of your game, but not access the rest
# of the admin interface, set it to DEMO.
# for flexibility, you can set it in the environment variable OTREE_AUTH_LEVEL
AUTH_LEVEL = environ.get('OTREE_AUTH_LEVEL')
ADMIN_USERNAME = 'admin'
# for security, best to set admin password in an environment variable
ADMIN_PASSWORD = environ.get('OTREE_ADMIN_PASSWORD')
# setting for integration with AWS Mturk
AWS_ACCESS_KEY_ID = environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = environ.get('AWS_SECRET_ACCESS_KEY')
# e.g. EUR, CAD, GBP, CHF, CNY, JPY
REAL_WORLD_CURRENCY_CODE = 'EUR'
USE_POINTS = False
#BROWSER_COMMAND = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
# e.g. en, de, fr, it, ja, zh-hans
# see: https://docs.djangoproject.com/en/1.9/topics/i18n/#term-language-code
LANGUAGE_CODE = 'en'
# if an app is included in SESSION_CONFIGS, you don't need to list it here
INSTALLED_APPS = ['otree']
# SENTRY_DSN = ''
DEMO_PAGE_INTRO_TEXT = """
Behavioral Management Science 2020.
University of Cologne
Department of Business Administration and Health Care Management
"""
ROOMS = [
# {
# 'name': 'econ101',
# 'display_name': 'Econ 101 class',
# 'participant_label_file': '_rooms/econ101.txt',
# },
# {
# 'name': 'live_demo',
# 'display_name': 'Room for live demo (no participant labels)',
# },
{
'name': 'bms2020',
'display_name': 'Behavioral Management Science 2020',
},
]
# from here on are qualifications requirements for workers
# see description for requirements on Amazon Mechanical Turk website:
# http://docs.aws.amazon.com/AWSMechTurk/latest/AWSMturkAPI/ApiReference_QualificationRequirementDataStructureArticle.html
# and also in docs for boto:
# https://boto.readthedocs.org/en/latest/ref/mturk.html?highlight=mturk#module-boto.mturk.qualification
mturk_hit_settings = {
'keywords': ['easy', 'bonus', 'choice', 'study'],
'title': 'Title for your experiment',
'description': 'Description for your experiment',
'frame_height': 500,
'preview_template': 'global/MTurkPreview.html',
'minutes_allotted_per_assignment': 60,
'expiration_hours': 7*24, # 7 days
#'grant_qualification_id': 'YOUR_QUALIFICATION_ID_HERE',# to prevent retakes
'qualification_requirements': [
# qualification.LocaleRequirement("EqualTo", "US"),
# qualification.PercentAssignmentsApprovedRequirement("GreaterThanOrEqualTo", 50),
# qualification.NumberHitsApprovedRequirement("GreaterThanOrEqualTo", 5),
# qualification.Requirement('YOUR_QUALIFICATION_ID_HERE', 'DoesNotExist')
]
}
# if you set a property in SESSION_CONFIG_DEFAULTS, it will be inherited by all configs
# in SESSION_CONFIGS, except those that explicitly override it.
# the session config can be accessed from methods in your apps as self.session.config,
# e.g. self.session.config['participation_fee']
SESSION_CONFIG_DEFAULTS = {
'real_world_currency_per_point': 0.10,
'participation_fee': 0.00,
'doc': "",
'mturk_hit_settings': mturk_hit_settings,
}
SESSION_CONFIGS = [
# {
# 'name': 'my_first_trust_game',
# 'display_name': "Trust Game",
# 'num_demo_participants': 2,
# 'app_sequence': ['my_first_trust_game'],
# 'use_browser_bots': True,
# },
# {
# 'name': 'public_goods',
# 'display_name': "Public Goods",
# 'num_demo_participants': 3,
# 'app_sequence': ['public_goods', 'payment_info'],
# },
# {
# 'name': 'trust',
# 'display_name': "Trust Game",
# 'num_demo_participants': 2,
# 'app_sequence': ['trust', 'payment_info'],
# },
# {
# 'name': 'guess_two_thirds',
# 'display_name': "Guess 2/3 of the Average",
# 'num_demo_participants': 3,
# 'app_sequence': ['guess_two_thirds', 'payment_info'],
# },
# {
# 'name': 'survey',
# 'display_name': "Survey",
# 'num_demo_participants': 1,
# 'app_sequence': ['survey', 'payment_info'],
# },
# {
# 'name': 'my_test_trust_game',
# 'display_name': "my_test_trust_game",
# 'num_demo_participants': 2,
# 'app_sequence': ['my_test_trust_game'],
# 'use_browser_bots': True,
# },
# {
# 'name': 'quiz',
# 'display_name': "Quiz",
# 'num_demo_participants': 1,
# 'app_sequence': ['quiz'],
# },
# {
# 'name': 'prisoner',
# 'display_name': "Prisoner's Dilemma",
# 'num_demo_participants': 2,
# 'app_sequence': ['prisoner', 'payment_info'],
# },
# {
# 'name': 'ultimatum',
# 'display_name': "Ultimatum (randomized: strategy vs. direct response)",
# 'num_demo_participants': 2,
# 'app_sequence': ['ultimatum', 'payment_info'],
# },
# {
# 'name': 'ultimatum_strategy',
# 'display_name': "Ultimatum (strategy method treatment)",
# 'num_demo_participants': 2,
# 'app_sequence': ['ultimatum', 'payment_info'],
# 'treatment': 'strategy',
# },
{
'name': 'ultimatum_non_strategy',
'display_name': "Ultimatum (direct response treatment)",
'num_demo_participants': 2,
'app_sequence': ['ultimatum', 'payment_info'],
'treatment': 'direct_response',
},
# {
# 'name': 'vickrey_auction',
# 'display_name': "Vickrey Auction",
# 'num_demo_participants': 3,
# 'app_sequence': ['vickrey_auction', 'payment_info'],
# },
# {
# 'name': 'volunteer_dilemma',
# 'display_name': "Volunteer's Dilemma",
# 'num_demo_participants': 3,
# 'app_sequence': ['volunteer_dilemma', 'payment_info'],
# },
# {
# 'name': 'cournot',
# 'display_name': "Cournot Competition",
# 'num_demo_participants': 2,
# 'app_sequence': [
# 'cournot', 'payment_info'
# ],
# },
# {
# 'name': 'principal_agent',
# 'display_name': "Principal Agent",
# 'num_demo_participants': 2,
# 'app_sequence': ['principal_agent', 'payment_info'],
# },
# {
# 'name': 'dictator',
# 'display_name': "Dictator Game",
# 'num_demo_participants': 2,
# 'app_sequence': ['dictator', 'payment_info'],
# },
# {
# 'name': 'matching_pennies',
# 'display_name': "Matching Pennies",
# 'num_demo_participants': 2,
# 'app_sequence': [
# 'matching_pennies',
# ],
# },
# {
# 'name': 'traveler_dilemma',
# 'display_name': "Traveler's Dilemma",
# 'num_demo_participants': 2,
# 'app_sequence': ['traveler_dilemma', 'payment_info'],
# },
# {
# 'name': 'bargaining',
# 'display_name': "Bargaining Game",
# 'num_demo_participants': 2,
# 'app_sequence': ['bargaining', 'payment_info'],
# },
# {
# 'name': 'common_value_auction',
# 'display_name': "Common Value Auction",
# 'num_demo_participants': 3,
# 'app_sequence': ['common_value_auction', 'payment_info'],
# },
# {
# 'name': 'stackelberg',
# 'display_name': "Stackelberg Competition",
# 'real_world_currency_per_point': 0.01,
# 'num_demo_participants': 2,
# 'app_sequence': [
# 'stackelberg', 'payment_info'
# ],
# },
# {
# 'name': 'bertrand',
# 'display_name': "Bertrand Competition",
# 'num_demo_participants': 2,
# 'app_sequence': [
# 'bertrand', 'payment_info'
# ],
# },
# {
# 'name': 'real_effort',
# 'display_name': "Real-effort transcription task",
# 'num_demo_participants': 1,
# 'app_sequence': [
# 'real_effort',
# ],
# },
# {
# 'name': 'lemon_market',
# 'display_name': "Lemon Market Game",
# 'num_demo_participants': 3,
# 'app_sequence': [
# 'lemon_market', 'payment_info'
# ],
# },
# {
# 'name': 'battle_of_the_sexes',
# 'display_name': "Battle of the Sexes",
# 'num_demo_participants': 2,
# 'app_sequence': [
# 'battle_of_the_sexes', 'payment_info'
# ],
# },
# {
# 'name': 'public_goods_simple',
# 'display_name': "Public Goods (simple version from tutorial)",
# 'num_demo_participants': 3,
# 'app_sequence': ['public_goods_simple', 'survey', 'payment_info'],
# },
{
'name': 'trust_simple',
'display_name': "Trust Game (Discrete)",
'num_demo_participants': 2,
'app_sequence': ['trust_simple'],
},
{
'name': 'motivation_survey',
'display_name': "Motivation Survey",
'num_demo_participants': 1,
'app_sequence': ['motivation_survey'],
},
# {
# 'name': 'my_negotiation',
# 'display_name': "Negotiation 2",
# 'num_demo_participants': 2,
# 'app_sequence': ['my_negotiation'],
# },
# {
# 'name': 'my_simple_survey',
# 'display_name': "My Simple Survey",
# 'num_demo_participants': 3,
# 'app_sequence': ['my_simple_survey'],
# },
# {
# 'name': 'my_trust',
# 'display_name': "My Trust Game (simple version from tutorial)",
# 'num_demo_participants': 2,
# 'app_sequence': ['my_trust'],
# },
{
'name': 'Choice_Experiment_1',
'display_name': "Choice Task 1 (RA)",
'num_demo_participants': 1,
'app_sequence': ['Choice_Experiment_1'],
'use_browser_bots': False
},
{
'name': 'Choice_Experiment_2',
'display_name': "Choice Tasks 2 (RA_RS)",
'num_demo_participants': 1,
'app_sequence': ['Choice_Experiment_2'],
},
{
'name': 'Choice_Experiment_3',
'display_name': "Choice Task 3 (PB)",
'num_demo_participants': 1,
'app_sequence': ['Choice_Experiment_3'],
},
{
'name': 'gift_exchange_strategy',
'display_name': "Gift Exchange (Strategy Method)",
'num_demo_participants': 2,
'app_sequence': ['gift_exchange_strategy'],
'use_browser_bots': False
},
{
'name': 'ultimatum_strategy_beliefs',
'display_name': "Ultimatum Game (Strategy Method + Belief Elicitation)",
'num_demo_participants': 2,
'app_sequence': ['ultimatum_strategy_beliefs'],
},
{
'name': 'reciprocity_survey',
'display_name': "Reciprocity Survey",
'num_demo_participants': 1,
'app_sequence': ['reciprocity_survey'],
},
{
'name': 'Choice_Experiment_4',
'display_name': "Choice Task 4",
'num_demo_participants': 1,
'app_sequence': ['Choice_Experiment_4'],
},
# {
# 'name': 'my_first_survey',
# 'display_name': "My First Survey",
# 'num_demo_participants': 1,
# 'app_sequence': ['my_first_survey'],
# },
# {
# 'name': 'my_test_crt',
# 'display_name': "My Test CRT",
# 'num_demo_participants': 1,
# 'app_sequence': ['my_test_crt'],
# },
# {
# 'name': 'my_first_crt',
# 'display_name': "My Test CRT",
# 'num_demo_participants': 1,
# 'app_sequence': ['my_first_crt'],
# },
]
# anything you put after the below line will override
# oTree's default settings. Use with caution.
otree.settings.augment_settings(globals())