From 2db0897da1c36742003750aa6679765b60ebee39 Mon Sep 17 00:00:00 2001 From: Sehrope Sarkuni Date: Wed, 28 Apr 2021 09:24:29 -0400 Subject: [PATCH] Add versions.json endpoint Add a /version.json endpoint with machine parseable version data. The JSON response is an array with one entry per release sorted by the major version. --- pgweb/core/json.py | 13 +++++++++++++ pgweb/core/models.py | 1 + pgweb/urls.py | 6 ++++++ 3 files changed, 20 insertions(+) create mode 100644 pgweb/core/json.py diff --git a/pgweb/core/json.py b/pgweb/core/json.py new file mode 100644 index 00000000..970da123 --- /dev/null +++ b/pgweb/core/json.py @@ -0,0 +1,13 @@ +from django.db.models import F +from django.http import JsonResponse +from django.core import serializers + +from .models import Version + +def versions_json(request): + versions = list(Version.objects + .filter(tree__gt=0).filter(testing=0) + .annotate(major=F('tree'), minor=F('latestminor')) + .values('major', 'minor', 'reldate', 'current', 'supported', 'eoldate') + .order_by('tree')) + return JsonResponse(versions, safe=False, json_dumps_params={'sort_keys': True}) diff --git a/pgweb/core/models.py b/pgweb/core/models.py index 71886837..ec52ab59 100644 --- a/pgweb/core/models.py +++ b/pgweb/core/models.py @@ -83,6 +83,7 @@ class Version(models.Model): yield '/docs/manuals' yield '/about/featurematrix/$' yield '/versions.rss' + yield '/versions.json' class Country(models.Model): diff --git a/pgweb/urls.py b/pgweb/urls.py index cc29aaba..78b61cee 100644 --- a/pgweb/urls.py +++ b/pgweb/urls.py @@ -23,6 +23,7 @@ import pgweb.survey.views from pgweb.core.feeds import VersionFeed from pgweb.news.feeds import NewsFeed from pgweb.events.feeds import EventFeed +from pgweb.core.json import versions_json # Uncomment the next two lines to enable the admin: from django.contrib import admin @@ -104,6 +105,11 @@ urlpatterns = [ url(r'^news(/(?P[^/]+))?.rss$', NewsFeed()), url(r'^events.rss$', EventFeed()), + ### + # JSON feeds + ### + url(r'^versions.json$', versions_json), + ### # Special sections ### -- 2.17.1