added meta support for indexes ensured at call-time
This commit is contained in:
parent
bb4444f54d
commit
ccb4827ec9
@ -147,8 +147,12 @@ class TopLevelDocumentMetaclass(DocumentMetaclass):
|
|||||||
'allow_inheritance': True,
|
'allow_inheritance': True,
|
||||||
'max_documents': None,
|
'max_documents': None,
|
||||||
'max_size': None,
|
'max_size': None,
|
||||||
|
'indexes': [] # indexes to be ensured at runtime
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Apply document-defined meta options
|
||||||
meta.update(attrs.get('meta', {}))
|
meta.update(attrs.get('meta', {}))
|
||||||
|
|
||||||
# Only simple classes - direct subclasses of Document - may set
|
# Only simple classes - direct subclasses of Document - may set
|
||||||
# allow_inheritance to False
|
# allow_inheritance to False
|
||||||
if not simple_class and not meta['allow_inheritance']:
|
if not simple_class and not meta['allow_inheritance']:
|
||||||
|
@ -31,18 +31,32 @@ class QuerySet(object):
|
|||||||
"""
|
"""
|
||||||
if isinstance(key_or_list, basestring):
|
if isinstance(key_or_list, basestring):
|
||||||
# single-field indexes needn't specify a direction
|
# single-field indexes needn't specify a direction
|
||||||
if key_or_list.startswith("-"):
|
if key_or_list.startswith("-") or key_or_list.startswith("+"):
|
||||||
key_or_list = key_or_list[1:]
|
key_or_list = key_or_list[1:]
|
||||||
self._collection.ensure_index(key_or_list)
|
self._collection.ensure_index(key_or_list)
|
||||||
elif isinstance(key_or_list, (list, tuple)):
|
elif isinstance(key_or_list, (list, tuple)):
|
||||||
print key_or_list
|
index_list = []
|
||||||
self._collection.ensure_index(key_or_list)
|
for key in key_or_list:
|
||||||
|
if key.startswith("-"):
|
||||||
|
index_list.append((key[1:], pymongo.DESCENDING))
|
||||||
|
else:
|
||||||
|
if key.startswith("+"):
|
||||||
|
key = key[1:]
|
||||||
|
index_list.append((key, pymongo.ASCENDING))
|
||||||
|
self._collection.ensure_index(index_list)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def __call__(self, **query):
|
def __call__(self, **query):
|
||||||
"""Filter the selected documents by calling the
|
"""Filter the selected documents by calling the
|
||||||
:class:`~mongoengine.QuerySet` with a query.
|
:class:`~mongoengine.QuerySet` with a query.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# ensure document-defined indexes are created
|
||||||
|
if self._document._meta['indexes']:
|
||||||
|
for key_or_list in self._document._meta['indexes']:
|
||||||
|
# print "key", key_or_list
|
||||||
|
self.ensure_index(key_or_list)
|
||||||
|
|
||||||
query = QuerySet._transform_query(_doc_cls=self._document, **query)
|
query = QuerySet._transform_query(_doc_cls=self._document, **query)
|
||||||
self._query.update(query)
|
self._query.update(query)
|
||||||
return self
|
return self
|
||||||
|
Loading…
x
Reference in New Issue
Block a user