change & deprecate .aggregate api to mimic pymongo's interface + separate the aggregation tests from the large test_queryset.py file
This commit is contained in:
		| @@ -1255,16 +1255,25 @@ class BaseQuerySet(object): | ||||
|             for data in son_data | ||||
|         ] | ||||
|  | ||||
|     def aggregate(self, *pipeline, **kwargs): | ||||
|         """ | ||||
|         Perform a aggregate function based in your queryset params | ||||
|     def aggregate(self, pipeline, *suppl_pipeline, **kwargs): | ||||
|         """Perform a aggregate function based in your queryset params | ||||
|  | ||||
|         :param pipeline: list of aggregation commands,\ | ||||
|             see: http://docs.mongodb.org/manual/core/aggregation-pipeline/ | ||||
|  | ||||
|         :param suppl_pipeline: unpacked list of pipeline (added to support deprecation of the old interface) | ||||
|             parameter will be removed shortly | ||||
|         .. versionadded:: 0.9 | ||||
|         """ | ||||
|         initial_pipeline = [] | ||||
|         using_deprecated_interface = isinstance(pipeline, dict) or bool(suppl_pipeline) | ||||
|         user_pipeline = [pipeline] if isinstance(pipeline, dict) else list(pipeline) | ||||
|  | ||||
|         if using_deprecated_interface: | ||||
|             msg = "Calling .aggregate() with un unpacked list (*pipeline) is deprecated, it will soon change and will expect a list (similar to pymongo.Collection.aggregate interface), see documentation" | ||||
|             warnings.warn(msg, DeprecationWarning) | ||||
|  | ||||
|         user_pipeline += suppl_pipeline | ||||
|  | ||||
|         initial_pipeline = [] | ||||
|         if self._query: | ||||
|             initial_pipeline.append({"$match": self._query}) | ||||
|  | ||||
| @@ -1281,14 +1290,14 @@ class BaseQuerySet(object): | ||||
|         if self._skip is not None: | ||||
|             initial_pipeline.append({"$skip": self._skip}) | ||||
|  | ||||
|         pipeline = initial_pipeline + list(pipeline) | ||||
|         final_pipeline = initial_pipeline + user_pipeline | ||||
|  | ||||
|         collection = self._collection | ||||
|         if self._read_preference is not None: | ||||
|             return self._collection.with_options( | ||||
|             collection = self._collection.with_options( | ||||
|                 read_preference=self._read_preference | ||||
|             ).aggregate(pipeline, cursor={}, **kwargs) | ||||
|  | ||||
|         return self._collection.aggregate(pipeline, cursor={}, **kwargs) | ||||
|             ) | ||||
|         return collection.aggregate(final_pipeline, cursor={}, **kwargs) | ||||
|  | ||||
|     # JS functionality | ||||
|     def map_reduce( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user