ING/app.py

171 lines
No EOL
3.2 KiB
Python

from pathlib import Path
from flask import Flask, render_template, request
import subprocess
import sys
import json
from pathlib import Path
from flask import redirect
app = Flask(__name__)
BASE_DIR = Path(__file__).parent
CATEGORIES_FILE = BASE_DIR / "Kategorien.json"
@app.route("/")
def index():
return render_template("index.html")
@app.route("/run/balance", methods=["POST"])
def run_balance():
result = subprocess.run(
[sys.executable, str(BASE_DIR / "balance.py")],
capture_output=True,
text=True
)
return render_template(
"result.html",
title="balance.py",
output=result.stdout + result.stderr
)
@app.route("/run/transactions", methods=["POST"])
def run_transactions():
year = request.form.get("year", "").strip()
week = request.form.get("week", "").strip()
command = [
sys.executable,
str(BASE_DIR / "transactions.py")
]
if year and week:
command.extend([year, week])
result = subprocess.run(
command,
capture_output=True,
text=True
)
return render_template(
"result.html",
title="transactions.py",
output=result.stdout + result.stderr
)
@app.route("/run/categorize", methods=["POST"])
def run_categorize():
year = request.form.get("year", "").strip()
week = request.form.get("week", "").strip()
command = [
sys.executable,
str(BASE_DIR / "categorize_transactions.py")
]
if year and week:
command.extend([year, week])
result = subprocess.run(
command,
capture_output=True,
text=True
)
return render_template(
"result.html",
title="categorize_transactions.py",
output=result.stdout + result.stderr
)
@app.route("/categories")
def categories():
with open(
CATEGORIES_FILE,
encoding="utf-8"
) as f:
categories = json.load(f)
print(categories)
return render_template(
"categories.html",
categories=categories
)
@app.route("/categories/delete/<category>")
def delete_category(category):
with open(
CATEGORIES_FILE,
encoding="utf-8"
) as f:
categories = json.load(f)
if category in categories:
del categories[category]
with open(
CATEGORIES_FILE,
"w",
encoding="utf-8"
) as f:
json.dump(
categories,
f,
ensure_ascii=False,
indent=2
)
return redirect("/categories")
@app.route(
"/categories/add",
methods=["POST"]
)
def add_category():
category = request.form["category"].strip()
with open(
CATEGORIES_FILE,
encoding="utf-8"
) as f:
categories = json.load(f)
if category not in categories:
categories[category] = []
with open(
CATEGORIES_FILE,
"w",
encoding="utf-8"
) as f:
json.dump(
categories,
f,
ensure_ascii=False,
indent=2
)
return redirect("/categories")
if __name__ == "__main__":
app.run(
host="0.0.0.0",
port=5000,
debug=True
)