Merge remote branch 'origin/dev' into dev

This commit is contained in:
Ross Lawley 2011-06-08 13:06:47 +01:00
commit 28b7ef2304
3 changed files with 26 additions and 3 deletions

View File

@ -53,6 +53,11 @@ class Document(BaseDocument):
dictionary. The value should be a list of field names or tuples of field
names. Index direction may be specified by prefixing the field names with
a **+** or **-** sign.
By default, _types will be added to the start of every index (that
doesn't contain a list) if allow_inheritence is True. This can be
disabled by either setting types to False on the specific index or
by setting index_types to False on the meta dictionary for the document.
"""
__metaclass__ = TopLevelDocumentMetaclass

View File

@ -418,8 +418,9 @@ class QuerySet(object):
use_types = False
# If _types is being used, prepend it to every specified index
if (spec.get('types', True) and doc_cls._meta.get('allow_inheritance')
and use_types):
index_types = doc_cls._meta.get('index_types', True)
allow_inheritance = doc_cls._meta.get('allow_inheritance')
if spec.get('types', index_types) and allow_inheritance and use_types:
index_list.insert(0, ('_types', 1))
spec['fields'] = index_list
@ -474,6 +475,7 @@ class QuerySet(object):
background = self._document._meta.get('index_background', False)
drop_dups = self._document._meta.get('index_drop_dups', False)
index_opts = self._document._meta.get('index_options', {})
index_types = self._document._meta.get('index_types', True)
# Ensure indexes created by uniqueness constraints
for index in self._document._meta['unique_indexes']:
@ -490,7 +492,7 @@ class QuerySet(object):
background=background, **opts)
# If _types is being used (for polymorphism), it needs an index
if '_types' in self._query:
if index_types and '_types' in self._query:
self._collection.ensure_index('_types',
background=background, **index_opts)

View File

@ -1830,6 +1830,22 @@ class QuerySetTest(unittest.TestCase):
self.assertTrue([('_types', 1)] in info)
self.assertTrue([('_types', 1), ('date', -1)] in info)
def test_dont_index_types(self):
"""Ensure that index_types will, when disabled, prevent _types
being added to all indices.
"""
class BlogPost(Document):
date = DateTimeField()
meta = {'index_types': False,
'indexes': ['-date']}
# Indexes are lazy so use list() to perform query
list(BlogPost.objects)
info = BlogPost.objects._collection.index_information()
info = [value['key'] for key, value in info.iteritems()]
self.assertTrue([('_types', 1)] not in info)
self.assertTrue([('date', -1)] in info)
BlogPost.drop_collection()
class BlogPost(Document):