from os import environ # 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': 1.00, 'participation_fee': 0.00, 'doc': "", 'mturk_hit_settings': { 'keywords': ['bonus', 'study'], 'title': 'Title for your experiment', 'description': 'Description for your experiment', 'frame_height': 500, 'template': 'global/mturk_template.html', 'minutes_allotted_per_assignment': 60, 'expiration_hours': 7 * 24, 'qualification_requirements': [], 'grant_qualification_id' : 'YOUR_QUALIFICATION_ID_HERE', # to prevent retakes }, } """ SESSION_CONFIGS = [ { 'name': 'Background_Uncertainty_full', 'num_demo_participants': 1, # to add the full version for the real study add Time6 Time8 and Time_Front_End 'app_sequence': ['Welcome', 'Risk','Time_Adaptive_Lot_1_84', 'Time_Adaptive_CE_84', 'Time_Adaptive_Lot_2_84', 'Ambiguity_New', 'Belief_EFD', 'Results_New'] }, { 'name': 'Background_Uncertainty_no_survey', 'num_demo_participants': 1, # to add the full version for the real study add Time6 Time8 and Time_Front_End 'app_sequence': ['Welcome', 'Risk','Time_Adaptive_Lot_1_84', 'Time_Adaptive_CE_84', 'Time_Adaptive_Lot_2_84', 'Ambiguity_New', 'Results_New'] }, { 'name': 'Belief_EFD', 'num_demo_participants': 1, 'app_sequence': ['Belief_EFD'] }, """ SESSION_CONFIGS = [ { 'name': 'Welcome', 'num_demo_participants': 1, 'app_sequence': ['Welcome'] }, { 'name': 'Risk', 'num_demo_participants': 1, 'app_sequence': ['Risk'] }, { 'name': 'Tme_Adaptive_Lot_1', 'num_demo_participants': 1, 'app_sequence': ['Time_Adaptive_Lot_1'], 'use_browser_bots': False, }, { 'name': 'Tme_Adaptive_Lot_1_84', 'num_demo_participants': 1, 'app_sequence': ['Time_Adaptive_Lot_1_84'], 'use_browser_bots': False, }, { 'name': 'Tme_Adaptive_Lot_2', 'num_demo_participants': 1, 'app_sequence': ['Time_Adaptive_Lot_2'], 'use_browser_bots': False, }, { 'name': 'Tme_Adaptive_Lot_2_84', 'num_demo_participants': 1, 'app_sequence': ['Time_Adaptive_Lot_2_84'], 'use_browser_bots': False, }, { 'name': 'Tme_Adaptive_CE', 'num_demo_participants': 1, 'app_sequence': ['Time_Adaptive_CE'], 'use_browser_bots': False, }, { 'name': 'Tme_Adaptive_CE_84', 'num_demo_participants': 1, 'app_sequence': ['Time_Adaptive_CE_84'], 'use_browser_bots': False, }, { 'name': 'Belief_EFD', 'num_demo_participants': 1, 'app_sequence': ['Welcome','Belief_EFD'] }, { 'name': 'Ambiguity_New', 'num_demo_participants': 1, 'app_sequence': ['Ambiguity_New', 'Optimism'] }, { 'name': 'Optimism', 'num_demo_participants': 1, 'app_sequence': ['Optimism'] }, { 'name': 'Fear', 'num_demo_participants': 1, 'app_sequence': ['Fear'] }, { 'name': 'Survey', 'num_demo_participants': 1, 'app_sequence': ['Survey'] }, { 'name': 'Welcome_Ambiguity_Results', 'num_demo_participants': 1, 'app_sequence': ['Welcome', 'Ambiguity_New', 'Results_New'], 'force_bonus_eligible': True, 'force_bonus_part': 3, }, { 'name': 'All_Prime_Lottery_CE_4w8w', 'num_demo_participants': 1, 'app_sequence': [ 'Welcome', 'Risk', 'Time_Adaptive_Lot_1', 'Time_Adaptive_CE', 'Time_Adaptive_Lot_2', 'Time_Adaptive_Lot_1_84', 'Time_Adaptive_CE_84', 'Time_Adaptive_Lot_2_84', 'Belief_EFD', 'Ambiguity_New', 'Optimism', 'Fear', 'Survey', 'Results_New', ], 'force_discount_seq': 1, # testing seq=1 'force_treatment_group': 'treatment', # testing treatment 'force_bonus_eligible': True, 'force_bonus_part': 2, }, { 'name': 'All_Prime_CE_Lottery_4w8w', 'num_demo_participants': 1, 'app_sequence': [ 'Welcome', 'Risk', 'Time_Adaptive_Lot_1', 'Time_Adaptive_CE', 'Time_Adaptive_Lot_2', 'Time_Adaptive_Lot_1_84', 'Time_Adaptive_CE_84', 'Time_Adaptive_Lot_2_84', 'Belief_EFD', 'Ambiguity_New', 'Optimism', 'Fear', 'Survey', 'Results_New', ], 'force_discount_seq': 2, 'force_treatment_group': 'treatment', }, { 'name': 'All_Prime_Lottery_CE_8w4w', 'num_demo_participants': 1, 'app_sequence': [ 'Welcome', 'Risk', 'Time_Adaptive_Lot_1', 'Time_Adaptive_CE', 'Time_Adaptive_Lot_2', 'Time_Adaptive_Lot_1_84', 'Time_Adaptive_CE_84', 'Time_Adaptive_Lot_2_84', 'Belief_EFD', 'Ambiguity_New', 'Optimism', 'Fear', 'Survey', 'Results_New', ], 'force_discount_seq': 3, # testing seq=1 'force_treatment_group': 'treatment', # testing treatment }, { 'name': 'All_Prime_CE_Lottery_8w4w', 'num_demo_participants': 1, 'app_sequence': [ 'Welcome', 'Risk', 'Time_Adaptive_Lot_1', 'Time_Adaptive_CE', 'Time_Adaptive_Lot_2', 'Time_Adaptive_Lot_1_84', 'Time_Adaptive_CE_84', 'Time_Adaptive_Lot_2_84', 'Belief_EFD', 'Ambiguity_New', 'Optimism', 'Fear', 'Survey', 'Results_New', ], 'force_discount_seq': 4, # ✅ 强制 seq=1 'force_treatment_group': 'treatment', # ✅ 强制 treatment }, { 'name': 'All_NoPrime_Lottery_CE_4w8w', 'num_demo_participants': 1, 'app_sequence': [ 'Welcome', 'Risk', 'Time_Adaptive_Lot_1', 'Time_Adaptive_CE', 'Time_Adaptive_Lot_2', 'Time_Adaptive_Lot_1_84', 'Time_Adaptive_CE_84', 'Time_Adaptive_Lot_2_84', 'Belief_EFD', 'Ambiguity_New', 'Optimism', 'Fear', 'Survey', 'Results_New', ], 'force_discount_seq': 1, # ✅ 强制 seq=1 'force_treatment_group': 'control', # ✅ 强制 treatment }, { 'name': 'All_NoPrime_CE_Lottery_4w8w', 'num_demo_participants': 1, 'app_sequence': [ 'Welcome', 'Risk', 'Time_Adaptive_Lot_1', 'Time_Adaptive_CE', 'Time_Adaptive_Lot_2', 'Time_Adaptive_Lot_1_84', 'Time_Adaptive_CE_84', 'Time_Adaptive_Lot_2_84', 'Belief_EFD', 'Ambiguity_New', 'Optimism', 'Fear', 'Survey', 'Results_New', ], 'force_discount_seq': 2, 'force_treatment_group': 'control', }, { 'name': 'All_NoPrime_Lottery_CE_8w4w', 'num_demo_participants': 1, 'app_sequence': [ 'Welcome', 'Risk', 'Time_Adaptive_Lot_1', 'Time_Adaptive_CE', 'Time_Adaptive_Lot_2', 'Time_Adaptive_Lot_1_84', 'Time_Adaptive_CE_84', 'Time_Adaptive_Lot_2_84', 'Belief_EFD', 'Ambiguity_New', 'Optimism', 'Fear', 'Survey', 'Results_New', ], 'force_discount_seq': 3, # ✅ 强制 seq=1 'force_treatment_group': 'control', # ✅ 强制 treatment }, { 'name': 'All_NoPrime_CE_Lottery_8w4w', 'num_demo_participants': 1, 'app_sequence': [ 'Welcome', 'Risk', 'Time_Adaptive_Lot_1', 'Time_Adaptive_CE', 'Time_Adaptive_Lot_2', 'Time_Adaptive_Lot_1_84', 'Time_Adaptive_CE_84', 'Time_Adaptive_Lot_2_84', 'Belief_EFD', 'Ambiguity_New', 'Optimism', 'Fear', 'Survey', 'Results_New', ], 'force_discount_seq': 4, # ✅ 强制 seq=1 'force_treatment_group': 'control', # ✅ 强制 treatment }, ] # see the end of this file for the inactive session configs # ISO-639 code # for example: de, fr, ja, ko, zh-hans LANGUAGE_CODE = 'en' # e.g. EUR, GBP, CNY, JPY REAL_WORLD_CURRENCY_CODE = '$' USE_POINTS = False ROOMS = [ dict(name='test1', display_name='Test room Prime Lot CE 4w8w'), dict(name='test2', display_name='Test room Prime CE Lot 4w8w'), dict(name='test3', display_name='Test room Prime Lot CE 8w4w'), dict(name='test4', display_name='Test room Prime CE Lot 8w4w'), dict(name='test5', display_name='Test room NoPrime Lot CE 4w8w'), dict(name='test6', display_name='Test room NoPrime CE Lot 4w8w'), dict(name='test7', display_name='Test room NoPrime Lot CE 8w4w'), dict(name='test8', display_name='Test room NoPrime CE Lot 8w4w'), ] ADMIN_USERNAME = 'buexp' # for security, best to set admin password in an environment variable ADMIN_PASSWORD = environ.get('OTREE_ADMIN_PASSWORD') DEMO_PAGE_INTRO_HTML = """ Here are some oTree games. """ # don't share this with anybody. SECRET_KEY = '@!e4i_+f86rf4w3pkmvy62q37r%xw*kal04r)c@5x#zi9g$9pi' # if an app is included in SESSION_CONFIGS, you don't need to list it here INSTALLED_APPS = ['otree'] # inactive session configs ### { ### 'name': 'trust', ### 'display_name': "Trust Game", ### 'num_demo_participants': 2, ### 'app_sequence': ['trust', 'payment_info'], ### }, ### { ### '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'], ### 'use_strategy_method': True, ### }, ### { ### 'name': 'ultimatum_non_strategy', ### 'display_name': "Ultimatum (direct response treatment)", ### 'num_demo_participants': 2, ### 'app_sequence': ['ultimatum', 'payment_info'], ### 'use_strategy_method': False, ### }, ### { ### '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': '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': 'public_goods_simple', ### 'display_name': "Public Goods (simple version from tutorial)", ### 'num_demo_participants': 3, ### 'app_sequence': ['public_goods_simple', 'payment_info'], ### }, ### { ### 'name': 'trust_simple', ### 'display_name': "Trust Game (simple version from tutorial)", ### 'num_demo_participants': 2, ### 'app_sequence': ['trust_simple'], ### },