def __init__(self, words_dict, ask_lang, ans_lang, avoid_repeat=True): if ask_lang == ans_lang: raise ValueError(u'Answer language cannot be the same as answer language (%s)' % ask_lang) self.words_dict = words_dict self.ask_lang = ask_lang self.ans_lang = ans_lang if avoid_repeat: self.randomizer = AvoidRepeatRandomizer(0, len(self.words_dict) - 1) else: self.randomizer = SimpleRandomizer(0, len(self.words_dict) - 1)
class WordsTestEngine: def __init__(self, words_dict, ask_lang, ans_lang, avoid_repeat=True): if ask_lang == ans_lang: raise ValueError(u'Answer language cannot be the same as answer language (%s)' % ask_lang) self.words_dict = words_dict self.ask_lang = ask_lang self.ans_lang = ans_lang if avoid_repeat: self.randomizer = AvoidRepeatRandomizer(0, len(self.words_dict) - 1) else: self.randomizer = SimpleRandomizer(0, len(self.words_dict) - 1) def reset(self): self.randomizer.reset() def get_dict_entry(self, index=None): index = self.randomizer.next_random() if index is None else index return self.words_dict[index] def get_expected_answers(self, dict_entry): expected_answers_list = dict_entry[self.ans_lang] expected_answers = expected_answers_list.split(u'|') lowered_expected_answers = map(lambda s: s.lower(), expected_answers) return lowered_expected_answers def get_error(self, dict_entry, answer): lowered_answer = answer.lower() expected_answers = self.get_expected_answers(dict_entry) if lowered_answer not in expected_answers: question = dict_entry[self.ask_lang] return { u'expected': expected_answers, u'answer': answer, u'question': question, } else: return None