from ._builtin import Page, WaitPage from otree.api import Currency as c, currency_range from .models import Constants, levenshtein, distance_and_ok from django.conf import settings class Introduction(Page): pass class Transcribe(Page): timeout_seconds = 10 form_model = 'player' form_fields = ['transcribed_text'] def vars_for_template(self): return { 'image_path': 'real_effort/paragraphs/{}.png'.format( self.round_number), 'reference_text': Constants.reference_texts[self.round_number - 1], #'debug': settings.DEBUG, 'required_accuracy': 100 * (1 - Constants.allowed_error_rates[self.round_number - 1]) } def transcribed_text_error_message(self, transcribed_text): reference_text = Constants.reference_texts[self.round_number - 1] allowed_error_rate = Constants.allowed_error_rates[ self.round_number - 1] distance, ok = distance_and_ok(transcribed_text, reference_text, allowed_error_rate) #if ok: self.player.levenshtein_distance = distance #else: # if allowed_error_rate == 0: # return "The transcription should be exactly the same as on the image." # else: # return "This transcription appears to contain too many errors." class TransResults(Page): def vars_for_template(self): if self.player.levenshtein_distance == None: error = 1 else: error = self.player.levenshtein_distance / len(Constants.reference_texts[self.round_number - 1]) if error < 0.1: self.player.grade = "A" self.player.endowment = 20 elif error < 0.2: self.player.grade = "B" self.player.endowment = 15 elif error < 0.3: self.player.grade = "C" self.player.endowment = 10 elif error < 0.4: self.player.grade = "D" self.player.endowment = 5 else: self.player.grade = "F" self.player.endowment = 0 print(self.player.endowment) return { 'grade': self.player.grade, 'endowment': self.player.endowment, } class Request(Page): form_model = 'group' form_fields = ['request'] def is_displayed(self): return self.player.id_in_group == 1 class WaitForProposer(WaitPage): def is_displayed(self): return self.player.id_in_group == 2 class Accept(Page): form_model = 'group' form_fields = ['offer_accepted'] def is_displayed(self): return self.player.id_in_group == 2 and self.group.request == 'Yes' # # class AcceptStrategy(Page): # form_model = 'group' # form_fields = ['response_{}'.format(int(i)) for i in # Constants.offer_choices] # # def is_displayed(self): # return self.player.id_in_group == 2 and self.group.use_strategy_method class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): self.group.set_payoffs() class Results(Page): pass page_sequence = [Introduction, Transcribe, Request, WaitForProposer, Accept, ResultsWaitPage, Results]