def interval_average(): """ calculate the average heartrate since a given time via post :return: json containing the average, or error message """ interval_request = request.get_json() pat_id = interval_request["patient_id"] if heart_server_helpers.validate_patient(pat_id) is False: return jsonify({"Error": "invalid patient ID"}) if heart_server_helpers.exisiting_beats(pat_id) is False: return jsonify({"Error": "no heartbeats recorded for patient"}) start_time = interval_request["heart_rate_average_since"] try: datetime.datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S.%f") except ValueError: return jsonify({"Error": "Enter date a YYYY-mm-dd HH:MM:SS.ffffff"}) interval_average = heart_server_helpers.hr_avg_since(pat_id, start_time) return jsonify({"interval_average": interval_average})
def heart_rate(): """ Add a heart rate to the database for a given patient via post :return: json indicating success adding heart rate, or error message """ heart_data = request.get_json() pat_id = heart_data["patient_id"] rate = heart_data["heart_rate"] if not isinstance(rate, int): return jsonify({"Error": "non-integer value for heart rate"}) if heart_server_helpers.validate_patient(pat_id) is False: return jsonify({"Error": "invalid patient ID"}) for user in Patient.objects.raw({"_id": pat_id}): patient = user try: existing_hr = patient.heart_rate existing_hr.append(rate) patient.heart_rate = existing_hr existing_hr_times = patient.h_r_times existing_hr_times.append(datetime.datetime.now()) patient.h_r_times = existing_hr_times except: print('exception handled') patient.heart_rate = [rate] patient.h_r_times = [datetime.datetime.now()] patient.save() tachycardia = heart_server_helpers.is_tachycardic(pat_id) if tachycardia is True: heart_server_helpers.email_alert(pat_id) return jsonify({"status": "true"})
def patient_status(patient_id): """ check whether a given patient is tachycardic :param patient_id: integer ID of patient to check tachycardic status :return: json indicating whether patient is tachycardic, or error message """ patient_id = int(patient_id) if heart_server_helpers.validate_patient(pat_id) is False: return jsonify({"Error": "invalid patient ID"}) if heart_server_helpers.existing_beats(pat_id) is False: return jsonify({"Error": "no heartbeats recorded for patient"}) tachycardia = heart_server_helpers.is_tachycardic(patient_id) if tachycaria is True: heart_server_helpers.email_alert(patient_id) status = {"patient_tachycardic": tachycardia} return jsonify(status)
def return_heartrates(patient_id): """ access database to get heart rate history for a patient :param patient_id: integer ID of patient to get heart rates of :return: json with the heart rate list for patient, or error message """ patient_id = int(patient_id) if heart_server_helpers.validate_patient(pat_id) is False: return jsonify({"Error": "invalid patient ID"}) if heart_server_helpers.existing_beats(pat_id) is False: return jsonify({"Error": "no heartbeats recorded for patient"}) for user in Patient.objects.raw({"_id": patient_id}): patient = user heartrate_list = patient.heart_rate print(heartrate_list) heart_list = {"heat_rates": heartrate_list} return jsonify(heart_list)
def return_avg_rate(patient_id): """ access database to get last heart rate recorded for patient :param patient_id: integer ID of patient to get heart rates from :return: json with the last heart rate for patient, or error message """ patient_id = int(patient_id) if heart_server_helpers.validate_patient(pat_id) is False: return jsonify({"Error": "invalid patient ID"}) if heart_server_helpers.existing_beats(pat_id) is False: return jsonify({"Error": "no heartbeats recorded for patient"}) for user in Patient.objects.raw({"_id": patient_id}): patient = user heartrate_list = patient.heart_rate num_rates = len(heartrate_list) avg_rate = {"rate_avg": sum(heartrate_list) / num_rates} return jsonify(avg_rate)
def test_existing_beats(pat_id, expected): pat_exist = validate_patient(pat_id) assert pat_exist == expected