#! /usr/bin/env python3 from bottle import route, run, template, redirect, request, post from models import Category, Transaction from helper import get_session import click session = None @route("/") def index(): return template("index") @route("/categories") def categories(): categories = session.query(Category).all() categories = [c for c in categories if c.is_child()] return template("categories", categories=categories) @route("/category/") def category(name): c = session.query(Category).filter(Category.name == name).first() if c: transactions = session.query(Transaction).filter(Transaction.category_id == c.id).all() else: transactions = [] return template("category", category=c, transactions=transactions) @route("/category//delete") def delete_category(name): c = session.query(Category).filter(Category.name == name).first() if c: session.delete(c) session.commit() return redirect("/categories") @route("/transactions") def transactions(): if request.GET.get("unsorted", None): print("Unsorted") transactions = session.query(Transaction).filter(Transaction.category_id == None).all() else: print("all") transactions = session.query(Transaction).all() categories = session.query(Category).all() childs = [c for c in categories if c.is_child()] return template("transactions", transactions=transactions, categories=childs) @post("/bulksort") def buksort(): cid = request.forms.get("category") transaction_ids = request.forms.getall("transaction") for id in transaction_ids: t = session.query(Transaction).get(id) t.category__id = cid session.add(t) print(f"Sorted {len(transaction_ids)} transactions into category {cid}") session.commit() return redirect("/transactions") @click.command(name="serve") @click.option("--profile", "-p") def command(profile): global session session = get_session(profile) run(host="0.0.0.0", port=8080, reloader=True)