From 1495078ade30a8a4fc141c863f353e284aec7163 Mon Sep 17 00:00:00 2001 From: Diederik van der Boor Date: Mon, 23 May 2011 22:32:44 +0200 Subject: [PATCH] Added inline APIDOX --- queryset_decorator/__init__.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/queryset_decorator/__init__.py b/queryset_decorator/__init__.py index f0bdac1..99e9c84 100644 --- a/queryset_decorator/__init__.py +++ b/queryset_decorator/__init__.py @@ -2,7 +2,17 @@ from django.db.models.query import QuerySet +# Based on django-queryset-transform. +# This object however, operates on a per-object instance, +# so it doesn't break the result generators + + class DecoratingQuerySet(QuerySet): + """ + An enhancement of the QuerySet which allows objects to be decorated + with extra properties before they are returned. + """ + def __init__(self, *args, **kwargs): super(DecoratingQuerySet, self).__init__(*args, **kwargs) self._decorate_funcs = [] @@ -12,12 +22,20 @@ def _clone(self, klass=None, setup=False, **kw): c._decorate_funcs = self._decorate_funcs[:] return c + def decorate(self, fn): + """ + Register a function which will decorate a retrieved object before it's returned. + """ if fn not in self._decorate_funcs: self._decorate_funcs.append(fn) return self + def iterator(self): + """ + Overwritten iterator which will apply the decorate functions before returning it. + """ base_iterator = super(DecoratingQuerySet, self).iterator() for obj in base_iterator: # Apply the decorators @@ -28,5 +46,8 @@ def iterator(self): class DecoratorManager(models.Manager): + """ + The manager class which ensures the enhanced DecoratorQuerySet object is used. + """ def get_query_set(self): return DecoratingQuerySet(self.model)