def get_instruments_by_exercise_id_csv(exercise_id, session=None): """ Finds all collection instruments associated with an exercise and returns them in csv format :param exercise_id :param session: database session :return: collection instruments in csv """ log.info('Getting csv for instruments', exercise_id=exercise_id) validate_uuid(exercise_id) csv_format = '"{count}","{file_name}","{length}","{date_stamp}"\n' count = 1 csv = csv_format.format(count='Count', file_name='File Name', length='Length', date_stamp='Time Stamp') exercise = query_exercise_by_id(exercise_id, session) if not exercise: return None for instrument in exercise.instruments: csv += csv_format.format(count=count, file_name=instrument.name, length=instrument.seft_file.len if instrument.seft_file else None, date_stamp=instrument.stamp) count += 1 return csv
def validate_non_duplicate_instrument(file, exercise_id, session): exercise = query_exercise_by_id(exercise_id, session) if exercise: for i in exercise.instruments: if i.seft_file.file_name == file.filename: log.error("Collection instrument file already uploaded for this collection exercise") raise RasError("Collection instrument file already uploaded for this collection exercise", 400) return
def get_exercise_by_id(exercise_id, session): """ Retrieves exercise :param exercise_id: An exercise id (UUID) :param session: database session :return: exercise """ log.info('Searching for exercise', exercise_id=exercise_id) validate_uuid(exercise_id) exercise = query_exercise_by_id(exercise_id, session) return exercise
def _find_or_create_exercise(exercise_id, session): """ Creates a exercise in the db if it doesn't exist, or reuses if it does :param exercise_id: An exercise id (UUID) :param session: database session :return: exercise """ exercise = query_exercise_by_id(exercise_id, session) if not exercise: log.info('creating exercise', exercise_id=exercise_id) exercise = ExerciseModel(exercise_id=exercise_id, items=1) return exercise
def get_instruments_by_exercise_id_csv(exercise_id, session=None): """ Finds all collection instruments associated with an exercise and returns them in csv format :param exercise_id :param session: database session :return: collection instruments in csv """ log.info("Getting csv for instruments", exercise_id=exercise_id) validate_uuid(exercise_id) csv_format = '"{count}","{file_name}","{length}","{date_stamp}"\n' count = 1 csv = csv_format.format(count="Count", file_name="File Name", length="Length", date_stamp="Time Stamp") exercise = query_exercise_by_id(exercise_id, session) if not exercise: return None for instrument in exercise.instruments: if instrument.seft_file.gcs: try: survey_ref = get_survey_ref(instrument.survey.survey_id) exercise_id = str(instrument.exids[0]) file_path = survey_ref + "/" + exercise_id + "/" + instrument.seft_file.file_name seft_ci_bucket = GoogleCloudSEFTCIBucket(current_app.config) file = seft_ci_bucket.download_file_from_bucket(file_path) csv += csv_format.format( count=count, file_name=instrument.seft_file.file_name, length=len(file), date_stamp=instrument.stamp, ) except Exception: log.exception("Couldn't find SEFT CI in bucket") else: csv += csv_format.format( count=count, file_name=instrument.name, length=instrument.seft_file.len if instrument.seft_file else None, date_stamp=instrument.stamp, ) count += 1 return csv