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): 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." def before_next_page(self): self.player.payoff = 0 class Results(Page): def is_displayed(self): return self.round_number == Constants.num_rounds 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]