def mission_loc(filter_missions=False, mission_no=None): session = create_session() if filter_missions: missions = session.query(Missions).filter( Missions.Number.notin_(non_uea_mission_numbers)).all() elif mission_no: missions = session.query(Missions).filter( Missions.Number == mission_no) else: missions = session.query(Missions).all() mission_locs = [] for mission in missions: dive = session.query(Dives).filter( Dives.MissionID == mission.Number).order_by( Dives.DiveNo.asc()).first() if dive: tgt_template = Targets() tgt_template.Longitude = dive.Longitude tgt_template.Latitude = dive.Latitude tgt_template.Name = mission.Name tgt_template.MissionID = mission.Number mission_locs.append(tgt_template) continue target = session.query(Targets).filter( Targets.MissionID == mission.Number).first() if target: target.Name = mission.Number mission_locs.append(target) session.close() return mission_locs
def get_glider_count() -> int: session = create_session() gliders = session.query(Gliders)\ .filter(Gliders.UEAGlider == 1)\ .count() session.close() return gliders
def adjacent_dives(glider_num, dive_num, mission_num): session = create_session() glider = session.query(Gliders).filter( Gliders.Number == int(glider_num)).first() if not glider: return None glider_id = glider.Number prev_dive = session.query(Dives.DiveNo) \ .filter(Dives.GliderID == glider_id) \ .filter(Dives.MissionID == mission_num) \ .filter(Dives.DiveNo < dive_num) \ .order_by(Dives.DiveNo.desc()) \ .first() session.close() if not prev_dive: prev_dive = None next_dive = session.query(Dives.DiveNo) \ .filter(Dives.GliderID == glider_id) \ .filter(Dives.MissionID == mission_num) \ .filter(Dives.DiveNo > dive_num) \ .order_by(Dives.DiveNo.asc()) \ .first() session.close() if not next_dive: next_dive = None return prev_dive, next_dive
def mission_ids() -> list: session = create_session() missions = session.query(Missions.Number) \ .order_by(Missions.Number.desc()) \ .all() session.close() return missions
def list_tags() -> list: session = create_session() tags = session.query(ArgosTags) \ .order_by(ArgosTags.TagNumber.asc()) \ .all() session.close() return tags
def glider_nums() -> list: session = create_session() gliders = session.query(Gliders.Number) \ .order_by(Gliders.Number.desc()) \ .all() session.close() return gliders
def tag_nums() -> list: session = create_session() tags = session.query(ArgosTags.TagNumber) \ .order_by(ArgosTags.TagNumber.desc()) \ .all() session.close() return tags
def assign_glider(number, mission_id): glider, __ = glider_info(number) glider.MissionID = mission_id session = create_session() session.add(glider) session.commit() session.close() return glider
def delete_mission(mission_id): session = create_session() mission = session.query(Missions) \ .filter(Missions.Number == mission_id) \ .first() session.delete(mission) session.commit() return mission
def delete_dive(dive_id): session = create_session() dive = session.query(Dives) \ .filter(Dives.DiveInfoID == dive_id) \ .first() session.delete(dive) session.commit() return dive
def list_all_gliders() -> list: session = create_session() gliders = session.query(Gliders) \ .order_by( Gliders.Number.asc())\ .all() session.close() return gliders
def get_mission_by_id(mission_id): if not mission_id: return None session = create_session() mission = session.query(Missions).filter( Missions.Number == mission_id).first() session.close() return mission
def assign_tag(number, mission_id, glider_id): tag = tag_info(number) tag.MissionID = mission_id tag.GliderID = glider_id session = create_session() session.add(tag) session.commit() session.close() return tag
def delete_glider(glider_num): session = create_session() target = session.query(Gliders) \ .filter(Gliders.Number == glider_num) \ .first() session.delete(target) session.commit() session.close() return
def delete_pin(pin_id): session = create_session() pin = session.query(Pins) \ .filter(Pins.WaypointsID == pin_id) \ .first() session.delete(pin) session.commit() session.close() return pin
def delete_target(target_id): session = create_session() target = session.query(Targets) \ .filter(Targets.TargetsID == target_id) \ .first() session.delete(target) session.commit() session.close() return target
def delete_tag(tag_num): session = create_session() target = session.query(ArgosTags) \ .filter(ArgosTags.TagNumber == tag_num) \ .first() session.delete(target) session.commit() session.close() return
def get_mission_pins(mission_id) -> Optional[Any]: if not mission_id: return None mission_id = int(mission_id) session = create_session() pins = session.query(Pins) \ .filter(Pins.MissionID == mission_id) \ .all() session.close() return pins
def edit_waypoint_info(waypoint_id, info_txt): if not waypoint_id: return None session = create_session() waypoint = session.query(Pins).filter( Pins.WaypointsID == waypoint_id).first() waypoint.Info = info_txt session.commit() session.close() return
def create_tag(number, mission_id, glider_id): tag = ArgosTags() tag.TagNumber = number tag.MissionID = mission_id tag.GliderID = glider_id session = create_session() session.add(tag) session.commit() session.close() return tag
def glider_info(glider_num): session = create_session() glider_instance = session.query(Gliders).filter( Gliders.Number == glider_num).first() mission_ids_list = [] for value in session.query(Dives.MissionID) \ .filter(Dives.GliderID == glider_instance.Number) \ .distinct(): mission_ids_list.append(value[0]) session.close() return glider_instance, mission_ids_list
def delete_multiple_dives(glider_id): dive = None session = create_session() dives = session.query(Dives) \ .filter(Dives.MissionID == 1)\ .filter(Dives.GliderID == glider_id) \ .all() for dive in dives: session.delete(dive) session.commit() return dive
def create_waypoint(missionid, name, lat, lon, info): session = create_session() waypoint = Pins() waypoint.MissionID = missionid waypoint.Name = name waypoint.Latitude = lat waypoint.Longitude = lon waypoint.Info = info session.add(waypoint) session.commit() session.close() return waypoint
def create_glider(number, name, info, mission_id, ueaglider): glider = Gliders() glider.Number = number glider.Name = name glider.Info = info glider.MissionID = mission_id glider.UEAGlider = ueaglider session = create_session() session.add(glider) session.commit() session.close() return glider
def create_mission(number, name, start, end, info): mission = Missions() mission.Number = number mission.Name = name mission.StartDate = start mission.EndDate = end mission.Info = info session = create_session() session.add(mission) session.commit() session.close() return mission
def create_target(missionid, name, lat, lon, radius, goto): session = create_session() target = Targets() target.MissionID = missionid target.Name = name target.Latitude = lat target.Longitude = lon target.Radius = radius target.Goto = goto session.add(target) session.commit() session.close() return target
def login_user(email: str, password: str) -> Optional[User]: session = db_session.create_session() user = session.query(User).filter(User.Email == email).first() if not user: return None if not verify_hash(user.HashedPassword, password): return None user.LastLogin = datetime.now() session.add(user) session.commit() session.close() return user
def audit_entry(user_id: int, message: str): user = find_user_by_id(user_id) if not user: return None audit = Audit() audit.UserID = user_id audit.Date = datetime.now() audit.Info = message session = create_session() session.add(audit) session.commit() session.close() return audit
def list_missions(filter_missions=False, mission_id_list=()) -> dict: session = create_session() if filter_missions: missions = session.query(Missions) \ .filter(Missions.Number.in_(mission_id_list)) \ .filter(Missions.Number.notin_(non_uea_mission_numbers)) \ .order_by(Missions.Number.desc()) \ .all() else: missions = session.query(Missions) \ .filter(Missions.Number.notin_(mission_id_list)) \ .order_by(Missions.Number.desc()).all() session.close() return missions
def get_dive_nums(glider_num, mission_num): session = create_session() glider = session.query(Gliders).filter( Gliders.Number == int(glider_num)).first() if not glider: return None glider_id = glider.Number dives = session.query(Dives.DiveNo) \ .filter(Dives.GliderID == glider_id) \ .filter(Dives.MissionID == mission_num) \ .all() session.close() if not dives: return None return dives