Example #1
0
def experiment_checkin(request):

    form = ExperimentCheckinForm(request.POST)

    if form.is_valid():
        data = form.cleaned_data

        experiment = Experiment.objects.get(key=data.get("experiment_key"))

        checkin = Checkin()
        checkin.experiment = experiment
        checkin.checkin_time = timezone.now()
        checkin.did_follow_instructions = data.get("did_follow_instructions")
        checkin.happiness = data.get("happy")
        checkin.stress = data.get("stress")
        checkin.productivity = data.get("productivity")
        checkin.leisure_time = data.get("leisure_time")
        checkin.app_version = data.get("app_version", "")

        day = (checkin.checkin_time.date() - experiment.start_time.date()).days + 1

        checkin.save()

        result = dict(day=day)

        should_end, ended_early, restarted_stage = experiment.should_end_stage()

        if restarted_stage:
            result['restarted_stage'] = restarted_stage
            experiment.save()

        if should_end:
            result['new_stage'] = True
            result['ended_early'] = ended_early
            experiment.end_stage()
            experiment.save()

        inputs, outputs = experiment.get_stage_data(experiment.current_stage, always_get_median=True)
        result['stage_inputs'] = inputs
        result['stage_outputs'] = outputs
        result['target'] = experiment.get_daily_target(experiment.current_stage, len(result['stage_inputs']) - 1)
        result['current_stage'] = experiment.current_stage

        if not experiment.is_active:
            experiment.calculate_results()
            experiment.save()
            result['is_complete'] = True
            result['result_value'] = experiment.result_value
            result['result_confidence'] = experiment.result_confidence
            result['stage_results'] = experiment.stage_results

        return json_response(success=True, key=experiment.key, result=result)

    return json_response(success=False)