01234567890123456789012345678901234567890123456789012345678901234567890123456789
437438439440441442443444445446447448449450451452453454455456 457458459460461462463464465466467468469470471472473474475476477478479480481482 483484485486 487488489490491492493494495496497498499500501502503504505506 583584585586587588589590591592593594595596597598599600601602603 604605606607608609610 611 612613614615616617618619620621622623624625626627628629630631 21292130213121322133213421352136213721382139214021412142214321442145214621472148 21492150215121522153215421552156215721582159216021612162216321642165216621672168 64906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530 |
<----SKIPPED LINES---->
AIRCRAFT_LENGTH['BOEING 787-10 Dreamliner (twin-jet)'] = 68.28
AIRCRAFT_LENGTH['BOEING BBJ (747-8) (quad-jet)'] = 76.25
AIRCRAFT_LENGTH['BOEING BBJ (777-200LR) (twin-jet)'] = 63.73
AIRCRAFT_LENGTH['BOEING BBJ (777-300ER) (twin-jet)'] = 73.86
AIRCRAFT_LENGTH['BOEING BBJ3 (twin-jet)'] = 42.11
AIRCRAFT_LENGTH['Boeing Dreamliner (Srs.8) (twin-jet)'] = 56.72
AIRCRAFT_LENGTH['BOEING Dreamliner (Srs.9) (twin-jet)'] = 62.81
AIRCRAFT_LENGTH['Boeing MD-11 (tri-jet)'] = (61.2 + 61.6) / 2
AIRCRAFT_LENGTH['BOMBARDIER BD-700 Global 7500 (twin-jet)'] = 33.88
AIRCRAFT_LENGTH['Bombardier Challenger 300 (twin-jet)'] = 20.92
AIRCRAFT_LENGTH['Bombardier Global 5000 (twin-jet)'] = 29.5
AIRCRAFT_LENGTH['Bombardier Global Express (twin-jet)'] = (29.5 + 30.3) / 2
AIRCRAFT_LENGTH['Bombardier Learjet 75 (twin-jet)'] = 17.7
AIRCRAFT_LENGTH['Canadair Challenger (twin-jet)'] = 20.9
AIRCRAFT_LENGTH['Canadair Challenger 350 (twin-jet)'] = 20.9
AIRCRAFT_LENGTH['Canadair Regional Jet CRJ-200 (twin-jet)'] = 26.77
AIRCRAFT_LENGTH['Canadair Regional Jet CRJ-700 (twin-jet)'] = 32.3
AIRCRAFT_LENGTH['Canadair Regional Jet CRJ-900 (twin-jet)'] = 36.2
AIRCRAFT_LENGTH['Cessna 152 (piston-single)'] = 7.34
AIRCRAFT_LENGTH['Cessna Caravan (single-turboprop)'] = 11.46
AIRCRAFT_LENGTH['Cessna Citation Bravo (twin-jet)'] = 14.54
AIRCRAFT_LENGTH['Cessna Citation CJ1 (twin-jet)'] = 12.98
AIRCRAFT_LENGTH['Cessna Citation CJ2+ (twin-jet)'] = 14.53
AIRCRAFT_LENGTH['Cessna Citation CJ3 (twin-jet)'] = 15.59
AIRCRAFT_LENGTH['Cessna Citation CJ4 (twin-jet)'] = 16.26
AIRCRAFT_LENGTH['Cessna Citation M2 (twin-jet)'] = 12.98
AIRCRAFT_LENGTH['Cessna Citation Excel/XLS (twin-jet)'] = 16.0
AIRCRAFT_LENGTH['Cessna Citation II (twin-jet)'] = 14.54
AIRCRAFT_LENGTH['Cessna Citation Latitude (twin-jet)'] = 18.97
AIRCRAFT_LENGTH['Cessna Citation Longitude (twin-jet)'] = 22.3
AIRCRAFT_LENGTH['Cessna Citation Mustang (twin-jet)'] = 12.37
AIRCRAFT_LENGTH['Cessna Citation Sovereign (twin-jet)'] = 19.35
AIRCRAFT_LENGTH['Cessna Citation V (twin-jet)'] = 14.91
AIRCRAFT_LENGTH['Cessna Citation X (twin-jet)'] = 22.04
AIRCRAFT_LENGTH['Cessna Conquest 2 (twin-turboprop)'] = 11.89
AIRCRAFT_LENGTH['Cessna Skyhawk (piston-single)'] = 8.28
AIRCRAFT_LENGTH['Cessna Skylane (piston-single)'] = 8.84
AIRCRAFT_LENGTH['CESSNA T182 Turbo Skylane (piston-single)'] = 8.84
AIRCRAFT_LENGTH['Cessna T206 Turbo Stationair (piston-single)'] = 8.61
AIRCRAFT_LENGTH['Cessna 421 (twin-piston)'] = 11.09
AIRCRAFT_LENGTH['Cirrus SR-20 (piston-single)'] = 7.92
AIRCRAFT_LENGTH['Cirrus SR-22 (piston-single)'] = 7.92
AIRCRAFT_LENGTH['Cirrus SR22 Turbo (piston-single)'] = 7.92
AIRCRAFT_LENGTH['Cirrus Vision SF50 (single-jet)'] = 9.42
AIRCRAFT_LENGTH['Daher-Socata TBM-900 (single-turboprop)'] = 10.72
AIRCRAFT_LENGTH['Dassault Falcon 50 (tri-jet)'] = 18.52
AIRCRAFT_LENGTH['Dassault Falcon 2000 (twin-jet)'] = 20.23
AIRCRAFT_LENGTH['Dassault Falcon 900 (tri-jet)'] = 20.21
AIRCRAFT_LENGTH['Embraer 170/175 (twin-jet)'] = (29.90 + 31.68) / 2
AIRCRAFT_LENGTH['EMBRAER 175 (long wing) (twin-jet)'] = 31.68
AIRCRAFT_LENGTH['Embraer ERJ-135 (twin-jet)'] = 26.33
AIRCRAFT_LENGTH['Embraer ERJ-145 (twin-jet)'] = 29.87
AIRCRAFT_LENGTH['Embraer ERJ 175 (twin-jet)'] = 31.68
AIRCRAFT_LENGTH['Embraer ERJ 190 (twin-jet)'] = 36.25
AIRCRAFT_LENGTH['Embraer ERJ-190 (twin-jet)'] = 36.25
AIRCRAFT_LENGTH['Embraer Legacy 450 (twin-jet)'] = 19.69
AIRCRAFT_LENGTH['Embraer Legacy 550 (twin-jet)'] = 20.74
AIRCRAFT_LENGTH['Embraer Legacy 600/650 (twin-jet)'] = 26.33
AIRCRAFT_LENGTH['Embraer Phenom 100 (twin-jet)'] = 12.82
AIRCRAFT_LENGTH['Embraer Phenom 300 (twin-jet)'] = 15.9
AIRCRAFT_LENGTH['Epic Aircraft LT (single-turboprop)'] = 10.92
AIRCRAFT_LENGTH['Eurocopter EC-635 (twin-turboshaft)'] = 10.21
AIRCRAFT_LENGTH['Fairchild Dornier 328JET (twin-jet)'] = 21.11
AIRCRAFT_LENGTH['Gulfstream Aerospace Gulfstream 3 (twin-jet)'] = 25.32
AIRCRAFT_LENGTH['Gulfstream Aerospace Gulfstream G450 (twin-jet)'] = 27.23
AIRCRAFT_LENGTH['Gulfstream Aerospace Gulfstream G550 (twin-jet)'] = 29.39
AIRCRAFT_LENGTH['Gulfstream Aerospace Gulfstream G650 (twin-jet)'] = 30.41
AIRCRAFT_LENGTH['Gulfstream Aerospace Gulfstream IV (twin-jet)'] = 26.92
AIRCRAFT_LENGTH['Gulfstream Aerospace Gulfstream V (twin-jet)'] = 29.4
AIRCRAFT_LENGTH['GULFSTREAM AEROSPACE G-7 Gulfstream G600 (twin-jet)'] = 29.29
<----SKIPPED LINES---->
except IOError:
Log('Unable to append to ' + file)
if rolling:
Tail(file, rolling, lines_to_keep=ROLLING_LOG_SIZE)
def Tail(in_name, rolling_name, max_line_length=100, lines_to_keep=1000):
"""Fast pythonic implementation of tail -n.
Args:
in_name: name of file for which we want the tail
rolling_name: name of file to write out
max_line_length: since this uses seek to find the block of text near the end
that has at most the lines_to_keep number of lines, we need to estimate
the max line length over that block of text. We can afford to be a
little conservative here.
lines_to_keep: how many lines to keep in the rolling file.
Returns:
Integer number of lines actually kept.
"""
with open(in_name, 'r') as f:
f.seek(0, os.SEEK_END)
f_length = f.tell()
bytes_to_read = min(max_line_length * lines_to_keep, f_length)
f.seek(f_length - bytes_to_read)
end_text = f.read()
lines = end_text.split('\n')
# perhaps the file was smaller than lines_to_keep lines, or many lines were
# longer than max_line_length; in that case, the resulting text block will
# potentially be smaller than lines_to_keep
lines_to_keep = min(lines_to_keep, len(lines))
with open(rolling_name, 'w') as f:
f.write('\n'.join(lines[-lines_to_keep:]))
return lines_to_keep
def UpdateRollingLogSize(configuration):
"""Set the global rolling_log_line_count based on settings file."""
if 'rolling_log_line_count' in configuration:
global ROLLING_LOG_SIZE
ROLLING_LOG_SIZE = configuration['rolling_log_line_count']
def LogTimes(times, threshold=0, title=''):
<----SKIPPED LINES---->
parsed_flight_details = parsed_json['flights'][fa_flight_number]
flight['fa_flight_number'] = fa_flight_number
origin = parsed_flight_details.get('origin')
if origin:
flight['origin_friendly'] = origin.get('friendlyLocation')
flight['origin_iata'] = origin.get('iata')
destination = parsed_flight_details.get('destination')
if destination:
flight['destination_friendly'] = destination.get('friendlyLocation')
flight['destination_iata'] = destination.get('iata')
aircraft_type = parsed_flight_details.get('aircraft')
if aircraft_type:
flight['aircraft_type_code'] = aircraft_type.get('type')
flight['aircraft_type_friendly'] = aircraft_type.get('friendlyType')
if flight['aircraft_type_friendly']:
flight['aircraft_type_friendly'] = flight[
'aircraft_type_friendly'].replace('biréacteur', 'twin-jet')
flight['owner_location'] = Unidecode(aircraft_type.get('ownerLocation'))
flight['owner'] = Unidecode(aircraft_type.get('owner'))
flight['tail'] = Unidecode(aircraft_type.get('tail'))
takeoff_time = parsed_flight_details.get('takeoffTimes')
if takeoff_time:
flight['scheduled_takeofftime'] = takeoff_time.get('scheduled')
flight['actual_takeoff_time'] = takeoff_time.get('actual')
gate_departure_time = parsed_flight_details.get('gateDepartureTimes')
if gate_departure_time:
flight['scheduled_departure_time'] = gate_departure_time.get('scheduled')
flight['actual_departure_time'] = gate_departure_time.get('actual')
gate_arrival_time = parsed_flight_details.get('gateArrivalTimes')
if gate_arrival_time:
flight['scheduled_arrival_time'] = gate_arrival_time.get('scheduled')
flight['estimated_arrival_time'] = gate_arrival_time.get('estimated')
landing_time = parsed_flight_details.get('landingTimes')
<----SKIPPED LINES---->
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]
where each 0 is replaced by an integer 0,...,69.
'''
# For each element in the string,
# if it is an '{', find the closing '}' and collapse into one element
# if it is not an '{' and we are not in an escaped string, translate
translation = {
' ': 0, 'A': 1, 'B': 2, 'C': 3, 'D': 4,
'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9,
'J': 10, 'K': 11, 'L': 12, 'M': 13, 'N': 14,
'O': 15, 'P': 16, 'Q': 17, 'R': 18, 'S': 19,
'T': 20, 'U': 21, 'V': 22, 'W': 23, 'X': 24,
'Y': 25, 'Z': 26, '1': 27, '2': 28, '3': 29,
'4': 30, '5': 31, '6': 32, '7': 33, '8': 34,
'9': 35, '0': 36, '!': 37, '@': 38, '#': 39,
'$': 40, '(': 41, ')': 42, '-': 44, '+': 46,
'&': 47, '=': 48, ';': 49, ':': 50, "'": 52,
'"': 53, '%': 54, ',': 55, '.': 56, '/': 59,
'?': 60, '°': 62, 'É': 5, 'Д': 1, 'В': 2}
# valid codes are those enumerated above plus the seven colors in 63, ..., 69
valid_codes = list(translation.values())
valid_codes.extend([63, 64, 65, 66, 67, 68, 69])
pointer = 0
message_array = []
while pointer < len(s):
if s[pointer] == '{':
end_escape = s.find('}', pointer)
if end_escape == -1:
Log('Escaped sequence missing closing curly brace: "%s"' % s)
escaped_sequence = s[pointer+1 : end_escape]
try:
escaped_value = int(escaped_sequence)
except ValueError:
Log('Escaped sequence "%s" is not a number in message "%s"'
<----SKIPPED LINES---->
|
01234567890123456789012345678901234567890123456789012345678901234567890123456789
437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509 586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657 215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196 65186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558 |
<----SKIPPED LINES---->
AIRCRAFT_LENGTH['BOEING 787-10 Dreamliner (twin-jet)'] = 68.28
AIRCRAFT_LENGTH['BOEING BBJ (747-8) (quad-jet)'] = 76.25
AIRCRAFT_LENGTH['BOEING BBJ (777-200LR) (twin-jet)'] = 63.73
AIRCRAFT_LENGTH['BOEING BBJ (777-300ER) (twin-jet)'] = 73.86
AIRCRAFT_LENGTH['BOEING BBJ3 (twin-jet)'] = 42.11
AIRCRAFT_LENGTH['Boeing Dreamliner (Srs.8) (twin-jet)'] = 56.72
AIRCRAFT_LENGTH['BOEING Dreamliner (Srs.9) (twin-jet)'] = 62.81
AIRCRAFT_LENGTH['Boeing MD-11 (tri-jet)'] = (61.2 + 61.6) / 2
AIRCRAFT_LENGTH['BOMBARDIER BD-700 Global 7500 (twin-jet)'] = 33.88
AIRCRAFT_LENGTH['Bombardier Challenger 300 (twin-jet)'] = 20.92
AIRCRAFT_LENGTH['Bombardier Global 5000 (twin-jet)'] = 29.5
AIRCRAFT_LENGTH['Bombardier Global Express (twin-jet)'] = (29.5 + 30.3) / 2
AIRCRAFT_LENGTH['Bombardier Learjet 75 (twin-jet)'] = 17.7
AIRCRAFT_LENGTH['Canadair Challenger (twin-jet)'] = 20.9
AIRCRAFT_LENGTH['Canadair Challenger 350 (twin-jet)'] = 20.9
AIRCRAFT_LENGTH['Canadair Regional Jet CRJ-200 (twin-jet)'] = 26.77
AIRCRAFT_LENGTH['Canadair Regional Jet CRJ-700 (twin-jet)'] = 32.3
AIRCRAFT_LENGTH['Canadair Regional Jet CRJ-900 (twin-jet)'] = 36.2
AIRCRAFT_LENGTH['Cessna 152 (piston-single)'] = 7.34
AIRCRAFT_LENGTH['Cessna Caravan (single-turboprop)'] = 11.46
AIRCRAFT_LENGTH['Cessna Citation 1SP (twin-jet)'] = 13.26
AIRCRAFT_LENGTH['Cessna Citation Bravo (twin-jet)'] = 14.54
AIRCRAFT_LENGTH['Cessna Citation CJ1 (twin-jet)'] = 12.98
AIRCRAFT_LENGTH['Cessna Citation CJ2+ (twin-jet)'] = 14.53
AIRCRAFT_LENGTH['Cessna Citation CJ3 (twin-jet)'] = 15.59
AIRCRAFT_LENGTH['Cessna Citation CJ4 (twin-jet)'] = 16.26
AIRCRAFT_LENGTH['Cessna Citation M2 (twin-jet)'] = 12.98
AIRCRAFT_LENGTH['Cessna Citation Excel/XLS (twin-jet)'] = 16.0
AIRCRAFT_LENGTH['Cessna Citation II (twin-jet)'] = 14.54
AIRCRAFT_LENGTH['Cessna Citation Latitude (twin-jet)'] = 18.97
AIRCRAFT_LENGTH['Cessna Citation Longitude (twin-jet)'] = 22.3
AIRCRAFT_LENGTH['Cessna Citation Mustang (twin-jet)'] = 12.37
AIRCRAFT_LENGTH['Cessna Citation Sovereign (twin-jet)'] = 19.35
AIRCRAFT_LENGTH['Cessna Citation V (twin-jet)'] = 14.91
AIRCRAFT_LENGTH['Cessna Citation X (twin-jet)'] = 22.04
AIRCRAFT_LENGTH['Cessna Conquest 2 (twin-turboprop)'] = 11.89
AIRCRAFT_LENGTH['Cessna Skyhawk (piston-single)'] = 8.28
AIRCRAFT_LENGTH['Cessna Skylane (piston-single)'] = 8.84
AIRCRAFT_LENGTH['CESSNA T182 Turbo Skylane (piston-single)'] = 8.84
AIRCRAFT_LENGTH['Cessna T206 Turbo Stationair (piston-single)'] = 8.61
AIRCRAFT_LENGTH['Cessna 421 (twin-piston)'] = 11.09
AIRCRAFT_LENGTH['Cirrus SR-20 (piston-single)'] = 7.92
AIRCRAFT_LENGTH['Cirrus SR-22 (piston-single)'] = 7.92
AIRCRAFT_LENGTH['Cirrus SR22 Turbo (piston-single)'] = 7.92
AIRCRAFT_LENGTH['Cirrus Vision SF50 (single-jet)'] = 9.42
AIRCRAFT_LENGTH['Daher-Socata TBM-900 (single-turboprop)'] = 10.72
AIRCRAFT_LENGTH['Dassault Falcon 50 (tri-jet)'] = 18.52
AIRCRAFT_LENGTH['Dassault Falcon 7X (tri-jet)'] = 23.38
AIRCRAFT_LENGTH['Dassault Falcon 2000 (twin-jet)'] = 20.23
AIRCRAFT_LENGTH['Dassault Falcon 900 (tri-jet)'] = 20.21
AIRCRAFT_LENGTH['Embraer 170/175 (twin-jet)'] = (29.90 + 31.68) / 2
AIRCRAFT_LENGTH['EMBRAER 175 (long wing) (twin-jet)'] = 31.68
AIRCRAFT_LENGTH['EMBRAER 195 (twin-jet)'] = 38.66
AIRCRAFT_LENGTH['Embraer ERJ-135 (twin-jet)'] = 26.33
AIRCRAFT_LENGTH['Embraer ERJ-145 (twin-jet)'] = 29.87
AIRCRAFT_LENGTH['Embraer ERJ 175 (twin-jet)'] = 31.68
AIRCRAFT_LENGTH['Embraer ERJ 190 (twin-jet)'] = 36.25
AIRCRAFT_LENGTH['Embraer ERJ-190 (twin-jet)'] = 36.25
AIRCRAFT_LENGTH['Embraer Legacy 450 (twin-jet)'] = 19.69
AIRCRAFT_LENGTH['Embraer Legacy 550 (twin-jet)'] = 20.74
AIRCRAFT_LENGTH['Embraer Legacy 600/650 (twin-jet)'] = 26.33
AIRCRAFT_LENGTH['Embraer Phenom 100 (twin-jet)'] = 12.82
AIRCRAFT_LENGTH['Embraer Phenom 300 (twin-jet)'] = 15.9
AIRCRAFT_LENGTH['Epic Aircraft LT (single-turboprop)'] = 10.92
AIRCRAFT_LENGTH['Eurocopter EC-635 (twin-turboshaft)'] = 10.21
AIRCRAFT_LENGTH['Fairchild Dornier 328JET (twin-jet)'] = 21.11
AIRCRAFT_LENGTH['Gulfstream Aerospace Gulfstream 3 (twin-jet)'] = 25.32
AIRCRAFT_LENGTH['Gulfstream Aerospace Gulfstream G450 (twin-jet)'] = 27.23
AIRCRAFT_LENGTH['Gulfstream Aerospace Gulfstream G550 (twin-jet)'] = 29.39
AIRCRAFT_LENGTH['Gulfstream Aerospace Gulfstream G650 (twin-jet)'] = 30.41
AIRCRAFT_LENGTH['Gulfstream Aerospace Gulfstream IV (twin-jet)'] = 26.92
AIRCRAFT_LENGTH['Gulfstream Aerospace Gulfstream V (twin-jet)'] = 29.4
AIRCRAFT_LENGTH['GULFSTREAM AEROSPACE G-7 Gulfstream G600 (twin-jet)'] = 29.29
<----SKIPPED LINES---->
except IOError:
Log('Unable to append to ' + file)
if rolling:
Tail(file, rolling, lines_to_keep=ROLLING_LOG_SIZE)
def Tail(in_name, rolling_name, max_line_length=100, lines_to_keep=1000):
"""Fast pythonic implementation of tail -n.
Args:
in_name: name of file for which we want the tail
rolling_name: name of file to write out
max_line_length: since this uses seek to find the block of text near the end
that has at most the lines_to_keep number of lines, we need to estimate
the max line length over that block of text. We can afford to be a
little conservative here.
lines_to_keep: how many lines to keep in the rolling file.
Returns:
Integer number of lines actually kept, or -1 if UnicodeDecodeError detected
(in which case the file was left unmodified).
"""
with open(in_name, 'r') as f:
f.seek(0, os.SEEK_END)
f_length = f.tell()
bytes_to_read = min(max_line_length * lines_to_keep, f_length)
f.seek(f_length - bytes_to_read)
try:
end_text = f.read()
# Periodically, we get the following python error:
#
# UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 0:
# invalid start byte
#
# after which the module errors once, but subsequent calls to Log (and thus
# to Tail) do not cause the same error. If there were really an invalid or
# non-decodable byte in that position stored on disk, then presumably
# subsequent calls to log on restart would cause the same error (because,
# when exiting with an unhandled exception from this point, the log file
# was not updated). Thus, we can reasonably assume that this is a transient
# error, and just skip taking the tail. The next call to Log will
# correct the log length to be the max number of lines.
#
# An incorrect assumption here - that is, if the error is not transient -
# will show up by having a log file far in excess of the ROLLING_LOG_SIZE
# number of lines.
except UnicodeDecodeError:
return -1
lines = end_text.split('\n')
# perhaps the file was smaller than lines_to_keep lines, or many lines were
# longer than max_line_length; in that case, the resulting text block will
# potentially be smaller than lines_to_keep
lines_to_keep = min(lines_to_keep, len(lines))
with open(rolling_name, 'w') as f:
f.write('\n'.join(lines[-lines_to_keep:]))
return lines_to_keep
def UpdateRollingLogSize(configuration):
"""Set the global rolling_log_line_count based on settings file."""
if 'rolling_log_line_count' in configuration:
global ROLLING_LOG_SIZE
ROLLING_LOG_SIZE = configuration['rolling_log_line_count']
def LogTimes(times, threshold=0, title=''):
<----SKIPPED LINES---->
parsed_flight_details = parsed_json['flights'][fa_flight_number]
flight['fa_flight_number'] = fa_flight_number
origin = parsed_flight_details.get('origin')
if origin:
flight['origin_friendly'] = origin.get('friendlyLocation')
flight['origin_iata'] = origin.get('iata')
destination = parsed_flight_details.get('destination')
if destination:
flight['destination_friendly'] = destination.get('friendlyLocation')
flight['destination_iata'] = destination.get('iata')
aircraft_type = parsed_flight_details.get('aircraft')
if aircraft_type:
flight['aircraft_type_code'] = aircraft_type.get('type')
flight['aircraft_type_friendly'] = aircraft_type.get('friendlyType')
if flight['aircraft_type_friendly']:
flight['aircraft_type_friendly'] = flight[
'aircraft_type_friendly'].replace('biréacteur', 'twin-jet')
flight['aircraft_type_friendly'] = flight[
'aircraft_type_friendly'].replace('zweimotoriger Jet', 'twin-jet')
flight['owner_location'] = Unidecode(aircraft_type.get('ownerLocation'))
flight['owner'] = Unidecode(aircraft_type.get('owner'))
flight['tail'] = Unidecode(aircraft_type.get('tail'))
takeoff_time = parsed_flight_details.get('takeoffTimes')
if takeoff_time:
flight['scheduled_takeofftime'] = takeoff_time.get('scheduled')
flight['actual_takeoff_time'] = takeoff_time.get('actual')
gate_departure_time = parsed_flight_details.get('gateDepartureTimes')
if gate_departure_time:
flight['scheduled_departure_time'] = gate_departure_time.get('scheduled')
flight['actual_departure_time'] = gate_departure_time.get('actual')
gate_arrival_time = parsed_flight_details.get('gateArrivalTimes')
if gate_arrival_time:
flight['scheduled_arrival_time'] = gate_arrival_time.get('scheduled')
flight['estimated_arrival_time'] = gate_arrival_time.get('estimated')
landing_time = parsed_flight_details.get('landingTimes')
<----SKIPPED LINES---->
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]
where each 0 is replaced by an integer 0,...,69.
'''
# For each element in the string,
# if it is an '{', find the closing '}' and collapse into one element
# if it is not an '{' and we are not in an escaped string, translate
translation = {
' ': 0, 'A': 1, 'B': 2, 'C': 3, 'D': 4,
'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9,
'J': 10, 'K': 11, 'L': 12, 'M': 13, 'N': 14,
'O': 15, 'P': 16, 'Q': 17, 'R': 18, 'S': 19,
'T': 20, 'U': 21, 'V': 22, 'W': 23, 'X': 24,
'Y': 25, 'Z': 26, '1': 27, '2': 28, '3': 29,
'4': 30, '5': 31, '6': 32, '7': 33, '8': 34,
'9': 35, '0': 36, '!': 37, '@': 38, '#': 39,
'$': 40, '(': 41, ')': 42, '-': 44, '+': 46,
'&': 47, '=': 48, ';': 49, ':': 50, "'": 52,
'"': 53, '%': 54, ',': 55, '.': 56, '/': 59,
'?': 60, '°': 62, 'É': 5, 'Д': 1, 'В': 2, 'Í': 9}
# valid codes are those enumerated above plus the seven colors in 63, ..., 69
valid_codes = list(translation.values())
valid_codes.extend([63, 64, 65, 66, 67, 68, 69])
pointer = 0
message_array = []
while pointer < len(s):
if s[pointer] == '{':
end_escape = s.find('}', pointer)
if end_escape == -1:
Log('Escaped sequence missing closing curly brace: "%s"' % s)
escaped_sequence = s[pointer+1 : end_escape]
try:
escaped_value = int(escaped_sequence)
except ValueError:
Log('Escaped sequence "%s" is not a number in message "%s"'
<----SKIPPED LINES---->
|