import os from lib.gpx import Gpx #gpx = Gpx("ok.gpx") gpx = Gpx("rr.gpx") #gpx = Gpx("laufen.gpx") #gpx = Gpx("test/integration/valid.gpx") data = gpx.process(force=True) a = gpx.geo_data print(data)
def add(): tags = Tag.select(Tag.value).distinct() #pylint: disable=E1111 if request.method == "POST": # Validate uploaded file if 'gpx-file' not in request.files: flash("No file uploaded", "error") return redirect(request.url) gpx_file = request.files['gpx-file'] if gpx_file.filename == '': flash("No file selected", "error") return redirect(request.url) if not allowed_file(gpx_file.filename): flash("Only .gpx files supported!", "error") return redirect(request.url) # Store gpx file in filesystem gpx_filename = secure_filename(gpx_file.filename) gpx_filename = "%s_%s.gpx" % ( gpx_filename[:-4], int( datetime.now().timestamp())) # add timestamp to filename gpx_fspath = os.path.join(UPLOAD_BASE_DIR, UPLOAD_DIR, gpx_filename) os.makedirs(os.path.dirname(gpx_fspath), exist_ok=True) gpx_file.save(gpx_fspath) try: # Use gpx library to extract meta information from gpx file gpx = Gpx(gpx_fspath, True) gpx_metadata = gpx.process( force=True) # TODO: improve gpx lib and set force to False # Read form values: tags and name track_name = request.form.get( "name") or "Unnamend activity on %s" % gpx_metadata["date"] tags = request.form.getlist('tag-select') new_tags = request.form.get("new-tags").replace(" ", "") if new_tags != "": tags += new_tags.split(",") tags.append(gpx_metadata["date"][:4]) # implicit add of the year tags = set(tags) # Remove duplicate tags # Create DB ORM objects new_track = Track(name=track_name, date=gpx_metadata["date"], path=os.path.join(UPLOAD_DIR, gpx_filename)) # Read statistics new_track_stats = Statistic( track=new_track, distance_m=gpx_metadata["total_distance"], duration_s=gpx_metadata["duration"], duration_total_s=gpx_metadata["total_duration"], max_speed=gpx_metadata["max_speed"], avg_speed=gpx_metadata["avg_speed"], elevation_up_m=gpx_metadata["total_ascent"], elevation_down_m=gpx_metadata["total_descent"]) except Exception as e: flash("Error during gpx file processing: %s" % e, "error") # Clean up if 'new_track' in locals(): new_track.delete_instance() if 'new_track_stats' in locals(): new_track_stats.delete_instance() os.remove( os.path.join(os.path.dirname(os.path.realpath(__file__)), UPLOAD_BASE_DIR, UPLOAD_DIR, gpx_filename)) return redirect(request.url) # Store objects in DB new_track.save() new_track_stats.save() for tag in tags: my_tag = Tag(track=new_track, value=tag) my_tag.save() flash("Track '%s' added sucessfully." % track_name, "info") return redirect(url_for("show")) else: return render_template("add.html", tags=tags)