added 'ensure_index' and 'order_by' methods to queryset.
This commit is contained in:
		| @@ -11,8 +11,22 @@ class QuerySet(object): | |||||||
|     def __init__(self, document, collection): |     def __init__(self, document, collection): | ||||||
|         self._document = document |         self._document = document | ||||||
|         self._collection = collection |         self._collection = collection | ||||||
|         self._query = {'_types': self._document._class_name} |         self._query = {} | ||||||
|         self._cursor_obj = None |         self._cursor_obj = None | ||||||
|  |         self._ordering = [] | ||||||
|  |          | ||||||
|  |     def ensure_index(self, key_or_list, direction=None): | ||||||
|  |         """Ensure that the given indexes are in place. | ||||||
|  |         """ | ||||||
|  |         if isinstance(key_or_list, basestring): | ||||||
|  |             # single-field indexes needn't specify a direction | ||||||
|  |             if key_or_list.startswith("-"): | ||||||
|  |                 key_or_list = key_or_list[1:] | ||||||
|  |             self._collection.ensure_index(key_or_list) | ||||||
|  |         elif isinstance(key_or_list, (list, tuple)): | ||||||
|  |             print key_or_list | ||||||
|  |             self._collection.ensure_index(key_or_list) | ||||||
|  |         return self | ||||||
|  |  | ||||||
|     def __call__(self, **query): |     def __call__(self, **query): | ||||||
|         """Filter the selected documents by calling the queryset with a query. |         """Filter the selected documents by calling the queryset with a query. | ||||||
| @@ -91,7 +105,36 @@ class QuerySet(object): | |||||||
|         """ |         """ | ||||||
|         self._cursor.skip(n) |         self._cursor.skip(n) | ||||||
|         return self |         return self | ||||||
|  |          | ||||||
|  |     def order_by(self, *params): | ||||||
|  |         """Apply ordering conditions, Django-style. | ||||||
|  |          | ||||||
|  |         e.g., ``Model.objects.().order_by("-published_date", "ordering")`` | ||||||
|  |         will order first by ``published_date DESC``, and then ``ordering ASC``. | ||||||
|  |          | ||||||
|  |         """ | ||||||
|  |         if not params: | ||||||
|  |             self._ordering = [] | ||||||
|  |         for param in params: | ||||||
|  |             if param.startswith("-"): | ||||||
|  |                 param = param[1:] | ||||||
|  |                 sort_dir = pymongo.DESCENDING | ||||||
|  |             else: | ||||||
|  |                 sort_dir = pymongo.ASCENDING | ||||||
|  |             sort_rule = (param, sort_dir) | ||||||
|  |  | ||||||
|  |             if not sort_rule in self._ordering: | ||||||
|  |                 self._ordering.append(sort_rule) | ||||||
|  |         self._cursor.sort(self._ordering) | ||||||
|  |         return self | ||||||
|  |          | ||||||
|  |     def explain(self, format=False): | ||||||
|  |         plan = self._cursor.explain() | ||||||
|  |         if format: | ||||||
|  |             import pprint | ||||||
|  |             plan = pprint.pformat(plan) | ||||||
|  |         return plan | ||||||
|  |          | ||||||
|     def delete(self): |     def delete(self): | ||||||
|         """Delete the documents matched by the query. |         """Delete the documents matched by the query. | ||||||
|         """ |         """ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user