102 lines
3.7 KiB
Python
102 lines
3.7 KiB
Python
#!/usr/bin/env python
|
|
|
|
from datetime import datetime as dt
|
|
|
|
import pytz
|
|
import time
|
|
|
|
from aman.config.RunwaySequencing import RunwaySequencing
|
|
|
|
class AirportSequencing:
|
|
def __init__(self, icao : str):
|
|
self.Airport = icao
|
|
self.ActiveArrivalRunways = []
|
|
self.RunwayDependencies = []
|
|
self.LastUpdateTimestamp = dt.utcfromtimestamp(int(time.time())).replace(tzinfo = pytz.UTC)
|
|
self.UseMustShallMay = True
|
|
|
|
def clearData(self):
|
|
self.ActiveArrivalRunways.clear()
|
|
self.RunwayDependencies.clear()
|
|
|
|
def activateRunway(self, runway : RunwaySequencing):
|
|
for active in self.ActiveArrivalRunways:
|
|
if active.Runway.Name == runway.Runway.Name:
|
|
self.ActiveArrivalRunways[runway.Runway.Name] = runway
|
|
return
|
|
self.ActiveArrivalRunways.append(runway)
|
|
|
|
def runway(self, index : int):
|
|
if index >= len(self.ActiveArrivalRunways):
|
|
return None
|
|
return self.ActiveArrivalRunways[index].Runway
|
|
|
|
def runwayIndex(self, identifier : str):
|
|
for i in range(0, len(self.ActiveArrivalRunways)):
|
|
if self.ActiveArrivalRunways[i].Runway.Name == identifier:
|
|
return i
|
|
return -1
|
|
|
|
def deactivateRunway(self, identifier : str):
|
|
index = self.runwayIndex(identifier)
|
|
if 0 <= index:
|
|
self.ActiveArrivalRunways.pop(index)
|
|
|
|
# remove the dependencies
|
|
for i in range(self.RunwayDependencies - 1, -1, -1):
|
|
if index == self.RunwayDependencies[i][0] or index == self.RunwayDependencies[i][1]:
|
|
self.RunwayDependencies.pop(i)
|
|
|
|
def addDependency(self, first : str, second : str):
|
|
idxFirst = self.runwayIndex(first)
|
|
idxSecond = self.runwayIndex(second)
|
|
if 0 > idxFirst or 0 > idxSecond:
|
|
return False
|
|
|
|
foundFirst = False
|
|
foundSecond = False
|
|
for dependency in self.RunwayDependencies:
|
|
if idxFirst == dependency[0] and idxSecond == dependency[1]:
|
|
foundFirst = True
|
|
elif idxFirst == dependency[1] and idxSecond == dependency[0]:
|
|
foundSecond = True
|
|
|
|
if False == foundFirst:
|
|
self.RunwayDependencies.append([ idxFirst, idxSecond ])
|
|
if False == foundSecond:
|
|
self.RunwayDependencies.append([ idxSecond, idxFirst ])
|
|
|
|
return True
|
|
|
|
def removeDependency(self, first : str, second : str):
|
|
idxFirst = self.runwayIndex(first)
|
|
idxSecond = self.runwayIndex(second)
|
|
if 0 > idxFirst or 0 > idxSecond:
|
|
return
|
|
|
|
for i in range(self.RunwayDependencies - 1, -1, -1):
|
|
dependency = self.RunwayDependencies[i]
|
|
|
|
# check for all the pairs
|
|
if idxFirst == dependency[0] and idxSecond == dependency[1]:
|
|
self.RunwayDependencies.pop(i)
|
|
elif idxSecond == dependency[0] and idxSecond == dependency[0]:
|
|
self.RunwayDependencies.pop(i)
|
|
|
|
def findRunway(self, identifier : str):
|
|
for runway in self.ActiveArrivalRunways:
|
|
if runway.Runway.Name == identifier:
|
|
return runway
|
|
return None
|
|
|
|
def findDependentRunways(self, identifier : str):
|
|
# runway is unknown
|
|
index = self.runwayIndex(identifier)
|
|
if 0 > index:
|
|
return []
|
|
|
|
# search the dependency pair
|
|
dependencies = [self.ActiveArrivalRunways[self.RunwayDependencies[i][1]] for i in range(0, len(self.RunwayDependencies)) if index == self.RunwayDependencies[i][0]]
|
|
|
|
return dependencies
|