from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'David Danz, Marissa Lepper' doc = """ Pre-experiment technical tests: JavaScript, internet speed test (via live pages), audio, fullscreen enforced (Chrome, Edge, or Firefox browser only). """ class Constants(BaseConstants): name_in_url = 'test_app' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): def creating_session(self): labels = ['P' + str(k) for k in range(1, self.session.num_participants + 1)] for p, label in zip(self.get_players(), labels): p.participant.label = str(label) def vars_for_admin_report(self): latencies = list() for p in self.get_players(): latencies.append({ 'id': p.participant.id_in_session, 1: p.latency_1, 2: p.latency_2, 3: p.latency_3, 4: p.latency_4, 5: p.latency_5, }) return dict( latencies=latencies, ) class Group(BaseGroup): pass class Player(BasePlayer): audio_test = models.IntegerField(doc="Participant enters value from audio.") latency_1 = models.IntegerField(doc="Latency for live method, measure 1.") latency_2 = models.IntegerField(doc="Latency for live method, measure 2.") latency_3 = models.IntegerField(doc="Latency for live method, measure 3.") latency_4 = models.IntegerField(doc="Latency for live method, measure 4.") latency_5 = models.IntegerField(doc="Latency for live method, measure 5.") def live_ping(self, data): if data['type'] == 'ping': response = dict( type='ping_response', ping_id=data['ping_id'], time_send=data['time_send'], ) return {self.id_in_group: response}