aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps
diff options
context:
space:
mode:
authorGravatar jchristgit <[email protected]>2025-03-02 14:51:10 +0100
committerGravatar GitHub <[email protected]>2025-03-02 14:51:10 +0100
commit72e8f43fa30253589197813e477e67d28549a8bb (patch)
treed828c8b7f572b60dcd48bc688957e3ba3a615d5e /pydis_site/apps
parentMerge pull request #1444 from kkrypt0nn/patch-heroku-vps-guide (diff)
parentAdd endpoint to fetch filters in JSON format (diff)
Merge pull request #1166 from python-discord/resource-filter-fetch
Add endpoint to fetch filters in JSON format
Diffstat (limited to 'pydis_site/apps')
-rw-r--r--pydis_site/apps/resources/tests/test_views.py11
-rw-r--r--pydis_site/apps/resources/urls.py3
-rw-r--r--pydis_site/apps/resources/views.py11
3 files changed, 23 insertions, 2 deletions
diff --git a/pydis_site/apps/resources/tests/test_views.py b/pydis_site/apps/resources/tests/test_views.py
index a2a203ce..72c9ed95 100644
--- a/pydis_site/apps/resources/tests/test_views.py
+++ b/pydis_site/apps/resources/tests/test_views.py
@@ -27,3 +27,14 @@ class TestResourcesView(TestCase):
url = reverse("resources:index", kwargs={"resource_type": "urinal-cake"})
response = self.client.get(url)
self.assertEqual(response.status_code, 404)
+
+
+class TestResourceFilterView(TestCase):
+ def test_resource_filter_response(self):
+ """Check that the filter endpoint returns JSON-formatted filters."""
+ url = reverse('resources:filters')
+ response = self.client.get(url)
+ self.assertEqual(response.status_code, 200)
+ content = response.json()
+ self.assertIn('difficulty', content)
+ self.assertIsInstance(content['difficulty'], list)
diff --git a/pydis_site/apps/resources/urls.py b/pydis_site/apps/resources/urls.py
index cb33a9d7..3a10d108 100644
--- a/pydis_site/apps/resources/urls.py
+++ b/pydis_site/apps/resources/urls.py
@@ -1,11 +1,12 @@
from django_distill import distill_path
-from pydis_site.apps.resources.views import ResourceView
+from pydis_site.apps.resources.views import ResourceView, ResourceFilterView
app_name = "resources"
urlpatterns = [
# Using `distill_path` instead of `path` allows this to be available
# in static preview builds.
distill_path("", ResourceView.as_view(), name="index"),
+ distill_path("filters", ResourceFilterView.as_view(), name="filters"),
distill_path("<resource_type>/", ResourceView.as_view(), name="index"),
]
diff --git a/pydis_site/apps/resources/views.py b/pydis_site/apps/resources/views.py
index 3632b2e2..6683299f 100644
--- a/pydis_site/apps/resources/views.py
+++ b/pydis_site/apps/resources/views.py
@@ -2,7 +2,7 @@ import json
from django.apps import apps
from django.core.handlers.wsgi import WSGIRequest
-from django.http import HttpResponse, HttpResponseNotFound
+from django.http import HttpResponse, HttpResponseNotFound, JsonResponse
from django.shortcuts import render
from django.views import View
@@ -38,3 +38,12 @@ class ResourceView(View):
"resource_type": resource_type,
}
)
+
+
+class ResourceFilterView(View):
+ """Exposes resource filters for the bot."""
+
+ def get(self, request: WSGIRequest) -> HttpResponse:
+ """Return resource filters as JSON."""
+ app = apps.get_app_config(APP_NAME)
+ return JsonResponse(app.valid_filters)