#! /usr/bin/env python3 from bottle import route, run, template, redirect, request, post from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base from models import Category, Transaction import click from pprint import pprint engine = create_engine("sqlite:///app.db") Base = declarative_base() Session = sessionmaker(bind=engine) session = Session() @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 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(): 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") def command(): run(host="localhost", port=8080, reloader=True, debug=True)