fediseer/fediseer/apis/v1/badges.py

56 lines
1.9 KiB
Python

from fediseer.apis.v1.base import *
from fediseer.badges import generate_endorsements_badge, generate_guarantee_badge
from sqlalchemy.orm import aliased
from fediseer.classes.instance import Guarantee, Endorsement
from flask import make_response
from sqlalchemy import func
class GuaranteeBadge(Resource):
def get(self, domain):
'''Retrieve Guarantee Badge SVG
'''
guaranteed_instance_alias = aliased(Instance)
query = db.session.query(
Instance.domain,
guaranteed_instance_alias.domain,
).join(
Guarantee, Instance.id == Guarantee.guaranteed_id
).join(
guaranteed_instance_alias, guaranteed_instance_alias.id == Guarantee.guarantor_id
).filter(
Instance.domain == domain
)
guarantor = query.first()
if guarantor is None:
svg = generate_guarantee_badge(domain, None)
else:
svg = generate_guarantee_badge(domain, guarantor[1])
response = make_response(svg)
response.headers['Content-Type'] = 'image/svg+xml'
return response
class EndorsementBadge(Resource):
def get(self, domain):
'''Retrieve Endorsement Badge SVG
'''
query = db.session.query(
Instance.domain,
func.count(Endorsement.id) # Count the number of endorsements
).join(
Endorsement, Instance.id == Endorsement.endorsed_id
).filter(
Instance.domain == domain
).group_by(
Instance.domain
)
endorsements = query.first()
if endorsements is None:
svg = generate_endorsements_badge(domain, 0)
else:
svg = generate_endorsements_badge(domain, endorsements[1])
response = make_response(svg)
response.headers['Content-Type'] = 'image/svg+xml'
return response