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 Transcribe(Page): timeout_seconds = 3 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 Results(Page): # def is_displayed(self): # return self.round_number == Constants.num_rounds def vars_for_template(self): error = self.player.levenshtein_distance/len(Constants.reference_texts[self.round_number - 1]) if error < 0.1: self.player.grade = "A" self.player.init_payoff = 20 elif error < 0.2: self.player.grade = "B" self.player.init_payoff = 15 elif error < 0.3: self.player.grade = "C" self.player.init_payoff = 10 elif error < 0.4: self.player.grade = "D" self.player.init_payoff = 5 else: self.player.grade = "F" self.player.init_payoff = 0 return {'grade': self.player.grade, 'init_payoff': self.player.init_payoff, } # def vars_for_template(self): # table_rows = [] # # for prev_player in self.player.in_all_rounds(): # row = { # 'round_number': prev_player.round_number, # 'reference_text_length': len(Constants.reference_texts[prev_player.round_number - 1]), # 'transcribed_text_length': len(prev_player.transcribed_text), # 'distance': prev_player.levenshtein_distance, # } # # # table_rows.append(row) # # return {'table_rows': table_rows} page_sequence = [Transcribe, Results]