def upload_( request ): if request.method == "POST": if request.is_ajax( ): # the file is stored raw in the request upload = request is_raw = True # AJAX Upload will pass the filename in the querystring if it is the "advanced" ajax upload try: filename = request.GET[ 'qqfile' ] except KeyError: return HttpResponseBadRequest( "AJAX request not valid" ) # not an ajax upload, so it was the "basic" iframe version with submission via form else: is_raw = False if len( request.FILES ) == 1: # FILES is a dictionary in Django but Ajax Upload gives the uploaded file an # ID based on a random number, so it cannot be guessed here in the code. # Rather than editing Ajax Upload to pass the ID in the querystring, # observer that each upload is a separate request, # so FILES should only have one entry. # Thus, we can just grab the first (and only) value in the dict. upload = request.FILES.values( )[ 0 ] else: raise Http404( "Bad Upload" ) filename = upload.name (tmp_id, tmp_up) = tempfile.mkstemp(suffix='-' + filename, dir="uploads") dfilename = tmp_up os.close(tmp_id) # save the file success = save_upload( upload, dfilename, is_raw ) track = IGC(open(dfilename)).track() kmz = flights2kmz([Flight(track)], roots=[], tz_offset=0, task=None) (tmp_id, tmp_up2) = tempfile.mkstemp(suffix='-' + filename + '.kmz', dir="uploads") os.close(tmp_id) kmz.write(tmp_up2, '2.2') os.unlink(tmp_up) ret_json = { 'success': success, 'track': tmp_up2.replace(os.path.join(os.getcwd(), 'uploads'),'/static/') } r = json.dumps( ret_json ) return HttpResponse(r, mimetype='application/json' )
def getResult(self): kwargs = {} kwargs['filename'] = "FAKE NAME" t = track.Track(self.coords, **kwargs) f = Flight(t) try: kmz = flights2kmz([f], roots=[], tz_offset=0, task=None) sio = StringIO.StringIO() kmz.write("TEMP-TEST", '2.2') except Exception,e: traceback.print_exc()
def getResult(self): kwargs = {} kwargs['filename'] = "FAKE NAME" t = track.Track(self.coords, **kwargs) f = Flight(t) try: kmz = flights2kmz([f], roots=[], tz_offset=0, task=None) sio = StringIO.StringIO() kmz.write("TEMP-TEST", '2.2') except Exception, e: traceback.print_exc()
def main(argv): parser = optparse.OptionParser( usage='Usage: %prog [options] flightID', description='IGC to Google Earth converter (Leonardo integration)') parser.add_option('-o', '--output', metavar='FILENAME', help='set output filename') parser.add_option('-n', '--name', metavar='STRING') parser.add_option('-i', '--icon', metavar='URL') parser.add_option('-u', '--url', metavar='URL', help='set URL') parser.add_option('-d', '--directory', metavar='PATH', help='set directory') parser.add_option('-e', '--engine', metavar='URL', help='set engine') parser.add_option('-z', '--tz-offset', metavar='HOURS', type='int', help='set timezone offset') parser.add_option('-t', '--table-prefix', metavar='STRING', help='set table prefix') parser.add_option('-x', '--igc-suffix', metavar='STRING', help='set IGC file suffix') parser.add_option('-I', '--igc-path', metavar='STRING', help='set IGC path') parser.add_option('-P', '--photos-path', metavar='STRING', help='set photos path') parser.add_option('-U', '--photos-url', metavar='STRING', help='set photos URL') parser.set_defaults(output='igc2kmz.kmz') parser.set_defaults(name=DEFAULT_NAME) parser.set_defaults(icon=DEFAULT_ICON) parser.set_defaults(url=DEFAULT_URL) parser.set_defaults(directory=DEFAULT_DIRECTORY) parser.set_defaults(tz_offset=0) parser.set_defaults(table_prefix=DEFAULT_TABLE_PREFIX) parser.set_defaults(igc_path=DEFAULT_IGC_PATH) parser.set_defaults(photos_path=DEFAULT_PHOTOS_PATH) parser.set_defaults(photos_url=DEFAULT_PHOTOS_URL) parser.set_defaults(igc_suffix='.saned.full.igc') options, args = parser.parse_args(argv) # flights_dir = os.path.join(options.directory, 'modules', 'leonardo', 'flights') # roots = [] roots.append(make_banner(options)) # metadata = MetaData(options.engine) pilots_table = Table(options.table_prefix + '_pilots', metadata, autoload=True) flights_table = Table(options.table_prefix + '_flights', metadata, autoload=True) flights_score_table = Table(options.table_prefix + '_flights_score', metadata, autoload=True) photos_table = Table(options.table_prefix + '_photos', metadata, autoload=True) waypoints_table = Table(options.table_prefix + '_waypoints', metadata, autoload=True) # flights = [] for flightID in args[1:]: select = flights_table.select(flights_table.c.ID == int(flightID)) flight_row = select.execute().fetchone() if flight_row is None: raise KeyError, id if flight_row.userServerID: pilot_id = '%(userServerID)d_%(userID)d' % flight_row else: pilot_id = flight_row.userID substitutions = { 'PILOTID': str(pilot_id), 'YEAR': str(flight_row.DATE.year), } igc_path = os.path.join(options.directory, substitute(options.igc_path, substitutions), flight_row.filename + options.igc_suffix) track = IGC(open(igc_path), date=flight_row.DATE).track() flight = Flight(track) flight.glider_type = flight_row.glider flight.url = options.url + SHOW_FLIGHT_URL % flight_row # select = pilots_table.select((pilots_table.c.pilotID == flight_row.userID) & (pilots_table.c.serverID == flight_row.userServerID)) pilot_row = select.execute().fetchone() if pilot_row is None: raise KeyError, '(%(userID)s, %(userServerID)s)' % flight_row flight.pilot_name = '%(FirstName)s %(LastName)s' % pilot_row # routes = [] select = flights_score_table.select(flights_score_table.c.flightID == flight_row.ID) for flight_score_row in select.execute().fetchall(): route_name = ROUTE_NAME[flight_score_row.type] league = LEAGUE[flight_score_row.method] distance = flight_score_row.distance score = flight_score_row.score multiplier = round(score / distance, 2) circuit = CIRCUIT[flight_score_row.type] tps = [] for i in xrange(1, 8): m = B_RECORD_RE.match(flight_score_row['turnpoint%d' % i]) if not m: continue time = datetime.time(*map(int, m.group(1, 2, 3))) dt = datetime.datetime.combine(flight_row.DATE, time) lat = int(m.group(4)) + int(m.group(5)) / 60000.0 if m.group(6) == 'S': lat = -lat lon = int(m.group(7)) + int(m.group(8)) / 60000.0 if m.group(9) == 'W': lon = -lon coord = Coord.deg(lat, lon, 0, dt) name = 'Start' if i == 1 else 'TP%d' % (i - 1) tp = Turnpoint(name, coord) tps.append(tp) tps[-1].name = 'Finish' route = Route(route_name, league, distance, multiplier, score, circuit, tps) routes.append(route) flight.xc = XC(routes) # if flight_row.hasPhotos: select = photos_table.select(photos_table.c.flightID == flight_row.ID) for photo_row in select.execute().fetchall(): photo_url = options.url \ + substitute(options.photos_url, substitutions) \ + '/' + photo_row.name photo_path = os.path.join(options.directory, substitute(options.photos_path, substitutions), photo_row.name) photo = Photo(photo_url, path=photo_path) if photo_row.description: photo.description = photo_row.description flight.photos.append(photo) # flights.append(flight) # select = waypoints_table.select(waypoints_table.c.ID == flight_row.takeoffID) takeoff_row = select.execute().fetchone() if takeoff_row: roots.append(make_takeoff_placemark(takeoff_row)) # kmz = flights2kmz(flights, roots=roots, tz_offset=options.tz_offset) kmz.write(options.output, '2.2')
def main(argv): parser = optparse.OptionParser( usage='Usage: %prog [options]', description="IGC to Google Earth converter") parser.add_option('-o', '--output', metavar='FILENAME', help='set output filename') parser.add_option('-z', '--tz-offset', metavar='HOURS', type='int', help='set timezone offset') parser.add_option('-r', '--root', metavar='FILENAME', action='append', dest='roots', help='add root element') parser.add_option('-t', '--task', metavar='FILENAME', help='set task') group = optparse.OptionGroup(parser, 'Per-flight options') group.add_option('-i', '--igc', metavar='FILENAME', type='string', action='callback', callback=add_flight, help='set flight IGC file') group.add_option('-n', '--pilot-name', metavar='STRING', type='string', action='callback', callback=set_flight_option, help='set pilot name') group.add_option('-g', '--glider-type', metavar='STRING', type='string', action='callback', callback=set_flight_option, help='set glider type') group.add_option('-c', '--color', metavar='COLOR', type='string', action='callback', callback=set_flight_option, help='set track line color') group.add_option('-w', '--width', metavar='INTEGER', type='int', action='callback', callback=set_flight_option, help='set track line width') group.add_option('-u', '--url', metavar='URL', type='string', action='callback', callback=set_flight_option, help='set flight URL') group.add_option('-x', '--xc', metavar='FILENAME', type='string', action='callback', callback=set_flight_xc, help='set flight XC') parser.add_option_group(group) group = optparse.OptionGroup(parser, 'Per-photo options') group.add_option('-p', '--photo', metavar='URL', type='string', action='callback', callback=add_photo, help='add photo') group.add_option('-d', '--description', metavar='STRING', type='string', action='callback', callback=set_photo_option, help='set photo comment') parser.add_option_group(group) # parser.set_defaults(flights=[]) parser.set_defaults(output='igc2kmz.kmz') parser.set_defaults(roots=[]) parser.set_defaults(tz_offset=0) # options, args = parser.parse_args(argv) if len(options.flights) == 0: parser.error('no flights specified') if len(args) != 1: parser.error('extra arguments on command line: %s' % repr(args[1:])) # roots = [Verbatim(open(root).read()) for root in options.roots] task = Task.from_file(open(options.task)) if options.task else None kmz = flights2kmz(options.flights, roots=roots, tz_offset=options.tz_offset, task=task) kmz.write(options.output, '2.2')
def main(argv): parser = optparse.OptionParser( usage='Usage: %prog [options] flightID', description='IGC to Google Earth converter (Leonardo integration)') parser.add_option('-o', '--output', metavar='FILENAME', help='set output filename') parser.add_option('-n', '--name', metavar='STRING') parser.add_option('-i', '--icon', metavar='URL') parser.add_option('-u', '--url', metavar='URL', help='set URL') parser.add_option('-d', '--directory', metavar='PATH', help='set directory') parser.add_option('-e', '--engine', metavar='URL', help='set engine') parser.add_option('-z', '--tz-offset', metavar='HOURS', type='int', help='set timezone offset') parser.add_option('-t', '--table-prefix', metavar='STRING', help='set table prefix') parser.add_option('-x', '--igc-suffix', metavar='STRING', help='set IGC file suffix') parser.add_option('-I', '--igc-path', metavar='STRING', help='set IGC path') parser.add_option('-P', '--photos-path', metavar='STRING', help='set photos path') parser.add_option('-U', '--photos-url', metavar='STRING', help='set photos URL') parser.set_defaults(output='igc2kmz.kmz') parser.set_defaults(name=DEFAULT_NAME) parser.set_defaults(icon=DEFAULT_ICON) parser.set_defaults(url=DEFAULT_URL) parser.set_defaults(directory=DEFAULT_DIRECTORY) parser.set_defaults(tz_offset=0) parser.set_defaults(table_prefix=DEFAULT_TABLE_PREFIX) parser.set_defaults(igc_path=DEFAULT_IGC_PATH) parser.set_defaults(photos_path=DEFAULT_PHOTOS_PATH) parser.set_defaults(photos_url=DEFAULT_PHOTOS_URL) parser.set_defaults(igc_suffix='.saned.full.igc') options, args = parser.parse_args(argv) # flights_dir = os.path.join(options.directory, 'modules', 'leonardo', 'flights') # roots = [] roots.append(make_banner(options)) # metadata = MetaData(options.engine) pilots_table = Table(options.table_prefix + '_pilots', metadata, autoload=True) flights_table = Table(options.table_prefix + '_flights', metadata, autoload=True) flights_score_table = Table(options.table_prefix + '_flights_score', metadata, autoload=True) photos_table = Table(options.table_prefix + '_photos', metadata, autoload=True) waypoints_table = Table(options.table_prefix + '_waypoints', metadata, autoload=True) # flights = [] for flightID in args[1:]: select = flights_table.select(flights_table.c.ID == int(flightID)) flight_row = select.execute().fetchone() if flight_row is None: raise KeyError, id if flight_row.userServerID: pilot_id = '%(userServerID)d_%(userID)d' % flight_row else: pilot_id = flight_row.userID substitutions = { 'PILOTID': str(pilot_id), 'YEAR': str(flight_row.DATE.year), } igc_path = os.path.join(options.directory, substitute(options.igc_path, substitutions), flight_row.filename + options.igc_suffix) track = IGC(open(igc_path), date=flight_row.DATE).track() flight = Flight(track) flight.glider_type = flight_row.glider flight.url = options.url + SHOW_FLIGHT_URL % flight_row # select = pilots_table.select( (pilots_table.c.pilotID == flight_row.userID) & (pilots_table.c.serverID == flight_row.userServerID)) pilot_row = select.execute().fetchone() if pilot_row is None: raise KeyError, '(%(userID)s, %(userServerID)s)' % flight_row flight.pilot_name = '%(FirstName)s %(LastName)s' % pilot_row # routes = [] select = flights_score_table.select( flights_score_table.c.flightID == flight_row.ID) for flight_score_row in select.execute().fetchall(): route_name = ROUTE_NAME[flight_score_row.type] league = LEAGUE[flight_score_row.method] distance = flight_score_row.distance score = flight_score_row.score multiplier = round(score / distance, 2) circuit = CIRCUIT[flight_score_row.type] tps = [] for i in xrange(1, 8): m = B_RECORD_RE.match(flight_score_row['turnpoint%d' % i]) if not m: continue time = datetime.time(*map(int, m.group(1, 2, 3))) dt = datetime.datetime.combine(flight_row.DATE, time) lat = int(m.group(4)) + int(m.group(5)) / 60000.0 if m.group(6) == 'S': lat = -lat lon = int(m.group(7)) + int(m.group(8)) / 60000.0 if m.group(9) == 'W': lon = -lon coord = Coord.deg(lat, lon, 0, dt) name = 'Start' if i == 1 else 'TP%d' % (i - 1) tp = Turnpoint(name, coord) tps.append(tp) tps[-1].name = 'Finish' route = Route(route_name, league, distance, multiplier, score, circuit, tps) routes.append(route) flight.xc = XC(routes) # if flight_row.hasPhotos: select = photos_table.select( photos_table.c.flightID == flight_row.ID) for photo_row in select.execute().fetchall(): photo_url = options.url \ + substitute(options.photos_url, substitutions) \ + '/' + photo_row.name photo_path = os.path.join( options.directory, substitute(options.photos_path, substitutions), photo_row.name) photo = Photo(photo_url, path=photo_path) if photo_row.description: photo.description = photo_row.description flight.photos.append(photo) # flights.append(flight) # select = waypoints_table.select( waypoints_table.c.ID == flight_row.takeoffID) takeoff_row = select.execute().fetchone() if takeoff_row: roots.append(make_takeoff_placemark(takeoff_row)) # kmz = flights2kmz(flights, roots=roots, tz_offset=options.tz_offset) kmz.write(options.output, '2.2')
def main(argv): parser = optparse.OptionParser(usage='Usage: %prog [options]', description="IGC to Google Earth converter") parser.add_option('-o', '--output', metavar='FILENAME', help='set output filename') parser.add_option('-z', '--tz-offset', metavar='HOURS', type='int', help='set timezone offset') parser.add_option('-r', '--root', metavar='FILENAME', action='append', dest='roots', help='add root element') parser.add_option('-t', '--task', metavar='FILENAME', help='set task') group = optparse.OptionGroup(parser, 'Per-flight options') group.add_option('-i', '--igc', metavar='FILENAME', type='string', action='callback', callback=add_flight, help='set flight IGC file') group.add_option('-n', '--pilot-name', metavar='STRING', type='string', action='callback', callback=set_flight_option, help='set pilot name') group.add_option('-g', '--glider-type', metavar='STRING', type='string', action='callback', callback=set_flight_option, help='set glider type') group.add_option('-c', '--color', metavar='COLOR', type='string', action='callback', callback=set_flight_option, help='set track line color') group.add_option('-w', '--width', metavar='INTEGER', type='int', action='callback', callback=set_flight_option, help='set track line width') group.add_option('-u', '--url', metavar='URL', type='string', action='callback', callback=set_flight_option, help='set flight URL') group.add_option('-x', '--xc', metavar='FILENAME', type='string', action='callback', callback=set_flight_xc, help='set flight XC') parser.add_option_group(group) group = optparse.OptionGroup(parser, 'Per-photo options') group.add_option('-p', '--photo', metavar='URL', type='string', action='callback', callback=add_photo, help='add photo') group.add_option('-d', '--description', metavar='STRING', type='string', action='callback', callback=set_photo_option, help='set photo comment') parser.add_option_group(group) # parser.set_defaults(flights=[]) parser.set_defaults(roots=[]) parser.set_defaults(tz_offset=0) # options, args = parser.parse_args(argv) if len(options.flights) == 0: parser.error('no flights specified') if len(args) != 1: parser.error('extra arguments on command line: %s' % repr(args[1:])) # roots = [Verbatim(open(root).read()) for root in options.roots] task = Task.from_file(open(options.task)) if options.task else None kmz = flights2kmz(options.flights, roots=roots, tz_offset=options.tz_offset, task=task) output = options.output or default_output kmz.write(output, '2.2')