Support for background and drop_dups indexing options.
This commit is contained in:
		| @@ -172,7 +172,8 @@ class QuerySet(object): | |||||||
|         self._limit = None |         self._limit = None | ||||||
|         self._skip = None |         self._skip = None | ||||||
|  |  | ||||||
|     def ensure_index(self, key_or_list): |     def ensure_index(self, key_or_list, drop_dups=False, background=False, | ||||||
|  |         **kwargs): | ||||||
|         """Ensure that the given indexes are in place. |         """Ensure that the given indexes are in place. | ||||||
|  |  | ||||||
|         :param key_or_list: a single index key or a list of index keys (to |         :param key_or_list: a single index key or a list of index keys (to | ||||||
| @@ -180,7 +181,8 @@ class QuerySet(object): | |||||||
|             or a **-** to determine the index ordering |             or a **-** to determine the index ordering | ||||||
|         """ |         """ | ||||||
|         index_list = QuerySet._build_index_spec(self._document, key_or_list) |         index_list = QuerySet._build_index_spec(self._document, key_or_list) | ||||||
|         self._collection.ensure_index(index_list) |         self._collection.ensure_index(index_list, drop_dups=drop_dups, | ||||||
|  |             background=background) | ||||||
|         return self |         return self | ||||||
|  |  | ||||||
|     @classmethod |     @classmethod | ||||||
| @@ -250,25 +252,33 @@ class QuerySet(object): | |||||||
|         """ |         """ | ||||||
|         if not self._accessed_collection: |         if not self._accessed_collection: | ||||||
|             self._accessed_collection = True |             self._accessed_collection = True | ||||||
|  |  | ||||||
|  |             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', {}) | ||||||
|              |              | ||||||
|             # Ensure document-defined indexes are created |             # Ensure document-defined indexes are created | ||||||
|             if self._document._meta['indexes']: |             if self._document._meta['indexes']: | ||||||
|                 for key_or_list in self._document._meta['indexes']: |                 for key_or_list in self._document._meta['indexes']: | ||||||
|                     self._collection.ensure_index(key_or_list) |                     self._collection.ensure_index(key_or_list, | ||||||
|  |                         background=background, **index_opts) | ||||||
|  |  | ||||||
|             # Ensure indexes created by uniqueness constraints |             # Ensure indexes created by uniqueness constraints | ||||||
|             for index in self._document._meta['unique_indexes']: |             for index in self._document._meta['unique_indexes']: | ||||||
|                 self._collection.ensure_index(index, unique=True) |                 self._collection.ensure_index(index, unique=True, | ||||||
|  |                     background=background, drop_dups=drop_dups, **index_opts) | ||||||
|                  |                  | ||||||
|             # If _types is being used (for polymorphism), it needs an index |             # If _types is being used (for polymorphism), it needs an index | ||||||
|             if '_types' in self._query: |             if '_types' in self._query: | ||||||
|                 self._collection.ensure_index('_types') |                 self._collection.ensure_index('_types', | ||||||
|  |                     background=background, **index_opts) | ||||||
|              |              | ||||||
|             # Ensure all needed field indexes are created |             # Ensure all needed field indexes are created | ||||||
|             for field in self._document._fields.values(): |             for field in self._document._fields.values(): | ||||||
|                 if field.__class__._geo_index: |                 if field.__class__._geo_index: | ||||||
|                     index_spec = [(field.db_field, pymongo.GEO2D)] |                     index_spec = [(field.db_field, pymongo.GEO2D)] | ||||||
|                     self._collection.ensure_index(index_spec) |                     self._collection.ensure_index(index_spec, | ||||||
|  |                         background=background, **index_opts) | ||||||
|  |  | ||||||
|         return self._collection_obj |         return self._collection_obj | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user