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
示例#2
0
    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
示例#5
0
    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