from otree.api import * from .functions import slider import random, time import json doc = """ Murphy, Ackermann, and Handgraaf(2011) 'Measuring Social Value Orientation' Judgment and Decision Making DOI:10.2139/ssrn.1804189 """ class C(BaseConstants): NAME_IN_URL = 'survey_svo' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): for p in subsession.get_players(): p.order_slider = json.dumps(random.sample(range(1, 7), 6)) class Group(BaseGroup): pass class Player(BasePlayer): #### SVO #### order_slider = models.LongStringField() slider_angle = models.FloatField() slider_classification = models.CharField() slider1 = models.FloatField() slider2 = models.FloatField() slider3 = models.FloatField() slider4 = models.FloatField() slider5 = models.FloatField() slider6 = models.FloatField() time_stamp_svo = models.FloatField(blank=True) # PAGES class SVO(Page): form_model = 'player' @staticmethod def get_form_fields(player: Player): order_slider = json.loads(player.order_slider) return ['slider{}'.format(num) for num in order_slider] def vars_for_template(player): return {'slider_items': json.loads(player.order_slider)} def before_next_page(player, timeout_happened): chosen_values = { 'item1': int(player.slider1), 'item2': int(player.slider2), 'item3': int(player.slider3), 'item4': int(player.slider4), 'item5': int(player.slider5), 'item6': int(player.slider6) } mean_allocations = slider.mean_allocations_continuous(chosen_values) svo_slider_angle = slider.svo_angle(mean_allocations['self'], mean_allocations['other']) player.slider_angle = svo_slider_angle player.slider_classification = slider.svo_classification(svo_slider_angle) player.time_stamp_svo = time.time() page_sequence = [SVO]