from . import * from enum import Enum class Case(Enum): TIMEOUT_DEMOGRAPHIC = "quiz Timeout Demographic" TIMEOUT_BIG_FIVE_1 = "quiz Timeout Big5_1" BIG_FIVE_1_ATTENTION_CHECK_FAILED = "quiz Big5_1 Attention Check failed" TIMEOUT_BIG_FIVE_2 = "quiz Timeout Big5_2" TIMEOUT_CRT = "quiz Timeout CRT" CRT_ALL_CORRECT = "quiz CRT all correct" CRT_NONE_CORRECT = "quiz CRT none correct" CRT_SOME_CORRECT = "quiz CRT none correct" class PlayerBot(Bot): cases = [case.value for case in [ Case.TIMEOUT_DEMOGRAPHIC, Case.TIMEOUT_BIG_FIVE_1, Case.BIG_FIVE_1_ATTENTION_CHECK_FAILED, Case.TIMEOUT_BIG_FIVE_2, Case.TIMEOUT_CRT, Case.CRT_ALL_CORRECT, Case.CRT_SOME_CORRECT, Case.CRT_NONE_CORRECT]] def play_round(self): if self.player.participant.timeout: print(f"Skipping case {self.case}") return print(f"Playing case {self.case}") # Demographic expect("Please answer the following questions.", "in", self.html) if self.case == Case.TIMEOUT_DEMOGRAPHIC.value: yield Submission( Demographic, timeout_happened=True, ) expect("You ran out of time", "in", self.html) expect(self.player.participant.timeout, True) return yield Submission(Demographic, {"age": 20, "gender": "Male", "countryborn": "Timbuktu", "countryres": "Germany", "language": "Yes"}) # Big5_1 expect("The following pages contain phrases describing people's behaviours", "in", self.html) if self.case == Case.TIMEOUT_BIG_FIVE_1.value: yield Submission( Big5_1, timeout_happened=True, ) expect("You ran out of time", "in", self.html) expect(self.player.participant.timeout, True) return if self.case == Case.BIG_FIVE_1_ATTENTION_CHECK_FAILED.value: yield Submission( Big5_1, {"B5_1_A": "Moderately Inaccurate", "B5_2_C": "Moderate", "B5_3_E": "Very Accurate", "B5_4_N": "Very Inaccurate", "B5_5_O": "Moderately Accurate", "B5_6_A": "Moderately Accurate", "B5_attention_check": "Moderately Accurate", "B5_7_C": "Moderately Accurate"} ) expect(self.player.participant.attention_check_quiz, "==", "Moderately Accurate") expect(self.player.participant.attention_check_failed, "==", True) else: previous = self.player.participant.attention_check_failed yield Submission( Big5_1, {"B5_1_A": "Moderately Inaccurate", "B5_2_C": "Moderate", "B5_3_E": "Very Accurate", "B5_4_N": "Very Inaccurate", "B5_5_O": "Moderately Accurate", "B5_6_A": "Moderately Accurate", "B5_attention_check": "Moderate", "B5_7_C": "Moderately Accurate"} ) expect(self.player.participant.attention_check_quiz, "==", "Moderate") if not previous: expect(self.player.participant.attention_check_failed, "==", False) # Big5_2 expect("The following pages contain phrases describing people's behaviours", "in", self.html) if self.case == Case.TIMEOUT_BIG_FIVE_2.value: yield Submission( Big5_2, timeout_happened=True, ) expect("You ran out of time", "in", self.html) expect(self.player.participant.timeout, True) return yield Submission(Big5_2, { "B5_8_E": "Moderately Accurate", "B5_9_N": "Moderate", "B5_10_O": "Very Inaccurate", "B5_11_A": "Very Accurate", "B5_12_C": "Moderate", "B5_13_E": "Moderately Inaccurate", "B5_14_N": "Moderately Inaccurate", "B5_15_O":"Moderately Inaccurate", }) # CRT expect("Please answer the following questions.", "in", self.html) if self.case == Case.TIMEOUT_CRT.value: yield Submission( CRT, timeout_happened=True, ) expect("You ran out of time", "in", self.html) expect(self.player.participant.timeout, True) return elif self.case == Case.CRT_NONE_CORRECT.value: yield Submission(CRT, { "CRT_1": 1, "CRT_2": 23, "CRT_3": 60, "CRT_4": 31, "CRT_5": 75, "CRT_6": 10, "CRT_7": 365 }) expect(self.player.participant.crt_score, "==", 0) elif self.case == Case.CRT_SOME_CORRECT.value: yield Submission(CRT, { "CRT_1": 5, # Correct "CRT_2": 23, "CRT_3": 60, "CRT_4": 31, "CRT_5": 20, # Correct "CRT_6": 10, "CRT_7": 365 }) expect(self.player.participant.crt_score, "==", 2) else: # All correct yield Submission(CRT, { "CRT_1": 5, "CRT_2": 2, "CRT_3": 23, "CRT_4": 4, "CRT_5": 20, "CRT_6": 29, "CRT_7": 4 }) expect(self.player.participant.crt_score, "==", 7)