Added Reverse option to SortedLists
Thanks Stephen Young for the patch closes #364
This commit is contained in:
parent
fbe8b28b2e
commit
6cef571bfb
1
AUTHORS
1
AUTHORS
@ -77,3 +77,4 @@ that much better:
|
|||||||
* jpfarias
|
* jpfarias
|
||||||
* jonrscott
|
* jonrscott
|
||||||
* Alice Zoë Bevan-McGregor
|
* Alice Zoë Bevan-McGregor
|
||||||
|
* Stephen Young
|
||||||
|
@ -5,6 +5,7 @@ Changelog
|
|||||||
Changes in dev
|
Changes in dev
|
||||||
==============
|
==============
|
||||||
|
|
||||||
|
- Added reverse option to SortedListFields
|
||||||
- Fixed dereferencing - multi directional list dereferencing
|
- Fixed dereferencing - multi directional list dereferencing
|
||||||
- Fixed issue creating indexes with recursive embedded documents
|
- Fixed issue creating indexes with recursive embedded documents
|
||||||
- Fixed recursive lookup in _unique_with_indexes
|
- Fixed recursive lookup in _unique_with_indexes
|
||||||
|
@ -511,20 +511,24 @@ class SortedListField(ListField):
|
|||||||
retrieved.
|
retrieved.
|
||||||
|
|
||||||
.. versionadded:: 0.4
|
.. versionadded:: 0.4
|
||||||
|
.. versionchanged:: 0.6 - added reverse keyword
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_ordering = None
|
_ordering = None
|
||||||
|
_order_reverse = False
|
||||||
|
|
||||||
def __init__(self, field, **kwargs):
|
def __init__(self, field, **kwargs):
|
||||||
if 'ordering' in kwargs.keys():
|
if 'ordering' in kwargs.keys():
|
||||||
self._ordering = kwargs.pop('ordering')
|
self._ordering = kwargs.pop('ordering')
|
||||||
|
if 'reverse' in kwargs.keys():
|
||||||
|
self._order_reverse = kwargs.pop('reverse')
|
||||||
super(SortedListField, self).__init__(field, **kwargs)
|
super(SortedListField, self).__init__(field, **kwargs)
|
||||||
|
|
||||||
def to_mongo(self, value):
|
def to_mongo(self, value):
|
||||||
value = super(SortedListField, self).to_mongo(value)
|
value = super(SortedListField, self).to_mongo(value)
|
||||||
if self._ordering is not None:
|
if self._ordering is not None:
|
||||||
return sorted(value, key=itemgetter(self._ordering))
|
return sorted(value, key=itemgetter(self._ordering), reverse=self._order_reverse)
|
||||||
return sorted(value)
|
return sorted(value, reverse=self._order_reverse)
|
||||||
|
|
||||||
|
|
||||||
class DictField(ComplexBaseField):
|
class DictField(ComplexBaseField):
|
||||||
|
@ -481,6 +481,31 @@ class FieldTest(unittest.TestCase):
|
|||||||
|
|
||||||
BlogPost.drop_collection()
|
BlogPost.drop_collection()
|
||||||
|
|
||||||
|
def test_reverse_list_sorting(self):
|
||||||
|
'''Ensure that a reverse sorted list field properly sorts values'''
|
||||||
|
|
||||||
|
class Category(EmbeddedDocument):
|
||||||
|
count = IntField()
|
||||||
|
name = StringField()
|
||||||
|
|
||||||
|
class CategoryList(Document):
|
||||||
|
categories = SortedListField(EmbeddedDocumentField(Category), ordering='count', reverse=True)
|
||||||
|
name = StringField()
|
||||||
|
|
||||||
|
catlist = CategoryList(name="Top categories")
|
||||||
|
cat1 = Category(name='posts', count=10)
|
||||||
|
cat2 = Category(name='food', count=100)
|
||||||
|
cat3 = Category(name='drink', count=40)
|
||||||
|
catlist.categories = [cat1, cat2, cat3]
|
||||||
|
catlist.save()
|
||||||
|
catlist.reload()
|
||||||
|
|
||||||
|
self.assertEqual(catlist.categories[0].name, cat2.name)
|
||||||
|
self.assertEqual(catlist.categories[1].name, cat3.name)
|
||||||
|
self.assertEqual(catlist.categories[2].name, cat1.name)
|
||||||
|
|
||||||
|
CategoryList.drop_collection()
|
||||||
|
|
||||||
def test_list_field(self):
|
def test_list_field(self):
|
||||||
"""Ensure that list types work as expected.
|
"""Ensure that list types work as expected.
|
||||||
"""
|
"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user