def parse_input_process_output(self): for type_of_token, tokens in self.parser.parse_single_line(): line = '' for i in tokens: line = line + i + ' ' #print line if type_of_token == 'ALIAS': trade_symbol = TradeSymbol.parse_trade_symbol(tokens) if isinstance(trade_symbol, str): print trade_symbol , ' -> ' , line else: self.trade_symbols [ trade_symbol.get_name() ] = trade_symbol elif type_of_token == 'TRADE': trade_items = TradeItem.parse_trade_item( line , self.trade_symbols) error_logged = False for trade_item in trade_items: if isinstance(trade_item,str) or trade_item == None: if not error_logged: print "Failed to parse line -> " , line error_logged = True else: self.trade_items[ trade_item.get_name() ] = trade_item elif type_of_token == 'UNKNOWN': print "I have no idea what you are talking about -> " , line elif type_of_token == 'QUESTION': q = Question(line) q.parse_question( self.trade_symbols, self.trade_items ) if not q.is_valid(): print q.get_answer() + ' -> ' + q.get_question() else: print q.get_answer()
class test_question(unittest.TestCase): def setUp(self): self.q = Question(1, "some text", True) def test_get_question_id(self): id = self.q.get_question_id() assert id == 1 def test_set_question_text(self): self.q.set_question_text("test is best") assert self.q.get_question_text() == "test is best" def test_set_has_difficulty_level(self): self.q.set_has_difficulty_level(True) assert self.q.get_has_difficulty_level() == True def test_add_alternative(self): self.q.add_alternative(0, "An alternative", True) self.q.add_alternative(1, "An alternative 2", False) alternatives = self.q.get_alternatives() assert len(alternatives) == 2 def test_add_alternative_negative(self): self.q.add_alternative("A", "An alternative", True) alternatives = self.q.get_alternatives() assert len(alternatives) == 0 def test_is_valid(self): self.q.set_question_text("test is best") self.q.add_alternative(0, "An alternative", True) self.q.add_alternative(1, "An alternative 2", False) valid = self.q.is_valid() assert valid == True def test_is_valid_id_negative(self): self.q.set_question_id(0) valid = self.q.is_valid() assert valid == False def test_is_valid_text_negative(self): self.q.set_question_id(1) self.q.set_question_text("") valid = self.q.is_valid() assert valid == False def test_is_valid_difficulty_level_negative(self): self.q.set_question_id(1) self.q.set_question_text("Test question") self.q.set_has_difficulty_level(None) valid = self.q.is_valid() assert valid == False def test_is_valid_alternatives_negative(self): self.q.set_question_id(1) self.q.set_question_text("Test question") self.q.set_has_difficulty_level(True) valid = self.q.is_valid() assert valid == False def test_to_json(self): self.q.set_question_text("test is best") self.q.add_alternative(0, "An alternative", True) json = self.q.to_json() assert "id" in json assert "question" in json assert "alternatives" in json assert "has_difficulty_level" in json assert "id" in json["alternatives"][0] assert "text" in json["alternatives"][0] assert "isCorrect" in json["alternatives"][0] assert json["id"] == 1 assert json["question"] == "test is best" assert json["has_difficulty_level"] == True assert json["alternatives"][0]["id"] == 0 assert json["alternatives"][0]["text"] == "An alternative" assert json["alternatives"][0]["isCorrect"] == True
class test_question(unittest.TestCase): def setUp(self): self.q = Question(1, "some text", True) def test_get_question_id(self): id = self.q.get_question_id() assert id == 1 def test_set_question_text(self): self.q.set_question_text("test is best") assert self.q.get_question_text() == "test is best" def test_set_has_difficulty_level(self): self.q.set_has_difficulty_level(True) assert self.q.get_has_difficulty_level() == True def test_add_alternative(self): self.q.add_alternative(0, "An alternative", True) self.q.add_alternative(1, "An alternative 2", False) alternatives = self.q.get_alternatives(); assert len(alternatives) == 2 def test_add_alternative_negative(self): self.q.add_alternative("A", "An alternative", True) alternatives = self.q.get_alternatives() assert len(alternatives) == 0 def test_is_valid(self): self.q.set_question_text("test is best") self.q.add_alternative(0, "An alternative", True) self.q.add_alternative(1, "An alternative 2", False) valid = self.q.is_valid() assert valid == True def test_is_valid_id_negative(self): self.q.set_question_id(0) valid = self.q.is_valid() assert valid == False def test_is_valid_text_negative(self): self.q.set_question_id(1) self.q.set_question_text("") valid = self.q.is_valid() assert valid == False def test_is_valid_difficulty_level_negative(self): self.q.set_question_id(1) self.q.set_question_text("Test question") self.q.set_has_difficulty_level(None) valid = self.q.is_valid() assert valid == False def test_is_valid_alternatives_negative(self): self.q.set_question_id(1) self.q.set_question_text("Test question") self.q.set_has_difficulty_level(True) valid = self.q.is_valid() assert valid == False def test_to_json(self): self.q.set_question_text("test is best") self.q.add_alternative(0, "An alternative", True) json = self.q.to_json() assert "id" in json assert "question" in json assert "alternatives" in json assert "has_difficulty_level" in json assert "id" in json["alternatives"][0] assert "text" in json["alternatives"][0] assert "isCorrect" in json["alternatives"][0] assert json["id"] == 1 assert json["question"] == "test is best" assert json["has_difficulty_level"] == True assert json["alternatives"][0]["id"] == 0 assert json["alternatives"][0]["text"] == "An alternative" assert json["alternatives"][0]["isCorrect"] == True
for line in sys.stdin: if line.strip() == "": # empty line cannot be parsed, causes crashes if not skipped continue lines = line.split('\t') if not lines: continue if len(lines) == 1: # solely for testing, so that we don't have to use official format question = Question("", lines[0].strip()) else: question = Question(lines[0], lines[1].strip()) if not question.is_valid(): continue pre_process.process(question) # print(question) syntax_parser.parse(question) for token in question.syntax[question.syntax_root].subtree: # print('\t'.join((token.text, token.lemma_, token.pos_, token.tag_, token.dep_, token.head.lemma_, str(token.i)))) if token.dep_ == "pobj" and token.tag_ == "CD" and not question.time_filter: # save the first of multiple years question.set_time_filter(token.text) if question.time_filter: if standardStrategy(question.syntax, question.syntax_root): continue