summary history files

web/penny/resources/data/tags/controllers.py
from penny import models
from flask import Blueprint, g, jsonify, request
from flask_security.decorators import auth_required
from sqlalchemy.sql import func

data_tags = Blueprint("data_tags", __name__, url_prefix="/data/tags")


@data_tags.route("/")
@auth_required()
def tags():
    """Return data on all tags."""

    data = {"rows": []}

    search = request.args.get("search")
    offset = request.args.get("offset", 1)
    limit = request.args.get("limit", 25)

    total = models.db.session.query(func.count(models.Tag.id)).filter_by(
        user_id=g.user.id
    )

    tags = (
        models.db.session.query(models.Tag)
        .filter(models.Tag.user_id == g.user.id)
        .order_by(models.Tag.name)
    )

    if search:
        total = total.filter(models.Tag.name.like("%{0}%".format(search)))
        tags = tags.filter(models.Tag.name.like("%{0}%".format(search)))

    data["total"] = total.one()[0]

    for tag in tags.offset(offset).limit(limit).all():
        data["rows"].append(tag.dump())

    return jsonify(data)