menu 1 2 3 4 5 7 operationnels
This commit is contained in:
+35
-8
@@ -1,19 +1,44 @@
|
||||
import os
|
||||
import time
|
||||
from flask import Flask, render_template
|
||||
from flask import Flask
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from flask_wtf import CSRFProtect
|
||||
from sqlalchemy.exc import OperationalError
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
db = SQLAlchemy()
|
||||
csrf = CSRFProtect()
|
||||
|
||||
|
||||
def create_app():
|
||||
app = Flask(__name__)
|
||||
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://jfgiraud:lyon4@db/bolsa'
|
||||
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
||||
app.config['SECRET_KEY'] = 'votre_cle_secrete_tres_securisee_jfgiraud04051963++fin'
|
||||
|
||||
# --- Configuration depuis l'environnement ---
|
||||
app.config["SECRET_KEY"] = os.environ.get(
|
||||
"SECRET_KEY", "change-me-in-production"
|
||||
)
|
||||
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
|
||||
|
||||
db_user = os.environ.get("MYSQL_USER", "jfgiraud")
|
||||
db_pass = os.environ.get("MYSQL_PASSWORD", "")
|
||||
db_host = os.environ.get("MYSQL_HOST", "db")
|
||||
db_port = os.environ.get("MYSQL_PORT", "3306")
|
||||
db_name = os.environ.get("MYSQL_DATABASE", "bolsa")
|
||||
# DATABASE_URL prend la priorité si défini
|
||||
app.config["SQLALCHEMY_DATABASE_URI"] = os.environ.get(
|
||||
"DATABASE_URL",
|
||||
f"mysql+pymysql://{db_user}:{db_pass}@{db_host}:{db_port}/{db_name}",
|
||||
)
|
||||
|
||||
db.init_app(app)
|
||||
csrf.init_app(app)
|
||||
|
||||
# Tentative de connexion et création des tables au démarrage du conteneur
|
||||
# Enregistrement des modèles ORM (nécessaire avant db.create_all)
|
||||
from app import models # noqa: F401
|
||||
|
||||
# Tentative de connexion au démarrage du conteneur (MySQL peut mettre du temps à être prêt)
|
||||
with app.app_context():
|
||||
max_retries = 15
|
||||
delay = 2
|
||||
@@ -22,8 +47,9 @@ def create_app():
|
||||
db.create_all()
|
||||
print("Base de données connectée et tables initialisées avec succès.")
|
||||
break
|
||||
except OperationalError as e:
|
||||
print(f"Tentative {i+1}/{max_retries} : MySQL n'est pas encore prêt. Nouvelle tentative dans {delay}s...")
|
||||
except OperationalError:
|
||||
print(f"Tentative {i+1}/{max_retries} : MySQL n'est pas encore prêt. "
|
||||
f"Nouvelle tentative dans {delay}s...")
|
||||
time.sleep(delay)
|
||||
else:
|
||||
raise Exception("Impossible d'initialiser la base de données après plusieurs tentatives.")
|
||||
@@ -34,5 +60,6 @@ def create_app():
|
||||
|
||||
return app
|
||||
|
||||
|
||||
# Expose 'app' pour que run.py puisse l'importer directement
|
||||
app = create_app()
|
||||
app = create_app()
|
||||
|
||||
Reference in New Issue
Block a user