Working calculator

This commit is contained in:
Emmy D'Anello 2023-02-12 23:30:10 +01:00
parent b170557b24
commit bad5852033
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
2 changed files with 51 additions and 10 deletions

29
app.py
View File

@ -156,14 +156,13 @@ def parse_trains(flush: bool = False):
db.session.commit()
def find_routes(day, orig, dest):
trains = parse_trains(filter_day=date(2023, 2, 17),
filter_tgvmax=True)
def find_routes(day, origin, destination):
trains = db.session.query(Train).filter_by(day=day, tgvmax=True).all()
trains.sort(key=lambda train: train.dep)
origin = "STRASBOURG"
dest = "LYON (intramuros)"
destination = "LYON (intramuros)"
explore = []
per_arr_explore = {}
@ -172,7 +171,7 @@ def find_routes(day, orig, dest):
for train in tqdm(trains):
if train.orig == origin:
it = [train]
if train.dest == dest:
if train.dest == destination:
# We hope that we have a direct train
valid_routes.append(it)
else:
@ -190,7 +189,7 @@ def find_routes(day, orig, dest):
if last_train.arr <= train.dep:
new_it = it + [train]
if train.dest == dest:
if train.dest == destination:
# Goal is achieved
valid_routes.append(new_it)
else:
@ -293,7 +292,6 @@ def index():
return render_template('index.html', today=date.today(), max_day=date.today() + timedelta(days=30))
@cli.command('test')
@app.get('/api/iata-codes/')
def iata_codes():
query = db.session.query(Train).with_entities(Train.orig_iata, Train.orig).distinct()
@ -307,5 +305,22 @@ def iata_codes():
}
@app.get('/api/routes/<day>/<origin>/<destination>/')
def get_routes(day: date, origin: str, destination: str):
routes = find_routes(day, origin, destination)
return [
[{
'origin': tr.orig,
'origin_iata': tr.orig_iata,
'destination': tr.dest,
'destination_iata': tr.dest_iata,
'departure': tr.dep.isoformat(),
'arrival': tr.arr.isoformat(),
'number': tr.number,
'free_seats': tr.remaining_seats,
} for tr in route] for route in routes
]
if __name__ == '__main__':
app.run(debug=True)

View File

@ -28,15 +28,17 @@
</div>
<div class="mb-3">
<label for="day" class="form-label">Jour de départ :</label>
<input type="date" class="form-control" id="origin" aria-describedby="dayHelp"
min="{{ today }}" max="{{ today }}" value="{{ today }}">
<input type="date" class="form-control" id="day" aria-describedby="dayHelp"
min="{{ today }}" max="{{ max_day }}" value="{{ today }}">
<div id="dayHelp" class="form-text">Le jour de votre départ.</div>
</div>
<div class="mb-3">
<input type="submit" class="form-control btn btn-primary" value="Rechercher…">
</div>
</form>
<div id="result"></div>
</body>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN"
crossorigin="anonymous"></script>
@ -72,8 +74,32 @@
}
})
let day_elem = document.getElementById('day')
let result_elem = document.getElementById('result')
document.getElementById('form').addEventListener('submit', () => {
console.log("Hello world!")
result_elem.innerHTML = 'Chargement…'
fetch('/api/routes/' + day_elem.value + '/' + origin_iata_elem.value + '/' + destination_iata_elem.value + '/')
.then(resp => resp.json())
.then(routes => {
console.log(routes)
result_elem.innerHTML = ''
let routes_elem = document.createElement('ul')
result_elem.appendChild(routes_elem)
for (let route in routes) {
route = routes[route]
console.log(route)
let route_elem = document.createElement('li')
routes_elem.appendChild(route_elem)
let text = route[0].origin
for (let train in route) {
train = route[train]
console.log(train)
text += " (" + train.departure + ") --> (" + train.arrival + ") " + train.destination + ", "
}
route_elem.textContent = text
}
})
})
</script>
</html>