Fixed #23664 -- Provided a consistent definition for OrderedSet.__bool__

This also defines QuerySet.__bool__ for consistency though this should not have any consequence as bool(qs) used to fallback on QuerySet.__len__ in Py3.
This commit is contained in:
Thomas Chaumeny 2014-10-16 12:43:46 +02:00 committed by Baptiste Mispelon
parent 2e5b2c612e
commit b962653060
3 changed files with 19 additions and 3 deletions

View File

@ -162,10 +162,13 @@ class QuerySet(object):
self._fetch_all() self._fetch_all()
return iter(self._result_cache) return iter(self._result_cache)
def __nonzero__(self): def __bool__(self):
self._fetch_all() self._fetch_all()
return bool(self._result_cache) return bool(self._result_cache)
def __nonzero__(self): # Python 2 compatibility
return type(self).__bool__(self)
def __getitem__(self, k): def __getitem__(self, k):
""" """
Retrieves an item or slice from the set of results. Retrieves an item or slice from the set of results.

View File

@ -271,9 +271,12 @@ class OrderedSet(object):
def __contains__(self, item): def __contains__(self, item):
return item in self.dict return item in self.dict
def __nonzero__(self): def __bool__(self):
return bool(self.dict) return bool(self.dict)
def __nonzero__(self): # Python 2 compatibility
return type(self).__bool__(self)
class MultiValueDictKeyError(KeyError): class MultiValueDictKeyError(KeyError):
pass pass

View File

@ -8,7 +8,7 @@ import pickle
from django.test import SimpleTestCase from django.test import SimpleTestCase
from django.test.utils import IgnoreDeprecationWarningsMixin from django.test.utils import IgnoreDeprecationWarningsMixin
from django.utils.datastructures import (DictWrapper, ImmutableList, from django.utils.datastructures import (DictWrapper, ImmutableList,
MultiValueDict, MultiValueDictKeyError, MergeDict, SortedDict) MultiValueDict, MultiValueDictKeyError, MergeDict, OrderedSet, SortedDict)
from django.utils import six from django.utils import six
@ -206,6 +206,16 @@ class MergeDictTests(IgnoreDeprecationWarningsMixin, SimpleTestCase):
d1['key2'] d1['key2']
class OrderedSetTests(SimpleTestCase):
def test_bool(self):
# Refs #23664
s = OrderedSet()
self.assertFalse(s)
s.add(1)
self.assertTrue(s)
class MultiValueDictTests(SimpleTestCase): class MultiValueDictTests(SimpleTestCase):
def test_multivaluedict(self): def test_multivaluedict(self):