123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #!/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.UseShallShouldMay = 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
|