File size: 3,739 Bytes
3ae828c
 
88563b5
 
 
3ae828c
 
 
 
 
 
 
 
 
 
88563b5
 
3ae828c
 
 
 
 
 
 
 
 
88563b5
3ae828c
88563b5
 
 
3ae828c
88563b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3ae828c
 
88563b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3ae828c
 
88563b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3ae828c
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
from validation_submission.get_json import get_json_tmp, get_json_one_individual
from classes import Report
from circumstances.class_circumstance import Circumstances
from behavior.class_behavior import Behaviors
from physical.class_physical import PhysicalAnomalies

def get_fields(data_dict, keyword): 
    extract = {} 
    for key, val in data_dict.items():
        if keyword in key:
            extract[key] = val
    return extract

def validate_individual():
    data = get_json_tmp("wounded_dead")
    circumstance = validate_circumstance(data)
    behaviors = validate_behavior(data)
    validate_physical(data)
    validate_follow_up(data)
    validate_individual()
    pass


def validate_circumstance(data): 
    circumstance_raw = get_fields(data, "circumstance")
    circumstance_formatted = process_circumstance(circumstance_raw)
    if not Circumstances(**circumstance_formatted).validate(): 
        print("Validation failed for the circumstance.")
    else: 
        return Circumstances(**circumstance_formatted)

def process_circumstance(data):
    fields_to_check = ["option_dropdown", "open_field", "extra"]
    for field in fields_to_check:
        if data["circumstance_type"][field+"_label"] == "NA":
            data["circumstance_type"].pop([field+"_label"])
        else :
            key = data[f"circumstance_{field}"]
            val = data["circumstance_type"][field+"_label"]
            data["circumstance_type"][key] = val
            data["circumstance_type"].pop([field+"_label"])
    # {"circumstance_radio": true, 
    #  "circumstance": "destruction / deliberatly removed", 
    #  "cirumstance_type": {"type": "removal or direct capture", 
    #                       "option_dropdown_label": "method",
    #                       "open_field_label": "NA", 
    #                       "extra_label": "NA"}, 
    # "circumstance_option_dropdown": "Traffic/Trade"}
    return data

def validate_behavior(data): 
    behaviors_raw = get_fields(data, "behaviours")
    behaviors_formatted = process_behaviors(behaviors_raw)
    if not Behaviors(**behaviors_formatted).validate(): 
        print("Validation failed for the behaviours.")
    else: 
        return Behaviors(**behaviors_formatted)

def process_behaviors(data):
    # INPUT  : 
    #"behaviors_radio": true, 
    # "behaviors_type": ["Crash, Falling From The Sky", "Neurological"]
    #OUTPUT: 
#     "behaviors_radio": "Yes",
#   "behaviors_type": [
#     {
#       "type": "abnormal breathing",
#       "description": "Problems breathing, breathing sounds"
#     }
    behaviors =[]
    for type in data["behaviors_type"]: 
        new_behavior = {}
        new_behavior["type"] = type
        behaviors.append(new_behavior)
    data["behaviors_type"] = behaviors
    return data 

def validate_physical(data): 
    physical_raw = get_fields(data, "physical")
    physical_formatted = process_physical(physical_raw)
    if not PhysicalAnomalies(**physical_formatted).validate(): 
        print("Validation failed for the physical anomalies.")
    else: 
        return PhysicalAnomalies(**physical_formatted)

def process_physical(data):
    # INPUT
    # "physical_type_feathers": "feathers", 
    # "physical_anomaly_type_feathers": ["Blood", "Swelling"]}
    # OUTPUT
#     "physical_radio": "Yes",
#   "physical_anomalies_type": [
#     {
#       "type": "beak",
#       "anomaly_type": "deformation"
#     },
#     {
#       "type": "body",
#       "anomaly_type": "fluffed up"
#     },

    pass

def validate_follow_up(data):
    pass

def validate_individual():
    individual = get_json_one_individual()
    if not Report(individual).validate(): 
        print("Validation failed for creating the individual report.")
    pass