details: https://code.tryton.org/tryton/commit/bca2b503c6e3
branch: default
user: Cédric Krier <[email protected]>
date: Tue Sep 23 16:04:29 2025 +0200
description:
Add sequence_reorder to model order
Closes #14251
diffstat:
trytond/CHANGELOG | 1 +
trytond/doc/ref/models.rst | 10 +++++++++
trytond/trytond/model/__init__.py | 38 ++++++++++++++++++++++++++++++------
trytond/trytond/model/order.py | 8 +++++++
trytond/trytond/tests/test_order.py | 12 ++++++++++-
5 files changed, 61 insertions(+), 8 deletions(-)
diffs (119 lines):
diff -r c9d4cbb242a7 -r bca2b503c6e3 trytond/CHANGELOG
--- a/trytond/CHANGELOG Tue Oct 07 15:21:08 2025 +0200
+++ b/trytond/CHANGELOG Tue Sep 23 16:04:29 2025 +0200
@@ -1,3 +1,4 @@
+* Add sequence_reorder to model order
* Remove has_window_functions from Database
* Set minimal supported version of SQLite to 3.30.1
* Refactor of trytond.config to add cache
diff -r c9d4cbb242a7 -r bca2b503c6e3 trytond/doc/ref/models.rst
--- a/trytond/doc/ref/models.rst Tue Oct 07 15:21:08 2025 +0200
+++ b/trytond/doc/ref/models.rst Tue Sep 23 16:04:29 2025 +0200
@@ -1125,6 +1125,16 @@
Return a new list of records ordered by the ``order`` list defined like in
:meth:`~ModelStorage.search`.
+
+sequence_reorder
+================
+
+.. function:: sequence_reorder(records[, field_name])
+
+ Updates the sequence ``field_name`` to follow the current order of the
+ records.
+ Returns the list of records.
+
MultiValueMixin
===============
diff -r c9d4cbb242a7 -r bca2b503c6e3 trytond/trytond/model/__init__.py
--- a/trytond/trytond/model/__init__.py Tue Oct 07 15:21:08 2025 +0200
+++ b/trytond/trytond/model/__init__.py Tue Sep 23 16:04:29 2025 +0200
@@ -13,15 +13,39 @@
from .modelstorage import EvalEnvironment, ModelStorage
from .modelview import ModelView
from .multivalue import MultiValueMixin, ValueMixin
-from .order import sequence_ordered, sort
+from .order import sequence_ordered, sequence_reorder, sort
from .symbol import SymbolMixin
from .tree import sum_tree, tree
from .union import UnionMixin
from .workflow import Workflow
-__all__ = ['Model', 'ModelView', 'ModelStorage', 'ModelSingleton', 'ModelSQL',
- 'Check', 'Unique', 'Exclude', 'Index', 'convert_from',
- 'Workflow', 'DictSchemaMixin', 'MatchMixin', 'UnionMixin', 'dualmethod',
- 'MultiValueMixin', 'ValueMixin', 'SymbolMixin', 'DigitsMixin',
- 'EvalEnvironment', 'sequence_ordered', 'sort', 'DeactivableMixin', 'tree',
- 'sum_tree', 'avatar_mixin', 'ChatMixin']
+__all__ = [
+ ChatMixin,
+ Check,
+ DeactivableMixin,
+ DictSchemaMixin,
+ DigitsMixin,
+ EvalEnvironment,
+ Exclude,
+ Index,
+ MatchMixin,
+ Model,
+ ModelSQL,
+ ModelSingleton,
+ ModelStorage,
+ ModelView,
+ MultiValueMixin,
+ SymbolMixin,
+ UnionMixin,
+ Unique,
+ ValueMixin,
+ Workflow,
+ avatar_mixin,
+ convert_from,
+ dualmethod,
+ sequence_ordered,
+ sequence_reorder,
+ sort,
+ sum_tree,
+ tree,
+ ]
diff -r c9d4cbb242a7 -r bca2b503c6e3 trytond/trytond/model/order.py
--- a/trytond/trytond/model/order.py Tue Oct 07 15:21:08 2025 +0200
+++ b/trytond/trytond/model/order.py Tue Sep 23 16:04:29 2025 +0200
@@ -109,3 +109,11 @@
def func(obj):
return tuple(getter(obj) for getter in getters)
return sorted(records, key=func)
+
+
+def sequence_reorder(records, field_name='sequence'):
+ "Updates sequence to follow records order"
+ for i, record in enumerate(records):
+ if getattr(record, field_name, None) != i:
+ setattr(record, field_name, i)
+ return records
diff -r c9d4cbb242a7 -r bca2b503c6e3 trytond/trytond/tests/test_order.py
--- a/trytond/trytond/tests/test_order.py Tue Oct 07 15:21:08 2025 +0200
+++ b/trytond/trytond/tests/test_order.py Tue Sep 23 16:04:29 2025 +0200
@@ -2,7 +2,7 @@
# this repository contains the full copyright notices and license terms.
from unittest.mock import Mock
-from trytond.model import sort
+from trytond.model import sequence_reorder, sort
from trytond.pool import Pool
from trytond.tests.test_tryton import (
TestCase, activate_module, with_transaction)
@@ -101,3 +101,13 @@
self.assertListEqual(
sort([record1, record2], [('name', 'DESC NULLS LAST')]),
[record1, record2])
+
+ def test_sequence_reorder(self):
+ "Test sequence_reorder"
+ record1 = Mock()
+ record2 = Mock()
+
+ records = sequence_reorder([record1, record2])
+
+ self.assertEqual(records, [record1, record2])
+ self.assertLess(record1.sequence, record2.sequence)