Ejemplo n.º 1
0
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
            )
        )