grainParisArt/app.py

145 lines
3.9 KiB
Python
Raw Normal View History

2025-01-26 15:25:01 +01:00
import dotenv
2025-01-26 15:20:39 +01:00
import json
import os
2024-09-16 13:29:02 +02:00
from flask import Flask, render_template, request
2024-09-18 18:41:31 +02:00
from datetime import datetime, timedelta
2024-09-16 13:29:02 +02:00
# IMPORT DES MODULES
2024-09-18 18:41:31 +02:00
from modules.Classes import *
# On charge les variables d'environnement...
dotenv.load_dotenv(".env")
# et celles par défaut pour avoir la liste des cinémas
2025-01-26 15:25:01 +01:00
dotenv.load_dotenv(".env.sample")
2025-01-26 15:20:39 +01:00
WEBSITE_TITLE = os.environ.get("WEBSITE_TITLE", "GrainParisArt")
MAPBOX_TOKEN = os.environ.get("MAPBOX_TOKEN", "")
theaters_json = json.loads(os.environ.get("THEATERS", "[]"))
2024-09-18 18:41:31 +02:00
theaters: list[Theater] = []
2025-01-26 15:20:39 +01:00
for theater in theaters_json:
2024-09-18 18:41:31 +02:00
theaters.append(Theater({
2025-01-26 15:20:39 +01:00
"name": theater["name"],
"internalId": theater["id"],
"latitude": theater["latitude"],
"longitude": theater["longitude"],
2024-09-18 18:41:31 +02:00
"location": None
}))
2025-01-26 15:20:39 +01:00
theater_locations = []
for theater in theaters:
theater_locations.append({
"coordinates": [theater.longitude, theater.latitude],
"description": theater.name,
})
2024-09-18 18:41:31 +02:00
def getShowtimes(date):
showtimes:list[Showtime] = []
for theater in theaters:
showtimes.extend(theater.getShowtimes(date))
data = {}
for showtime in showtimes:
movie = showtime.movie
theater = showtime.theater
if showtime.movie.title not in data.keys():
data[movie.title] = {
"title": movie.title,
"duree": movie.runtime,
"genres": ", ".join(movie.genres),
"casting": ", ".join(movie.cast),
"realisateur": movie.director,
"synopsis": movie.synopsis,
"affiche": movie.affiche,
"director": movie.director,
2024-09-18 20:32:49 +02:00
"wantToSee": movie.wantToSee,
"url": f"https://www.allocine.fr/film/fichefilm_gen_cfilm={movie.id}.html",
2024-09-18 18:41:31 +02:00
"seances": {}
}
2024-09-18 18:41:31 +02:00
if theater.name not in data[movie.title]["seances"].keys():
data[movie.title]["seances"][theater.name] = []
data[movie.title]["seances"][theater.name].append(showtime.startsAt.strftime("%H:%M"))
2024-09-18 20:32:49 +02:00
data = data.values()
data = sorted(data, key=lambda x: x["wantToSee"], reverse=True)
2024-09-18 18:41:31 +02:00
return data
2024-09-18 18:55:11 +02:00
showtimes = []
for i in range(0, 7):
2024-09-19 20:22:41 +02:00
day_showtimes = getShowtimes(datetime.today()+timedelta(days=i))
showtimes.append(day_showtimes)
print(f"{len(day_showtimes)} séances récupéré {i+1}/7!")
2024-09-18 18:41:31 +02:00
2024-09-16 13:29:02 +02:00
app = Flask(__name__)
2024-09-18 18:41:31 +02:00
def translateMonth(num: int):
match num:
case 1: return "janv"
case 2: return "févr"
case 3: return "mars"
case 4: return "avr"
case 5: return "mai"
case 6: return "juin"
case 7: return "juil"
case 8: return "août"
case 9: return "sept"
case 10: return "oct"
case 11: return "nov"
case 12: return "déc"
case _: return "???"
def translateDay(weekday: int):
match weekday:
case 0: return "lun"
case 1: return "mar"
case 2: return "mer"
case 3: return "jeu"
case 4: return "ven"
case 5: return "sam"
case 6: return "dim"
case _: return "???"
2024-09-16 13:29:02 +02:00
2024-10-24 11:57:36 +02:00
@app.route('/health')
def health():
return "OK"
2024-09-16 13:29:02 +02:00
@app.route('/')
def home():
2024-09-18 18:41:31 +02:00
delta = request.args.get("delta", default=0, type=int)
2024-09-16 13:29:02 +02:00
2024-09-18 18:41:31 +02:00
if delta > 6: delta = 6
if delta < 0: delta = 0
2024-09-16 13:29:02 +02:00
2024-09-18 18:41:31 +02:00
dates = []
2024-09-16 13:29:02 +02:00
2024-09-18 18:41:31 +02:00
for i in range(0,7):
day = datetime.today()+timedelta(i)
2024-09-18 18:41:31 +02:00
dates.append({
"jour": translateDay(day.weekday()),
"chiffre": day.day,
"mois": translateMonth(day.month),
"choisi": i==delta,
"index": i
})
2024-09-16 13:29:02 +02:00
2025-01-26 15:20:39 +01:00
return render_template(
'index.html',
page_actuelle='home',
films=showtimes[delta],
dates=dates,
theater_locations=theater_locations,
website_title=WEBSITE_TITLE,
mapbox_token=MAPBOX_TOKEN,
)
2024-09-16 13:29:02 +02:00
if __name__ == '__main__':
app.run()