73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
from flask import Blueprint, jsonify, render_template, request
|
|
|
|
from app.decorators import login_required
|
|
|
|
analyse_bp = Blueprint("analyse", __name__)
|
|
|
|
|
|
@analyse_bp.route("/analyse", methods=["GET"])
|
|
@login_required
|
|
def analyse():
|
|
"""Page d'analyse technique. Si un ISIN est passé en paramètre (?isin=...),
|
|
on l'analyse et on affiche la fiche complète ; sinon on affiche la page
|
|
de recherche."""
|
|
isin = request.args.get("isin", "").strip().upper()
|
|
|
|
if not isin:
|
|
return render_template("analyse.html", resultat=None)
|
|
|
|
from app.services.analysis import analyse_action
|
|
|
|
print(f"[analyse] ISIN demandé : {isin}", flush=True)
|
|
resultat = analyse_action(isin)
|
|
|
|
if resultat is None:
|
|
# ISIN absent du référentiel actions
|
|
return render_template(
|
|
"analyse.html",
|
|
resultat={
|
|
"isin": isin,
|
|
"action": None,
|
|
"erreur": f"Aucune donnée trouvée pour l'ISIN {isin}. "
|
|
f"Vérifiez le code ou importez d'abord l'historique.",
|
|
},
|
|
isin_recherche=isin,
|
|
)
|
|
|
|
if resultat.get("erreur"):
|
|
# ISIN présent mais historique insuffisant
|
|
print(f"[analyse] {isin} : {resultat['erreur']}", flush=True)
|
|
else:
|
|
print(
|
|
f"[analyse] {isin} : cours={resultat.get('cours')} "
|
|
f"score={resultat.get('score')} tendance={resultat.get('tendance')}",
|
|
flush=True,
|
|
)
|
|
|
|
return render_template("analyse.html", resultat=resultat, isin_recherche=isin)
|
|
|
|
|
|
@analyse_bp.route("/analyse/<isin>", methods=["GET"])
|
|
@login_required
|
|
def analyse_isin(isin):
|
|
"""Page d'analyse technique complète pour un ISIN donné."""
|
|
from app.services.analysis import analyse_action
|
|
|
|
isin = isin.strip().upper()
|
|
resultat = analyse_action(isin)
|
|
return render_template("analyse.html", resultat=resultat, isin_recherche=isin)
|
|
|
|
|
|
@analyse_bp.route("/api/analyse/<isin>", methods=["GET"])
|
|
@login_required
|
|
def api_analyse(isin):
|
|
"""API JSON retournant l'analyse technique complète d'un ISIN."""
|
|
from app.services.analysis import analyse_action
|
|
|
|
isin = isin.strip().upper()
|
|
resultat = analyse_action(isin)
|
|
if resultat is None:
|
|
return jsonify({"erreur": f"ISIN {isin} introuvable dans le référentiel actions."}), 404
|
|
if resultat.get("erreur"):
|
|
return jsonify(resultat), 200
|
|
return jsonify(resultat) |