1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #!/usr/bin/env python
- import configparser
- import glob
- import os
- import sys
- from formats.SctEseFormat import SctEseFormat
- class Airport:
- def parseAirport(self, airport):
- if None == airport.get('runways'):
- return False
- self.runways = airport['runways'].split(':')
- return True
- def findGngData(data, path):
- if None == data.get('gngwildcard'):
- return None, None
- # find the newest ESE file
- files = glob.glob(os.path.join(path, data['gngwildcard'] + '.ese'))
- latestEse = max(files, key=os.path.getctime)
- # search for the corresponding SCT file
- latestSct = os.path.splitext(latestEse)[0] + '.sct'
- # check if the files exist
- if False == os.path.isfile(latestEse) or False == os.path.isfile(latestSct):
- return None, None
- return latestSct, latestEse
- def parsePlanning(self, planning):
- for key in planning:
- # check if the runways match
- rwy = key.upper()
- if rwy not in self.runways:
- sys.stderr.write('Unable to find ' + rwy + ' in defined runways')
- return False
- # check if arrivals are defined
- arrivals = planning[key].split(':')
- if 0 == len(arrivals):
- sys.stderr.write('No arrival routes for ' + rwy)
- return False
- # assign the arrival routes to the runways
- self.arrivalRoutes[rwy] = arrivals
- return True
- def __init__(self, filepath : str, icao : str):
- self.runways = []
- self.arrivalRoutes = {}
- config = configparser.ConfigParser()
- config.read(filepath)
- dataConfig = None
- airportConfig = None
- planningConfig = None
- # search the required sections
- for key in config:
- if 'DATA' == key:
- dataConfig = config['DATA']
- elif 'AIRPORT' == key:
- airportConfig = config['AIRPORT']
- elif 'PLANNING' == key:
- planningConfig = config['PLANNING']
- # find the GNG-file data
- sctFile, eseFile = Airport.findGngData(dataConfig, os.path.dirname(filepath))
- if None == sctFile or None == eseFile:
- sys.stderr.write('No GNG-files found')
- sys.exit(-1)
- # parse the airport information
- if None == airportConfig or False == self.parseAirport(airportConfig):
- sys.stderr.write('No or no valid airport configuration found')
- sys.exit(-1)
- # parse the planning information
- if None == planningConfig or False == self.parsePlanning(planningConfig):
- sys.stderr.write('No or no valid planning configuration found')
- sys.exit(-1)
- # get all required arrival routes and avoid duplicates
- requiredArrivalRoutes = []
- for rwy in self.arrivalRoutes:
- for arrival in self.arrivalRoutes[rwy]:
- if arrival not in requiredArrivalRoutes:
- requiredArrivalRoutes.append(arrival)
- # parse the GNG data
- print('Used GNG-Data: ' + eseFile)
- self.gngData = SctEseFormat(sctFile, eseFile, icao, requiredArrivalRoutes)
|