def parsed_expression(self, context): from corehq.apps.userreports.expressions.factory import ExpressionFactory expression = ExpressionFactory.from_spec(self.expression, context) datatype_transform = transform_from_datatype(self.datatype) if self.transform: generic_transform = TransformFactory.get_transform(self.transform).get_transform_function() inner_getter = TransformedGetter(expression, generic_transform) else: inner_getter = expression return TransformedGetter(inner_getter, datatype_transform)
def getter(self): transform = transform_for_datatype(self.datatype) getter = getter_from_property_reference(self) return TransformedGetter(getter, transform)
def test_basic(self): getter = TransformedGetter(self.base_getter, lambda x: '{}-transformed'.format(x)) self.assertEqual('bar-transformed', getter({'foo': 'bar'})) self.assertEqual('1-transformed', getter({'foo': 1}))
def test_no_transform(self): getter = TransformedGetter(self.base_getter, None) self.assertEqual('bar', getter({'foo': 'bar'})) self.assertEqual(1, getter({'foo': 1}))
def expression(self): transform = transform_from_datatype(self.datatype) getter = NestedDictGetter(self.property_path) return TransformedGetter(getter, transform)