from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import time from main.scenarios import GraphType class ID(Page): # this page is only shown if no participant ID was captured # the participant cannot get beyond this page def is_displayed(self): return not self.player.participant.label class Consent(Page): form_model = 'player' form_fields = ['consent'] def app_after_this_page(self, upcoming_apps): p = self.player if not p.consent: p.participant.vars['screenout'] = True return 'gapfish' def before_next_page(self): self.participant.vars['start'] = time.time() class Example(Page): form_model = 'player' form_fields = ['example_x_left', 'example_y_left', 'example_x_right', 'example_y_right'] def vars_for_template(self): p = self.player.participant return dict( user_left="C1L.png", user_right="C3R.png", user_middle=f"AV{p.vars['people_middle']}.png", people_left=1, people_right=3, people_middle=p.vars['people_middle'], skulls_left=range(1), skulls_right=range(3), skulls_middle=range(p.vars['people_middle']), is_biker=False, graph1=p.vars['graph1'], graph2=p.vars['graph2'], fatality=GraphType.FATALITY.value, accident=GraphType.ACCIDENT.value, no_graph=GraphType.NONE.value ) class Control(Page): form_model = 'player' form_fields = ['control1', 'control2'] def app_after_this_page(self, upcoming_apps): p = self.player if not (p.control1 and p.control2): p.participant.vars['invalid'] = True return 'gapfish' class Success(Page): def before_next_page(self): self.participant.vars['start_trolley'] = time.time() page_sequence = [ID, Consent, Example, Control, Success]