endorsement/api.py

37 lines
1.0 KiB
Python

from app import app, db
from models import User, Achievement
import json
from graphviz import Digraph
from flask import escape
@app.route("/api")
@app.route("/api/all")
def api_all():
return json.dumps([user.to_obj() for user in User.query.all()])
@app.route("/api/users")
def api_all_users():
return json.dumps([user.id for user in User.query.all()])
@app.route("/api/achievements")
def api_all_achievements():
return json.dumps([achievement.to_obj() for achievement in Achievement.query.all()])
@app.route("/api/svg")
def api_svg():
return dot_graph("svg")
@app.route("/api/dot")
def api_dot():
return dot_graph("dot")
def dot_graph(format):
dot = Digraph(format=format)
for user in User.query.all():
dot.node(escape(user.id), escape(user.id))
for achievement in Achievement.query.all():
for endorser in achievement.endorsed_by:
dot.edge(escape(endorser.id), escape(achievement.achieved_by), label=escape(achievement.name))
return dot.pipe().decode("utf-8")