Add a /versions.json feed with information about all PostgreSQL versions
authorSehrope Sarkuni <sehrope@jackdb.com>
Mon, 17 May 2021 20:30:31 +0000 (22:30 +0200)
committerMagnus Hagander <magnus@hagander.net>
Mon, 17 May 2021 20:30:31 +0000 (22:30 +0200)
This includes the same information as the /versions.rss feed, but with
more detail including release and eol dates. It also includes all
versions, not just the supported ones.

pgweb/core/json.py [new file with mode: 0644]
pgweb/core/models.py
pgweb/urls.py

diff --git a/pgweb/core/json.py b/pgweb/core/json.py
new file mode 100644 (file)
index 0000000..842dc52
--- /dev/null
@@ -0,0 +1,21 @@
+from django.http import JsonResponse
+
+from .models import Version
+
+
+def version_to_json(version):
+    return {
+        'major': str(version.numtree),
+        'latestMinor': str(version.latestminor),
+        'relDate': version.reldate,
+        'eolDate': version.eoldate,
+        'current': version.current,
+        'supported': version.supported,
+    }
+
+
+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})
index 71886837a02839451071d651a4fbe389fd20fb49..ec52ab59515bd1df48559f14327b361ce997d494 100644 (file)
@@ -83,6 +83,7 @@ class Version(models.Model):
         yield '/docs/manuals'
         yield '/about/featurematrix/$'
         yield '/versions.rss'
+        yield '/versions.json'
 
 
 class Country(models.Model):
index cc29aaba5b2d1bc872a364671d731382e52ad444..78b61cee98c588307ff4a3d24f2441b3770dd34e 100644 (file)
@@ -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<tagurl>[^/]+))?.rss$', NewsFeed()),
     url(r'^events.rss$', EventFeed()),
 
+    ###
+    # JSON feeds
+    ###
+    url(r'^versions.json$', versions_json),
+
     ###
     # Special sections
     ###