示例#1
0
async def get(subject_id=None):
    if not subject_id:
        subjects = await Subject_Pydantic_List.from_queryset(Subject.all())
        return subjects.dict().get('__root__')

    subject = await Subject_Pydantic.from_queryset_single(
        Subject.get(id=subject_id))
    return subject
示例#2
0
    def setUp(self):
        self.engine, self.session = database.initialize('sqlite:///:memory:')

        for age in range(1, 11):
            status = 'DOA' if random.random() < 0.5 else 'Well'
            subject = Subject(age=age, status=status)
            if age < 6:
                subject.weight = 20
            self.session.add(subject)

        self.session.commit()
示例#3
0
 def create_subject(payload):
     body = request.get_json()
     try:
         name = body['name']
         subject = Subject(name=name)
         subject.insert()
         subject_data = {
             'name': subject.name,
         }
         return jsonify({
             'success': True,
             'new subject added': subject_data
         })
     except:
         abort(422)
示例#4
0
def procedure(index, labeled_row, mapping):
    logger = logging.getLogger()
    models = setup_models(index, labeled_row, mapping)
    group, location, weather, operation, outcome, search, incident = models

    physical_fit = coerce_type(labeled_row["Physical Fitness"], str)
    mental_fit = coerce_type(labeled_row["Mental Fitness"], str)
    experience = coerce_type(labeled_row["Experience"], str)
    equipment = coerce_type(labeled_row["Equipment"], str)
    personality = coerce_type(labeled_row["Personality"], str)
    clothing = coerce_type(labeled_row["Clothing"], str)
    training = coerce_type(labeled_row["Survival training"], str)

    ages = str(labeled_row["Age"] or "").strip().replace(".", ",")
    ages = [float(age.replace("0s", "5")) if age != "?" else None for age in ages.split(",") if age]

    sexes = str(labeled_row["Sex"] or "").strip().upper()
    translation = {"M": "male", "F": "female", "?": None}
    sexes = [translation[sex] for sex in sexes if sex in translation]

    statuses = str(labeled_row["Subject Status"] or "").strip().upper()
    statuses = list(filter(lambda status: status, statuses.split(",")))

    number_lost = coerce_type(labeled_row["Number Lost"], int)
    number_lost = max(number_lost or 0, len(ages), len(sexes), len(statuses))

    if number_lost > 0:

        def fill(sequence):
            if len(sequence) == 0:
                return [None] * number_lost
            elif len(sequence) == 1:
                return sequence * number_lost
            else:
                return sequence

        ages, sexes, statuses = fill(ages), fill(sexes), fill(statuses)

        if not (number_lost == len(ages) == len(sexes) == len(statuses)):
            message = "Instance {}: subject count ({}), anomaly detected"
            logger.warning(message.format(index + 1, number_lost))

        else:
            for index in range(number_lost):
                subject = Subject(
                    age=ages[index],
                    sex=sexes[index],
                    physical_fit=physical_fit,
                    mental_fit=mental_fit,
                    personality=personality,
                    experience=experience,
                    training=training,
                    equipment=equipment,
                    clothing=clothing,
                    status=statuses[index],
                    group=group,
                )

                if number_lost == 1:
                    subject.weight = coerce_type(labeled_row["Weight (Kg)"], float)
                    subject.height = coerce_type(labeled_row["Height (Cm)"], float)

                yield subject

    responsive_text = coerce_type(labeled_row["Responsivenss"], str)
    if isinstance(responsive_text, str):
        responsive_text = responsive_text.strip().casefold()
        group.responsive = responsive_text == "responsive".casefold()
        del labeled_row["Responsivenss"]

    mobile_text = coerce_type(labeled_row["Mobility"], str)
    if isinstance(mobile_text, str):
        mobile_text = mobile_text.strip().casefold()
        group.mobile = mobile_text == "mobile".casefold()
        del labeled_row["Mobility"]

    elevation_change = labeled_row["Elevation Change (ft)"]
    outcome.elevation_change = coerce_type(elevation_change, float)
    if isinstance(outcome.elevation_change, float):
        outcome.elevation_change *= 0.3048
        del labeled_row["Elevation Change (ft)"]

    del labeled_row["Distance IPP (miles)"]
    del labeled_row["Distance Invest. (miles)"]

    incident.other = {attribute: value for attribute, value in labeled_row.items() if value is not None}

    yield from models