from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random class Welcome(Page): def is_displayed(self): # Also attempt capture here (covers cases where the wait page didn't see the query) if not self.participant.vars.get('prolific_captured'): req = getattr(self.session, 'get_http_request', lambda: None)() if req: q = getattr(req, 'GET', {}) or {} pid = (q.get('PROLIFIC_PID') or q.get('prolific_pid') or q.get('participant_label') or q.get('participant')) sid = q.get('STUDY_ID') or q.get('prolific_study_id') sess = q.get('SESSION_ID') or q.get('prolific_session_id') if not pid: pid = getattr(self.participant, 'label', None) stored_any = False if pid and not getattr(self.participant, 'prolific_pid', None): self.participant.prolific_pid = pid stored_any = True if sid and not getattr(self.participant, 'prolific_study_id', None): self.participant.prolific_study_id = sid stored_any = True if sess and not getattr(self.participant, 'prolific_session_id', None): self.participant.prolific_session_id = sess stored_any = True if stored_any: self.participant.vars['prolific_captured'] = True if not reservation_active(self.session, self.participant): self.participant.vars['expired'] = True return False return self.round_number == 1 def before_next_page(self): if not reservation_active(self.session, self.participant): self.participant.vars['expired'] = True return self.player.payoff = cu(2) touch_reservation(self.session, self.participant) class Instructions(Page): pass class Bonus(Page): pass class Page1(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page2(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page3(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page4(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page5(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page6(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page7(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page8(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page9(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page10(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page11(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page12(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page13(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page14(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page15(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page16(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page17(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page18(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page19(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page20(Page): def is_displayed(self): return self.player.treatment_group == 1 class Page21(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page22(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page23(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page24(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page25(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page26(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page27(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page28(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page29(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page30(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page31(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page32(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page33(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page34(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page35(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page36(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page37(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page38(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page39(Page): def is_displayed(self): return self.player.treatment_group == 2 class Page40(Page): def is_displayed(self): return self.player.treatment_group == 2 class FinalDecision(Page): form_model = 'player' form_fields = ['choices'] class Results(Page): def vars_for_template(self): p = self.player lottery2 = [0, 2, 2, 2, 2] if p.choices == 2: p.lottery_outcome = 1.5 else: p.lottery_outcome = random.choice(lottery2) return dict( what_is_the_answer_to_choices=self.player.choices, x=p.lottery_outcome, y=p.lottery_outcome + 1.7, ) def before_next_page(self): self.player.payoff = self.player.lottery_outcome class FinalPage(Page): form_model='player' form_fields=['probability_of_the_rare_event'] class FinalQuestion(Page): form_model='player' form_fields=['X'] class AfterR(Page): pass page_sequence = [ Instructions, Bonus, Page1, Page2, Page3, Page4, Page5, Page6, Page7, Page8, Page9, Page10, Page11, Page12, Page13, Page14, Page15, Page16, Page17, Page18, Page19, Page20, Page21, Page22, Page23, Page24, Page25, Page26, Page27, Page28, Page29, Page30, Page31, Page32, Page33, Page34, Page35, Page36, Page37, Page38, Page39, Page40, FinalDecision, Results, FinalPage, FinalQuestion, AfterR ]