38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
import time
|
|
from flask import Flask, render_template
|
|
from flask_sqlalchemy import SQLAlchemy
|
|
from sqlalchemy.exc import OperationalError
|
|
|
|
db = SQLAlchemy()
|
|
|
|
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'
|
|
|
|
db.init_app(app)
|
|
|
|
# Tentative de connexion et création des tables au démarrage du conteneur
|
|
with app.app_context():
|
|
max_retries = 15
|
|
delay = 2
|
|
for i in range(max_retries):
|
|
try:
|
|
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...")
|
|
time.sleep(delay)
|
|
else:
|
|
raise Exception("Impossible d'initialiser la base de données après plusieurs tentatives.")
|
|
|
|
# Enregistrement des routes (Blueprint)
|
|
from app.routes import main
|
|
app.register_blueprint(main)
|
|
|
|
return app
|
|
|
|
# Expose 'app' pour que run.py puisse l'importer directement
|
|
app = create_app() |