def test_produces_correct_python(self): self.assertEquals( get_python_formula_from_parse_tree( parse('=[x * A1 for x in range(5)]')), '[x * worksheet[(1,1)].value for x in range(5)]') self.assertEquals( get_python_formula_from_parse_tree( parse('=[x in A1:B3 for x in range(5)]')), '[x in CellRange(worksheet,(1,1),(2,3)) for x in range(5)]') self.assertEquals( get_python_formula_from_parse_tree(parse('={1 -> B1}')), '{1 :worksheet[(2,1)].value }') self.assertEquals( get_python_formula_from_parse_tree( parse('=(lambda x -> C1 * x)(2)')), '(lambda x :worksheet[(3,1)].value * x)(2)')
def test_flattens_rewrites_and_removes_1st_char(self, mock_rewrite): mock_rewrite.return_value = Mock() mock_rewrite.return_value.flatten.return_value = '123' result = get_python_formula_from_parse_tree(sentinel.parsed_formula) self.assertCalledOnce(mock_rewrite, sentinel.parsed_formula) self.assertCalledOnce(mock_rewrite.return_value.flatten) self.assertEquals(result, '23')
def test_flattens_rewrites_and_removes_1st_char(self, mock_rewrite): mock_rewrite.return_value = Mock() mock_rewrite.return_value.flatten.return_value = '123' result = get_python_formula_from_parse_tree(sentinel.parsed_formula) self.assertCalledOnce(mock_rewrite, sentinel.parsed_formula) self.assertCalledOnce(mock_rewrite.return_value.flatten) self.assertEquals(result, '23')
def test_produces_correct_python(self): self.assertEquals( get_python_formula_from_parse_tree(parse( '=[x * A1 for x in range(5)]' )), '[x * worksheet[(1,1)].value for x in range(5)]' ) self.assertEquals( get_python_formula_from_parse_tree(parse( '=[x in A1:B3 for x in range(5)]' )), '[x in CellRange(worksheet,(1,1),(2,3)) for x in range(5)]' ) self.assertEquals( get_python_formula_from_parse_tree(parse('={1 -> B1}')), '{1 :worksheet[(2,1)].value }' ) self.assertEquals( get_python_formula_from_parse_tree(parse('=(lambda x -> C1 * x)(2)')), '(lambda x :worksheet[(3,1)].value * x)(2)' )
def _set_formula(self, value): self._python_formula = None if value is None: self._formula = None elif type(value) == str or type(value) == unicode: self._formula = value if value.startswith('='): try: parsed_formula = parser.parse(value) self.dependencies = get_dependencies_from_parse_tree(parsed_formula) self._python_formula = get_python_formula_from_parse_tree(parsed_formula) except FormulaError, e: self.dependencies = [] self._python_formula = '_raise(FormulaError("{}"))'.format(e)
def _set_formula(self, value): self._python_formula = None if value is None: self._formula = None elif type(value) == str or type(value) == unicode: self._formula = value if value.startswith('='): try: parsed_formula = parser.parse(value) self.dependencies = get_dependencies_from_parse_tree( parsed_formula) self._python_formula = get_python_formula_from_parse_tree( parsed_formula) except FormulaError, e: self.dependencies = [] self._python_formula = '_raise(FormulaError("{}"))'.format( e)
def test_converts_cell_references_and_adds_space(self): self.assertEquals( get_python_formula_from_parse_tree(parse('=A1')), "worksheet[(1,1)].value " )
def test_converts_formula_starting_with_equals(self): self.assertEquals(get_python_formula_from_parse_tree(parse('=1')), "1") self.assertEquals(get_python_formula_from_parse_tree(parse('=1+2')), "1+2")
def test_converts_cell_references_and_adds_space(self): self.assertEquals(get_python_formula_from_parse_tree(parse('=A1')), "worksheet[(1,1)].value ")
def test_converts_formula_starting_with_equals(self): self.assertEquals(get_python_formula_from_parse_tree(parse('=1')), "1") self.assertEquals(get_python_formula_from_parse_tree(parse('=1+2')), "1+2")