Compare commits

...

2 Commits

Author SHA1 Message Date
db0 92b9ce3b8b fix: add badge caching using queries 2023-10-16 11:22:05 +02:00
db0 fdd5949a74 feat: endorsement badge icon only 2023-10-16 11:16:04 +02:00
5 changed files with 26 additions and 5 deletions

View File

@ -1,5 +1,9 @@
# Changelog
# 0.21.1
Allow to display endorsement badge without text
# 0.21.0
* Added rebuttals

View File

@ -4,9 +4,11 @@ from sqlalchemy.orm import aliased
from fediseer.classes.instance import Guarantee, Endorsement
from flask import make_response
from sqlalchemy import func
from fediseer import enums
class GuaranteeBadge(Resource):
@cache.cached(timeout=60, query_string=True)
def get(self, domain):
'''Retrieve Guarantee Badge SVG
'''
@ -31,10 +33,17 @@ class GuaranteeBadge(Resource):
return response
class EndorsementBadge(Resource):
get_parser = reqparse.RequestParser()
get_parser.add_argument("Client-Agent", default="unknown:0:unknown", type=str, required=False, help="The client name and version.", location="headers")
get_parser.add_argument("style", required=False, default=enums.BadgeStyle.FULL.name, type=str, help=f"The style the text should take. 'FULL' (default) means icon, text and counter. 'ICON' means just icon and counter.", location="args")
@api.expect(get_parser)
@cache.cached(timeout=60, query_string=True)
def get(self, domain):
'''Retrieve Endorsement Badge SVG
'''
self.args = self.get_parser.parse_args()
style = enums.BadgeStyle[self.args.style]
query = db.session.query(
Instance.domain,
func.count(Endorsement.id) # Count the number of endorsements
@ -47,9 +56,9 @@ class EndorsementBadge(Resource):
)
endorsements = query.first()
if endorsements is None:
svg = generate_endorsements_badge(domain, 0)
svg = generate_endorsements_badge(domain, 0, style)
else:
svg = generate_endorsements_badge(domain, endorsements[1])
svg = generate_endorsements_badge(domain, endorsements[1], style)
response = make_response(svg)
response.headers['Content-Type'] = 'image/svg+xml'
return response

View File

@ -1,5 +1,6 @@
from pybadges import badge
from loguru import logger
from fediseer import enums
import base64
with open('fediseer/assets/crossed-chains.svg', 'rb') as file:
@ -32,14 +33,17 @@ def generate_guarantee_badge(domain: str, guarantor: str):
)
return guarantee_badge
def generate_endorsements_badge(domain: str, count: int):
def generate_endorsements_badge(domain: str, count: int, style: enums.BadgeStyle = enums.BadgeStyle.FULL):
left_color = "DarkSlateGray "
right_color = "DarkOliveGreen"
right_text=str(count)
left_text = "Endorsements"
if style == enums.BadgeStyle.ICON:
left_text = ''
if count == 0:
right_color = "DarkRed"
endorsements_badge = badge(
left_text="Endorsements",
left_text=left_text,
right_text=right_text,
left_color=left_color,
right_color=right_color,

View File

@ -1,4 +1,4 @@
FEDISEER_VERSION = "0.22.0"
FEDISEER_VERSION = "0.22.1"
SUPPORTED_SOFTWARE = {
"lemmy",
"mastodon",

View File

@ -33,3 +33,7 @@ class InstanceState(enum.Enum):
class InstanceFlags(enum.Enum):
RESTRICTED = 0
MUTED = 1
class BadgeStyle(enum.Enum):
FULL = 0
ICON = 1