Changeset 829:0c8f22f0667a for src/mlx/pirep.py
- Timestamp:
- 12/30/16 15:37:51 (7 years ago)
- Branch:
- default
- hg-Phase:
- (<MercurialRepository 1 'hg:/home/ivaradi/mlx/hg' '/'>, 'public')
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/mlx/pirep.py
r778 r829 1 1 2 2 from util import utf2unicode 3 from flight import Flight 3 4 4 5 import const 5 6 import cPickle as pickle 7 import calendar 6 8 import datetime 7 9 import time … … 36 38 """Format the given timestamp for RPC.""" 37 39 return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(t)) 40 41 @staticmethod 42 def parseTimestampFromRPC(s): 43 """Format the given timestamp for RPC.""" 44 dt = datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S") 45 return calendar.timegm(dt.utctimetuple()) 46 47 @staticmethod 48 def decodeFlightTypeText(s): 49 """Decode the given flight type text.""" 50 for (flighType, text) in PIREP._flightTypes.iteritems(): 51 if s==text: 52 return flighType 53 return const.FLIGHTYPE_SCHEDULED 54 55 @staticmethod 56 def parseLogFromRPC(log): 57 """Parse the given log coming from the RPC.""" 58 index = 0 59 entries = [] 60 61 inTimeStr = False 62 inEntry = False 63 64 timestr = "" 65 entry = "" 66 67 while index<len(log): 68 c = log[index] 69 index += 1 70 71 if c==']': 72 if inEntry: 73 entries.append((timestr, entry)) 74 timestr = "" 75 entry = "" 76 77 inTimeStr = False 78 inEntry = False 79 elif not inTimeStr and not inEntry: 80 if c=='[': 81 if timestr: 82 inEntry = True 83 else: 84 inTimeStr = True 85 elif inTimeStr: 86 timestr += c 87 elif inEntry: 88 entry += c 89 90 return entries 38 91 39 92 @staticmethod … … 61 114 def __init__(self, flight): 62 115 """Initialize the PIREP from the given flight.""" 116 if flight is None: 117 return 118 63 119 self.bookedFlight = flight.bookedFlight 64 120 … … 102 158 self.logLines = logger.lines 103 159 self.faultLineIndexes = logger.faultLineIndexes 160 161 def setupFromPIREPData(self, pirepData, bookedFlight): 162 163 self.bookedFlight = bookedFlight 164 165 self.numCrew = int(pirepData["numCrew"]) 166 self.numPassengers = int(pirepData["numPassengers"]) 167 self.bagWeight = int(pirepData["bagWeight"]) 168 self.cargoWeight = int(pirepData["cargoWeight"]) 169 self.mailWeight = int(pirepData["mailWeight"]) 170 171 self.filedCruiseAltitude = int(pirepData["filedCruiseLevel"][2:])*100 172 cruiseLevel = pirepData["cruiseLevel"] 173 if cruiseLevel: 174 self.cruiseAltitude = int(cruiseLevel[2:])*100 175 else: 176 self.cruiseAltitude = self.filedCruiseAltitude 177 self.route = pirepData["route"] 178 179 self.departureMETAR = pirepData["departureMETAR"] 180 self.arrivalMETAR = pirepData["arrivalMETAR"] 181 182 self.departureRunway = pirepData["departureRunway"] 183 self.sid = pirepData["sid"] 184 185 star = pirepData["star"].split(",") 186 self.star = star[0] 187 self.star.strip() 188 189 if len(star)>1: 190 self.transition = star[1] 191 self.transition.strip() 192 else: 193 self.transition = "" 194 self.approachType = pirepData["approachType"] 195 self.arrivalRunway = pirepData["arrivalRunway"] 196 197 self.flightType = PIREP.decodeFlightTypeText(pirepData["flightType"]) 198 self.online = int(pirepData["online"])!=0 199 200 self.comments = pirepData["comments"] 201 self.flightDefects = pirepData["flightDefects"] 202 self.delayCodes = pirepData["timeComment"] 203 if self.delayCodes=="UTC": 204 self.delayCodes = "" 205 206 flightDate = pirepData["flightDate"] + " " 207 208 self.blockTimeStart = \ 209 PIREP.parseTimestampFromRPC(flightDate + pirepData["blockTimeStart"]) 210 self.flightTimeStart = \ 211 PIREP.parseTimestampFromRPC(flightDate + pirepData["flightTimeStart"]) 212 self.flightTimeEnd = \ 213 PIREP.parseTimestampFromRPC(flightDate + pirepData["flightTimeEnd"]) 214 self.blockTimeEnd = \ 215 PIREP.parseTimestampFromRPC(flightDate + pirepData["blockTimeEnd"]) 216 self.flownDistance = float(pirepData["flownDistance"]) 217 self.fuelUsed = float(pirepData["fuelUsed"]) 218 219 # logger = flight.logger 220 self.rating = float(pirepData["rating"]) 221 222 log = pirepData["log"] 223 224 self.logLines = PIREP.parseLogFromRPC(log)[1:] 225 if self.logLines and \ 226 (self.logLines[0][0]=="LOGGER NG LOG" or 227 self.logLines[0][0]=="MAVA LOGGER X"): 228 self.logLines = self.logLines[1:] 229 numLogLines = len(self.logLines) 230 231 lastFaultLineIndex = 0 232 self.faultLineIndexes = [] 233 for ratingText in pirepData["ratingText"].splitlines()[:-1]: 234 faultLines = PIREP.parseLogFromRPC(ratingText) 235 for (timeStr, entry) in faultLines: 236 for i in range(lastFaultLineIndex, numLogLines-1): 237 if timeStr>=self.logLines[i][0] and \ 238 timeStr<self.logLines[i+1][0]: 239 self.logLines = self.logLines[:i+1] + \ 240 [(timeStr, entry)] + self.logLines[i+1:] 241 self.faultLineIndexes.append(i+1) 242 lastFaultLineIndex = i+1 243 numLogLines += 1 244 break 104 245 105 246 @property
Note:
See TracChangeset
for help on using the changeset viewer.