from otree.api import Bot, Submission from . import * class PlayerBot(Bot): def play_round(self): # Consent + intro pages (no forms) yield Consent yield Intro01 yield Intro02 yield Intro03 yield Intro04 yield Intro05 yield Intro06 yield Intro07 yield Intro08 # Intro09 (live page: simulate draws) yield Submission(Intro09, {}, check_html=False) self.player.num_pf_draws += 1 # simulate at least one draw yield Intro10 yield Intro11 yield Intro12 # Intro13 (live page: simulate draws) yield Submission(Intro13, {}, check_html=False) self.player.num_pr_draws += 1 yield Intro14 # Intro15 (practice rankings) yield Intro15, dict( prac_rank1='A', prac_rank2='B', prac_rank3='C', prac_rank4='D', prac_rank5='E', prac_rank6='F', prac_cap2_rank1='A', prac_cap2_rank2='B', ) yield Intro16 # ========================= # Intro17 QUIZ PAGE 1 (Q1-3) # First attempt: WRONG # ========================= yield SubmissionMustFail( Intro17, dict( quiz_q1='100 points', # wrong quiz_q2='100 points', # wrong quiz_q3=1, # wrong ) ) assert self.player.quiz_attempts1 == 1 # Second attempt: CORRECT yield Intro17, dict( quiz_q1='220 points', quiz_q2='300 points', quiz_q3=124, ) assert self.player.participant.passed_quiz is True # ========================= # Intro18 QUIZ PAGE 2 (Q4-5) # First attempt: WRONG # ========================= yield SubmissionMustFail( Intro18, dict( quiz_q4='b', # wrong quiz_q5_a=True, quiz_q5_b=False, quiz_q5_c=True, quiz_q5_d=True, quiz_q5_e=True, quiz_q5_f=False, quiz_q5_none=False, ) ) assert self.player.quiz_attempts2 == 1 # Second attempt: CORRECT yield Intro18, dict( quiz_q4='a', quiz_q5_a=False, quiz_q5_b=True, quiz_q5_c=False, quiz_q5_d=False, quiz_q5_e=False, quiz_q5_f=True, quiz_q5_none=True, ) assert self.player.participant.passed_quiz is True yield Intro19 yield Intro20a yield Intro20b yield Intro20c yield Intro20d yield Intro21 # Intro22 (must rank at least one) yield Intro22, dict( prac_round_rank1='A', prac_round_rank2='B', ) yield Intro23 # Intro24 (must change both at least once) yield SubmissionMustFail( Intro24, dict(prac23_changed_ranking=0, prac23_changed_priority=0), ) yield Intro24, dict( prac23_changed_ranking=1, prac23_changed_priority=1, ) yield Intro25 yield Intro26 yield Intro27 yield Intro28 yield Intro29 yield Intro30 yield Intro31 # Intro32 (slider) yield Intro32, dict(prac_ep=150) # Intro33 (beliefs) yield Intro33, dict( prac_beliefA=50, prac_beliefB=50, prac_beliefC=50, prac_beliefD=50, prac_beliefE=50, prac_beliefF=50, ) yield Intro34, dict(saw_ap_hint=True) yield Intro35 yield Intro36 yield Intro37 # ========================= # Intro38 QUIZ 2 (fail once) # ========================= yield SubmissionMustFail( Intro38, dict( quiz2_beliefA=0, quiz2_beliefB=0, quiz2_beliefC=0, quiz2_beliefD=0, quiz2_beliefE=0, quiz2_beliefF=0, ), ) assert self.player.quiz2_err_ct == 1 yield Intro38, dict( quiz2_beliefA=100, quiz2_beliefB=100, quiz2_beliefC=100, quiz2_beliefD=100, quiz2_beliefE=100, quiz2_beliefF=100, ) # ========================= # Intro39 QUIZ 3 (fail once) # ========================= yield SubmissionMustFail( Intro39, dict(quiz3_q1='b') ) assert self.player.quiz3_err_ct == 1 yield Intro39, dict(quiz3_q1='a')