def post(self): #time.sleep(30) #get track key = self.request.get('key') track_key = ndb.Key(urlsafe=key) track = track_key.get() #to ensure immutability track_stat_query= TrackStatistic.query(ancestor=track_key) stat = track_stat_query.fetch(1) if stat == []: #read data from uploaded file blob_reader = blobstore.BlobReader(track.blob_key) data = blob_reader.read() try: g = GPXReader() a = g.parse_gpx(data) for item in a: gc = GPXCalculation(item) ts = TrackStatistic(parent=track.key,name=item.name) total_distance = gc.calculate_distance() ts.total_distance = total_distance #get track time total_time = gc.total_time().total_seconds() #convert time from seconds to string to match db format str_time = helper.sec_to_time(total_time) ts.total_time = str_time avr_speed = gc.avr_speed() ts.avr_speed = avr_speed total_climb = gc.total_climb() ts.total_climb = total_climb max_elev = gc.max_elev() ts.max_elev = max_elev ts.put() #change status to indicate that calculation is done track.status = "" track.put() except GpxDateFormatException: #if error occurs set status so appropriate message is shown track.status = "Date in wrong format" track.put() except GpxFormatException: #if error occurs set status so appropriate message is shown track.status = "Unable to parse gpx" track.put() #if track is added to db calculate statistic for whole trip helper.calculate_trip_stat(track.key.parent())
def get(self): #get specific track track_key = self.request.get('track_id') trakk = ndb.Key(urlsafe=track_key) track = trakk.get() #delete .gpx files from blobstore bolob = track.blob_key blobstore.delete(bolob) #delete statistic for item in TrackStatistic.query(ancestor=track.key): item.key.delete() #delete track track.key.delete() #calculate trip statistic helper.calculate_trip_stat(track.key.parent()) self.redirect("/tripmanager/onetrip?trip_id="+track.key.parent().urlsafe())