annotate sat_pubsub/container.py @ 430:5a0ada3b61ca

Full-Text Search implementation: /!\ pgsql schema needs to be updated /!\ /!\ Minimal PostgreSQL required version is now 12 /!\ A new options is available to specify main language of a node. By default a `generic` language is used (which uses the `simple` configuration in PostgreSQL). When a node owner changes the language, the index is rebuilt accordingly. It is possible to have item specific language for multilingual nodes (but for the moment the search is done with node language, so the results won't be good). If an item language is explicitely set in `item_languages`, the FTS configuration won't be affected by node FTS language setting. Search is parsed with `websearch_to_tsquery` for now, but this parser doesn't handle prefix matching, so it may be replaced in the future. SetConfiguration now only updates the modified values, this avoid triggering the FTS re-indexing on each config change. `_checkNodeExists` is not called anymore as we can check if a row has been modified to see if the node exists, this avoid a useless query. Item storing has been slighly improved with a useless SELECT and condition removed. To avoid 2 schema updates in a row, the `sat_pubsub_update_5_6.sql` file also prepares the implementation of XEP-0346 by updating nodes with a schema and creating the suitable template nodes.
author Goffi <goffi@goffi.org>
date Fri, 11 Dec 2020 17:18:52 +0100
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