-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstrava_app.py
More file actions
81 lines (70 loc) · 3.79 KB
/
strava_app.py
File metadata and controls
81 lines (70 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from __future__ import annotations
from flask import Flask, render_template, request
from extensions import db, migrate
import secrets
from itsdangerous import URLSafeSerializer
from logging import basicConfig, DEBUG
import locale
import os
import geocoding_functions as gps_api
import gpx_strava_check as gpx
from werkzeug.utils import secure_filename
app = Flask(__name__, static_folder='static', static_url_path='/static', template_folder='templates')
# Set the secret key
app.secret_key = secrets.token_bytes(32).hex()
# Create serializer
app.serializer = URLSafeSerializer(app.secret_key)
# Config
app.config.from_object('config.Config')
# Initialize extensions
db.init_app(app)
migrate.init_app(app, db)
# Locale settings
locale.setlocale(locale.LC_TIME, 'fr_FR')
basicConfig(level=DEBUG)
@app.route('/')
def welcome():
return render_template('index.html')
@app.route('/about/')
def about():
return render_template('about.html')
@app.route('/resultat', methods=['POST'])
def resultat():
try:
result = request.form
nom = result['nom']
prenom = result['prenom']
adresse = result['adresse']
ville = result['ville']
fw_geocoding_result = gps_api.get_GPS_Coordinates_Mapbox(adresse, ville, app.config['MAPBOX_API_KEY'])
if len(result) == 1:
raise Exception("Erreur de géolocalisation! Service Mapbox (code erreur HTTP {})".format(result))
else:
longitude = fw_geocoding_result[0]
latitude = fw_geocoding_result[1]
rev_geocoding_result = gps_api.get_Postal_Address_Mapbox(longitude, latitude, app.config['MAPBOX_API_KEY'])
domicile = gpx.PositionGPS(latitude, longitude, "domicile")
gpx_file = request.files["gpx_file"]
uploads_dir = os.path.join(app.instance_path, 'uploads')
os.makedirs(uploads_dir, exist_ok=True)
if gpx_file.filename.endswith('.gpx'):
new_filename = gpx_file.filename.split(".gpx")[0] + "_" + nom.upper() + "_" + prenom[0].upper() + prenom[1:] + "_long" + str(longitude) + "_lat" + str(latitude) + ".gpx"
securedFilename = secure_filename(new_filename)
securedFilename = os.path.join(uploads_dir, securedFilename)
gpx_file.save(securedFilename)
elif gpx_file.filename == '':
raise Exception("Fichier GPX manquant!")
else:
raise Exception("Extension du fichier {} invalide, doit être un fichier GPX!".format(gpx_file.filename))
gpx_file = open(securedFilename, 'r')
jour, heure, amende, distance, elapsed_time, exceeded_distance, exceeded_time, max_speed_kmh = gpx.gpx_covid_regulations_check_compliance(gpx_file, domicile)
gpx_file.close()
total_duration_hours = int(elapsed_time // 3600)
total_duration_minutes = int((elapsed_time % 3600) // 60)
exceeded_hours = int(exceeded_time // 3600)
exceeded_minutes = int(exceeded_time // 60)
exceeded_seconds = int(exceeded_time % 60)
return render_template("resultat.html", found_postal_address=rev_geocoding_result, nom=nom, prenom=prenom, jour=jour, heure=heure, amende=amende, distance=round(distance, 1), elapsed_time=round(elapsed_time), total_duration_hours=int(total_duration_hours), total_duration_minutes=round(total_duration_minutes), exceeded_hours=int(exceeded_hours), exceeded_minutes=int(exceeded_minutes), exceeded_seconds=round(exceeded_seconds), exceeded_distance=round(exceeded_distance, 3), max_speed_kmh=round(max_speed_kmh, 1))
except Exception as e:
filename = gpx_file.filename if 'gpx_file' in locals() and hasattr(gpx_file, 'filename') else "fichier inconnu"
return render_template("errors/error_fileupload.html", error_message=e, filename=filename)