[PATCH] Allow ordering events by date

Jeremy Cline jcline at redhat.com
Wed Oct 16 08:30:11 AEDT 2019


By default, the events API orders events by date in descending order
(newest first). However, it's useful to be able to order the events by
oldest events first. For example, when a client is polling the events
API for new events since a given date and wishes to process them in
chronological order.

Signed-off-by: Jeremy Cline <jcline at redhat.com>
---
 patchwork/api/event.py                         |  2 +-
 patchwork/tests/api/test_event.py              | 18 ++++++++++++++++++
 ...-order-events-by-date-7484164761c5231b.yaml |  5 +++++
 3 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100644 releasenotes/notes/api-order-events-by-date-7484164761c5231b.yaml

diff --git a/patchwork/api/event.py b/patchwork/api/event.py
index c0d973d..e6d467d 100644
--- a/patchwork/api/event.py
+++ b/patchwork/api/event.py
@@ -77,7 +77,7 @@ class EventList(ListAPIView):
     serializer_class = EventSerializer
     filter_class = filterset_class = EventFilterSet
     page_size_query_param = None  # fixed page size
-    ordering_fields = ()
+    ordering_fields = ('date',)
     ordering = '-date'
 
     def get_queryset(self):
diff --git a/patchwork/tests/api/test_event.py b/patchwork/tests/api/test_event.py
index 8816538..bff8f40 100644
--- a/patchwork/tests/api/test_event.py
+++ b/patchwork/tests/api/test_event.py
@@ -149,6 +149,24 @@ class TestEventAPI(utils.APITestCase):
         resp = self.client.get(self.api_url(), {'series': 999999})
         self.assertEqual(0, len(resp.data))
 
+    def test_order_by_date_default(self):
+        """Assert the default ordering is by date descending."""
+        self._create_events()
+
+        resp = self.client.get(self.api_url())
+        events = Event.objects.order_by("-date").all()
+        for api_event, event in zip(resp.data, events):
+            self.assertEqual(api_event["id"], event.id)
+
+    def test_order_by_date_ascending(self):
+        """Assert the default ordering is by date descending."""
+        self._create_events()
+
+        resp = self.client.get(self.api_url(), {'order': 'date'})
+        events = Event.objects.order_by("date").all()
+        for api_event, event in zip(resp.data, events):
+            self.assertEqual(api_event["id"], event.id)
+
     def test_create(self):
         """Ensure creates aren't allowed"""
         user = create_maintainer()
diff --git a/releasenotes/notes/api-order-events-by-date-7484164761c5231b.yaml b/releasenotes/notes/api-order-events-by-date-7484164761c5231b.yaml
new file mode 100644
index 0000000..5d5328d
--- /dev/null
+++ b/releasenotes/notes/api-order-events-by-date-7484164761c5231b.yaml
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Allow ordering events from the events API by date. This can be done by
+    adding ``order=date`` or ``order=-date`` (the default) parameters.
-- 
2.21.0



More information about the Patchwork mailing list