Beispiel #1
0
    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())
Beispiel #2
0
    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())