stock/app.py
2025-08-15 12:32:27 +02:00

71 lines
2.0 KiB
Python

from __future__ import annotations
import os, json, threading
from flask import Flask, jsonify, render_template, abort
from trading_bot import main as trading_bot_main # dostosuj jeśli moduł nazywa się inaczej
# Katalog projektu (tam gdzie leży ten plik)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# Domyślnie dane są w głównym katalogu projektu; można nadpisać przez env DATA_DIR
DATA_DIR = os.environ.get("DATA_DIR", BASE_DIR)
def _load_json(name: str):
path = os.path.join(DATA_DIR, name)
if not os.path.isfile(path):
return None
try:
with open(path, "r", encoding="utf-8") as f:
return json.load(f)
except Exception:
return None
app = Flask(
__name__,
static_folder="static",
static_url_path="/static", # <-- ważne: z wiodącym slashem
template_folder="templates",
)
@app.route("/")
def index():
return render_template("index.html")
@app.route("/api/snapshot")
def api_snapshot():
data = _load_json("snapshot.json")
if data is None:
abort(404, description="snapshot.json not found")
return jsonify(data)
@app.route("/api/history")
def api_history():
data = _load_json("portfolio_history.json")
if data is None:
abort(404, description="portfolio_history.json not found")
return jsonify(data)
@app.route("/api/positions")
def api_positions():
data = _load_json("positions.json")
if data is None:
data = []
return jsonify(data)
@app.route("/api/trades")
def api_trades():
data = _load_json("trade_log.json")
if data is None:
data = []
return jsonify(data)
def start_trading_bot():
"""Uruchamia bota w osobnym wątku."""
trading_thread = threading.Thread(target=trading_bot_main, daemon=True)
trading_thread.start()
print("[Flask] Trading bot uruchomiony w wątku.")
if __name__ == "__main__":
print(f"[Flask] DATA_DIR: {DATA_DIR}")
start_trading_bot()
app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)), debug=True)