def test_calculate_entries_without_registered_calculations(self): cols = ['braz', 'uiae', 'dummy_calc', 'nrtd'] cc = ColumnCalculator(cols) entries = ('braz', 'uiae', 1, 'nrtd', ) result = cc.add_entries(list(entries)) self.assertEqual(tuple(result), entries) result = cc.calculate_entries(list(entries)) self.assertEqual(result, entries)
def get_latest(cls, session, columns): cc = ColumnCalculator(columns) menu_entries = cls.map_names_to_attributes(columns) menu_entries = cc.add_entries(menu_entries) query = session.query(*menu_entries) query = query.order_by(cls.id.desc()) entry = query.first() return cc.calculate_entries(entry)
def test_add_entries(self): class DummyCalculation(object): name = 'dummy_calc' needed_columns = ['foo', 'bar'] ColumnCalculator.register_calculation(DummyCalculation) cols = ['braz', 'uiae', 'dummy_calc', 'nrtd'] cc = ColumnCalculator(cols) expected = ['braz', 'uiae', 'foo', 'bar', 'nrtd'] result = cc.add_entries(cols) self.assertEqual(result, expected)
def test_calculate_entries(self): class DummyCalculation(object): name = 'dummy_calc' needed_columns = ['foo', 'bar'] @staticmethod def calc(val1, val2): return val1 - val2 ColumnCalculator.register_calculation(DummyCalculation) cols = ['braz', 'uiae', 'dummy_calc', 'nrtd'] cc = ColumnCalculator(cols) entries = ['braz', 'uiae', 1, 5, 'nrtd'] result = cc.calculate_entries(entries) expected = ('braz', 'uiae', -4, 'nrtd', ) self.assertEqual(result, expected)
def get_values_in_timespan_wo_avg(cls, session, columns, span_with_resolution): cc = ColumnCalculator(columns) menu_entries = cls.map_names_to_attributes(columns) menu_entries = cc.add_entries(menu_entries) tsp_start = span_with_resolution.start_as_timestamp() tsp_end = span_with_resolution.end_as_timestamp() query = session.query(*menu_entries) query = query.filter(cls.tsp.between(tsp_start, tsp_end)) result = query.all() if len(result) != 0: result = tuple(cc.calculate_entries(r) for r in result) return result
def get_values_in_timespan_with_avg(cls, session, columns, span_with_resolution): cc = ColumnCalculator(columns) menu_entries = cls.map_names_to_attributes(columns) menu_entries = cc.add_entries(menu_entries) avg_columns = map(func.avg, menu_entries) ret = [] for avg_start, avg_end in span_with_resolution: query = session.query(*avg_columns) query = query.filter(cls.tsp.between(avg_start, avg_end)) result = query.all()[0] if result[0] is not None: ret.append(cc.calculate_entries(result)) return tuple(ret)