def glucodyn(): """Renders a GlucoDyn prediction graph from the current pump settings and recent history""" try: pump_datetime = parse(pump.read_clock()) bginitial, glucose_datetime = pump.glucose_level_at_datetime(pump_datetime) # Glucodyn template data settings = { "pump_time_string": glucose_datetime.strftime('%I:%M:%S %p'), "cratio": pump.carb_ratio_at_time(glucose_datetime.time()), "sensf": pump.insulin_sensitivity_at_time(glucose_datetime.time()), "idur": pump.insulin_action_curve(), "bginitial": bginitial, "stats": 1, "inputeffect": 1 } max_carb_absorption = 4 settings["simlength"] = max(settings["idur"], max_carb_absorption) start_datetime = glucose_datetime - timedelta(hours=settings["simlength"]) pump_history = pump.history_in_range( start_datetime, glucose_datetime ) basal_schedule = pump.basal_schedule() except CalledProcessError as e: raise Exception('{} returned status {}: {}'.format(e.cmd, e.returncode, e.output)) else: parser = NormalizeRecords( ResolveHistory( ReconcileHistory( CleanHistory(pump_history, start_datetime=start_datetime).clean_history ).reconciled_history, current_datetime=pump_datetime ).resolved_records, basal_schedule=basal_schedule, zero_datetime=glucose_datetime ) gdeh = GlucoDynEventHistory(parser.normalized_records) current_basal_rate = parser.basal_rates_in_range( pump_datetime.time(), (pump_datetime + timedelta(hours=1)).time() )[0] settings["simlength"] += (gdeh.latest_end_at / 60.0) return render_template( 'glucodyn.html', userdata=settings, cache_info=pump.cache_info(), pump_history=pump_history, basal_schedule=basal_schedule, uevent=gdeh.uevent, current_basal_rate=current_basal_rate )
def test_basal_rates_in_range(self): h = NormalizeRecords([], self.basal_rate_schedule) self.assertListEqual( self.basal_rate_schedule, h.basal_rates_in_range(time(0, 0), time(23, 59)) ) self.assertListEqual( self.basal_rate_schedule[0:1], h.basal_rates_in_range(time(0, 0), time(1, 0)) ) self.assertListEqual( self.basal_rate_schedule[1:3], h.basal_rates_in_range(time(4, 0), time(9, 0)) ) self.assertListEqual( self.basal_rate_schedule[5:6], h.basal_rates_in_range(time(16, 0), time(20)) ) with self.assertRaises(AssertionError): h.basal_rates_in_range(time(4), time(4)) with self.assertRaises(AssertionError): h.basal_rates_in_range(time(4), time(3))
def test_basal_adjustments_in_range(self): h = NormalizeRecords( [], self.basal_rate_schedule, zero_datetime=datetime(2015, 01, 01, 12) ) with self.assertRaises(AssertionError): h._basal_adjustments_in_range( datetime(2015, 01, 02), datetime(2015, 01, 01), percent=100 ) with self.assertRaises(AssertionError): h._basal_adjustments_in_range( datetime(2015, 01, 01), datetime(2015, 01, 02, 4), percent=100 ) with self.assertRaises(AssertionError): h._basal_adjustments_in_range(datetime(2015, 01, 01), datetime(2015, 01, 01, 4)) basal = TempBasal( start_at=datetime(2015, 01, 01, 05), end_at=datetime(2015, 01, 01, 06), amount=0.925, unit="U/hour", description="Testing" ) self.assertDictEqual( basal, h._basal_adjustments_in_range( datetime(2015, 01, 01, 05), datetime(2015, 01, 01, 06), percent=200, description="Testing" )[0] ) self.assertDictEqual( basal, h._basal_adjustments_in_range( datetime(2015, 01, 01, 05), datetime(2015, 01, 01, 06), absolute=1.85, description="Testing" )[0] ) self.assertListEqual( [ TempBasal( start_at=datetime(2015, 01, 01, 23), end_at=datetime(2015, 01, 01, 23, 59, 59), amount=-0.45, unit="U/hour", description="" ), TempBasal( start_at=datetime(2015, 01, 02), end_at=datetime(2015, 01, 02, 02), amount=-0.45, unit="U/hour", description="" ) ], h._basal_adjustments_in_range( datetime(2015, 01, 01, 23), datetime(2015, 01, 02, 02), percent=50 ) )