class PythonMapTransform(BaseTransform): """Transform implementation that maps items using Python expressions """ supported_options = {"map": {"type": six.string_types}} def __init__(self, *args, **kwargs): super(PythonMapTransform, self).__init__(*args, **kwargs) self.map_expression = self.read_option("map") self.interpreter = Interpreter() self.interpreter.check(self.map_expression) def _map_item(self, it): context = create_context(item=it) return self.interpreter.eval(expression=self.map_expression, context=context) def transform_batch(self, batch): return (self._map_item(it) for it in batch)
class PythonInterpreterTest(unittest.TestCase): def setUp(self): self.interpreter = Interpreter() def test_check(self): with self.assertRaises(InvalidExpression): self.interpreter.check(5) with self.assertRaises(InvalidExpression): self.interpreter.check('') with self.assertRaises(SyntaxError): self.interpreter.check('This is not a valid expression') with self.assertRaises(InvalidExpression): self.interpreter.check('2+2; 5+6')
class PythonMapTransform(BaseTransform): """Transform implementation that maps items using Python expressions """ supported_options = { "map": { 'type': six.string_types }, } def __init__(self, *args, **kwargs): super(PythonMapTransform, self).__init__(*args, **kwargs) self.map_expression = self.read_option('map') self.interpreter = Interpreter() self.interpreter.check(self.map_expression) def _map_item(self, it): context = create_context(item=it) return self.interpreter.eval(expression=self.map_expression, context=context) def transform_batch(self, batch): return (self._map_item(it) for it in batch)