From 0fa7876e7a45a5c4a03c0efae53baa0766677957 Mon Sep 17 00:00:00 2001 From: Sehrope Sarkuni Date: Tue, 4 May 2021 17:39:10 -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 | 19 +++++++++++++++++++ pgweb/core/models.py | 1 + pgweb/urls.py | 6 ++++++ 3 files changed, 26 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..decc1f52 --- /dev/null +++ b/pgweb/core/json.py @@ -0,0 +1,19 @@ +from django.http import JsonResponse + +from .models import Version + +def version_to_json(version): + ret = {} + ret['major'] = str(version.numtree) + ret['latestMinor'] = str(version.latestminor) + ret['reldate'] = version.reldate + ret['eoldate'] = version.eoldate + ret['current'] = version.current + ret['supported'] = version.supported + return ret + +def versions_json(request): + versions = list(map(version_to_json, Version.objects + .filter(tree__gt=0).filter(testing=0) + .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