models: augment NotificationManager.notify() to also notify delegates recursively, fixes #3635

This commit is contained in:
Benjamin Dauvergne 2013-09-17 21:07:36 +02:00
parent c37a4e933a
commit a208f055ed
2 changed files with 12 additions and 1 deletions

View File

@ -23,6 +23,7 @@ import timestamp
from .validators import validate_phone
from .utils import file_match_mime_types
from . import app_settings
from . import utils
DOCBOW_APP = _('docbow')
DOCBOW_APP = _('Docbow_App')
@ -729,6 +730,8 @@ class DocbowProfile(Model):
class NotificationManager(Manager):
def notify(self, document=None, users=None, kind='new-document', ctx=None):
'''Build notifications in bulk'''
users = utils.queryset_fixpoint(users,
lambda s: User.objects.filter(delegations_by__by__in=s))
notifications = [Notification(user=user, document=document, kind=kind, ctx=ctx)
for user in users]
self.bulk_create(notifications)

View File

@ -73,4 +73,12 @@ def date_to_aware_datetime(date):
datetime.datetime(date.year, date.month, date.day),
timezone.get_current_timezone())
def queryset_fixpoint(initial, qs_function):
initial = set(initial)
count = len(initial)
while True:
initial |= set(qs_function(initial))
if len(initial) == count:
break
count = len(initial)
return initial