annotate sat_pubsub/container.py @ 451:0e6e176cb572

pgsql: fix items order: Due to a misinterpretation, items where returned in wrong order when RSM was used. Pubsub vanilla `max_items` is reversing the items order to get last items, but when this attribute is not used (RSM being used or not), the items must be in chronological order. This patch fixes it, so RSM returns oldest items by defaut, and empty `<before/>` must be used to get last page (and thus most recent items). Items are always finally ordered chronologically inside the returned page (default by `update` time, but this can be modified when a specific order is requested). Reference field is also fixed to use `updated` instead of `item_id` when item are ordered by `update`.
author Goffi <goffi@goffi.org>
date Sun, 06 Jun 2021 19:42:57 +0200
parents ccb2a22ea0fc
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
414
ccb2a22ea0fc Python 3 port:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
1 #!/usr/bin/env python3
317
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
2 #-*- coding: utf-8 -*-
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
3
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # Copyright (C) 2016 Jérôme Poisson (goffi@goffi.org)
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
5
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
6 # This program is free software: you can redistribute it and/or modify
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # (at your option) any later version.
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
10
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
11 # This program is distributed in the hope that it will be useful,
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # GNU Affero General Public License for more details.
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
15
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
18
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
19
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
20 from collections import namedtuple
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
21
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
22
367
a772f7dac930 backend, storage(pgsql): creation/update date + serial ids:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
23 ItemData = namedtuple('ItemData', ('item', 'access_model', 'config', 'categories', 'created', 'updated', 'new'))
317
34adc4a8aa64 new container module, with an ItemData container:
Goffi <goffi@goffi.org>
parents:
diff changeset
24 ItemData.__new__.__defaults__ = (None,) * (len(ItemData._fields) - 1) # Only item is mandatory