def parse_far(far): date = far.get("DA") time = far.get("TI") far_datetime_utc = make_datetime_json_serializable(date, time) value = {"farDatetimeUtc": far_datetime_utc} children = tagged_children(far) if "GEA" in children: assert len(children["GEA"]) == 1 gear_el = children["GEA"][0] gear = parse_gea(gear_el) value = {**value, **gear} if "SPE" in children: catches = [parse_spe(spe) for spe in children["SPE"]] value["catches"] = catches if "POS" in children: assert len(children["POS"]) == 1 pos = children["POS"][0] lat, lon = parse_pos(pos) value["latitude"] = try_float(lat) value["longitude"] = try_float(lon) data = {"log_type": "FAR", "value": value} return data
def parse_coe(coe): date = coe.get("DA") time = coe.get("TI") effort_zone_entry_datetime_utc = make_datetime_json_serializable( date, time) children = tagged_children(coe) value = { "effortZoneEntryDatetimeUtc": effort_zone_entry_datetime_utc, "targetSpeciesOnEntry": coe.get("TS"), } if "RAS" in children: assert len(children["RAS"]) == 1 ras = children["RAS"][0] ras_data = parse_ras(ras) value["faoZoneEntered"] = ras_data["faoZone"] value["economicZoneEntered"] = ras_data["economicZone"] value["statisticalRectangleEntered"] = ras_data["statisticalRectangle"] value["effortZoneEntered"] = ras_data["effortZone"] if "POS" in children: assert len(children["POS"]) == 1 pos = children["POS"][0] lat, lon = parse_pos(pos) value["latitudeEntered"] = try_float(lat) value["longitudeEntered"] = try_float(lon) data = {"log_type": "COE", "value": value} return data
def parse_gea(gea): data = { "gear": gea.get("GE"), "mesh": try_float(gea.get("ME")), "dimensions": try_float(gea.get("GC")), } return data
def parse_pro(pro): data = { "presentation": pro.get("PR"), "packaging": pro.get("TY"), "freshness": pro.get("FF"), "preservationState": pro.get("PS"), "conversionFactor": try_float(pro.get("CF")), } return data
def parse_spe(spe): data = { "species": spe.get("SN"), "weight": try_float(spe.get("WT")), "nbFish": try_float(spe.get("NF")), } children = tagged_children(spe) if "RAS" in children: assert len(children["RAS"]) == 1 ras = children["RAS"][0] ras_data = parse_ras(ras) data = {**data, **ras_data} if "PRO" in children: assert len(children["PRO"]) == 1 pro = children["PRO"][0] pro_data = parse_pro(pro) data = {**data, **pro_data} return data
def parse_pno(pno): date = pno.get("PD") time = pno.get("PT") predicted_arrival_datetime_utc = make_datetime_json_serializable( date, time) start_date = pno.get("DS") trip_start_date = make_datetime_json_serializable(start_date, None) children = tagged_children(pno) value = { "predictedArrivalDatetimeUtc": predicted_arrival_datetime_utc, "port": pno.get("PO"), "purpose": pno.get("PC"), "tripStartDate": trip_start_date, } if "RAS" in children: assert len(children["RAS"]) == 1 ras = children["RAS"][0] ras_data = parse_ras(ras) value = {**value, **ras_data} if "SPE" in children: catches = [parse_spe(spe) for spe in children["SPE"]] value["catchOnboard"] = catches if "POS" in children: assert len(children["POS"]) == 1 pos = children["POS"][0] lat, lon = parse_pos(pos) value["latitude"] = try_float(lat) value["longitude"] = try_float(lon) data = {"log_type": "PNO", "value": value} return data
def parse_pos(pos): return try_float(pos.get("LT")), try_float(pos.get("LG"))