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)