summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/build/changelog/unreleased_13/5114.rst7
-rw-r--r--lib/sqlalchemy/ext/mutable.py4
-rw-r--r--test/ext/test_mutable.py24
3 files changed, 33 insertions, 2 deletions
diff --git a/doc/build/changelog/unreleased_13/5114.rst b/doc/build/changelog/unreleased_13/5114.rst
new file mode 100644
index 000000000..9dab64642
--- /dev/null
+++ b/doc/build/changelog/unreleased_13/5114.rst
@@ -0,0 +1,7 @@
+.. change::
+ :tags: usecase, ext
+ :tickets: 5114
+
+ Added keyword arguments to the :meth:`.MutableList.sort` function so that a
+ key function as well as the "reverse" keyword argument can be provided.
+
diff --git a/lib/sqlalchemy/ext/mutable.py b/lib/sqlalchemy/ext/mutable.py
index 866220860..5523fe75d 100644
--- a/lib/sqlalchemy/ext/mutable.py
+++ b/lib/sqlalchemy/ext/mutable.py
@@ -828,8 +828,8 @@ class MutableList(Mutable, list):
list.clear(self)
self.changed()
- def sort(self):
- list.sort(self)
+ def sort(self, **kw):
+ list.sort(self, **kw)
self.changed()
def reverse(self):
diff --git a/test/ext/test_mutable.py b/test/ext/test_mutable.py
index 84b922be7..acb0ad490 100644
--- a/test/ext/test_mutable.py
+++ b/test/ext/test_mutable.py
@@ -480,6 +480,30 @@ class _MutableListTestBase(_MutableListTestFixture):
eq_(f1.data, [1, 2, 3])
+ def test_sort_w_key(self):
+ sess = Session()
+
+ f1 = Foo(data=[1, 3, 2])
+ sess.add(f1)
+ sess.commit()
+
+ f1.data.sort(key=lambda elem: -1 * elem)
+ sess.commit()
+
+ eq_(f1.data, [3, 2, 1])
+
+ def test_sort_w_reverse_kwarg(self):
+ sess = Session()
+
+ f1 = Foo(data=[1, 3, 2])
+ sess.add(f1)
+ sess.commit()
+
+ f1.data.sort(reverse=True)
+ sess.commit()
+
+ eq_(f1.data, [3, 2, 1])
+
def test_reverse(self):
sess = Session()