diff --git a/store/app.py b/store/app.py index ba787bc1..eedfe126 100644 --- a/store/app.py +++ b/store/app.py @@ -11,6 +11,7 @@ import hmac import string import random import urllib +from datetime import datetime from slugify import slugify from flask import ( Flask, @@ -19,6 +20,7 @@ from flask import ( session, redirect, request, + make_response, ) from flask_babel import Babel from flask_babel import gettext as _ @@ -89,6 +91,13 @@ def days_ago(timestamp): return int((time.time() - timestamp) / (60 * 60 * 24)) +@app.template_filter("format_datetime") +def format_datetime(value, format="%d %b %Y %I:%M %p"): + if value is None: + return "" + return datetime.strptime(value, "%b %d %Y").strftime(format) + + @app.context_processor def utils(): d = { @@ -487,6 +496,66 @@ def charts(): ) +@app.route("/news.rss") +def news_rss(): + + news_per_date = json.loads(open(".cache/news.json").read()) + + # Keepy only the last N entries + news_per_date = {d: infos for d, infos in reversed(list(news_per_date.items())[-2:])} + + rss_xml = render_template('news_rss.xml', news_per_date=news_per_date, catalog=get_catalog()) + response = make_response(rss_xml) + response.headers['Content-Type'] = 'application/rss+xml' + response.headers['Content-Disposition'] = "inline; filename=news_rss.xml" + return response + + +# Badges +@app.route('/integration/') +@app.route('/integration/.svg') +@app.route('/badge//') +@app.route('/badge//.svg') +def badge(app, type="integration"): + + data = get_dashboard_data() + catalog = get_catalog()["apps"] + + catalog_level = catalog.get(app, {}).get("level") + main_ci_level = data.get(app, {}).get("ci_results", {}).get("main", {}).get("level", '?') + + if type == "integration": + if app in catalog and main_ci_level: + badge = f"level{main_ci_level}" + else: + badge = "unknown" + elif type == "state": + if app not in catalog: + badge = "state-unknown" + else: + if catalog_level in [None, '?']: + badge = "state-just-got-added-to-catalog" + elif catalog_level in [0, -1]: + badge = "state-broken" + else: + badge = "state-working" + elif type == "maintained": + if app in catalog and catalog.get(app, {}).get("maintained") is False: + badge = "unmaintained" + else: + badge = "empty" + else: + badge = "empty" + + svg = open(f"assets/badges/{badge}.svg").read() + response = make_response(svg) + response.content_type = 'image/svg+xml' + response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' + response.headers['Pragma'] = 'no-cache' + + return response + + ############################################################################### # Session / SSO using Discourse # ############################################################################### diff --git a/store/assets/badges/fetch_badges b/store/assets/badges/fetch_badges new file mode 100644 index 00000000..5f1c94da --- /dev/null +++ b/store/assets/badges/fetch_badges @@ -0,0 +1,20 @@ +wget -O - https://img.shields.io/badge/Integration-Level_9-blue.svg > level9.svg +wget -O - https://img.shields.io/badge/Integration-Level_8-brightgreen.svg > level8.svg +wget -O - https://img.shields.io/badge/Integration-Level_7-green.svg > level7.svg +wget -O - https://img.shields.io/badge/Integration-Level_6-yellowgreen.svg > level6.svg +wget -O - https://img.shields.io/badge/Integration-Level_5-yellowgreen.svg > level5.svg +wget -O - https://img.shields.io/badge/Integration-Level_4-yellow.svg > level4.svg +wget -O - https://img.shields.io/badge/Integration-Level_3-yellow.svg > level3.svg +wget -O - https://img.shields.io/badge/Integration-Level_2-orange.svg > level2.svg +wget -O - https://img.shields.io/badge/Integration-Level_1-orange.svg > level1.svg +wget -O - https://img.shields.io/badge/Integration-Level_0-red.svg > level0.svg +wget -O - https://img.shields.io/badge/Integration-Unknown-lightgrey.svg > unknown.svg + +wget -O - https://upload.wikimedia.org/wikipedia/commons/1/1d/No_image.svg > empty.svg +wget -O - https://img.shields.io/badge/Status-Package%20not%20maintained-red.svg > unmaintained.svg + +wget -O - https://img.shields.io/badge/Status-working-brightgreen.svg > state-working.svg +wget -O - https://img.shields.io/badge/Status-Just%20got%20added%20to%20catalog-yellowgreen.svg > state-just-got-added-to-catalog.svg +wget -O - https://img.shields.io/badge/Status-In%20progress-orange.svg > state-inprogress.svg +wget -O - https://img.shields.io/badge/Status-Not%20working-red.svg > state-notworking.svg +wget -O - https://img.shields.io/badge/Status-Broken-red.svg > state-broken.svg diff --git a/store/templates/charts.html b/store/templates/charts.html index 0eccab3d..4fc086d7 100644 --- a/store/templates/charts.html +++ b/store/templates/charts.html @@ -10,8 +10,13 @@
-