Message ID | 20190430060308.10432-4-dja@axtens.net |
---|---|
State | Accepted |
Headers | show |
Series | Patchwork 2.1.2 review series | expand |
On Tue, 2019-04-30 at 16:03 +1000, Daniel Axtens wrote: > From: Jeremy Kerr <jk@ozlabs.org> > > It's possible that an EmailConfirmation object will have no associated > user (eg, for email opt-out, which does not require a user object). In > this case, we will see a NULL value for EmailConfirmation.user_id. > > However, having a NULL value appear in a SQL 'IN' clause will match > every value. This means that once one of these null-user > EmailConfirmations is present, we will never expire any non-active user > accounts. > > This change adds a filter for a valid user_id when we query for active > EmailConfirmation objects. This means we'll have a valid values set to > use in the pending_confs set. > > Signed-off-by: Jeremy Kerr <jk@ozlabs.org> > [dja: fix pep8 issue] > Signed-off-by: Daniel Axtens <dja@axtens.net> > (cherry picked from commit d0b79d9dee04aee13c8d64a193a7818f72eeca3b) > Signed-off-by: Daniel Axtens <dja@axtens.net> Applied.
diff --git a/patchwork/notifications.py b/patchwork/notifications.py index a5f642352c1d..dce525aba57e 100644 --- a/patchwork/notifications.py +++ b/patchwork/notifications.py @@ -109,7 +109,8 @@ def expire_notifications(): EmailConfirmation.objects.filter(q).delete() # remove inactive users with no pending confirmation - pending_confs = EmailConfirmation.objects.values('user') + pending_confs = (EmailConfirmation.objects + .filter(user__isnull=False).values('user')) users = User.objects.filter(is_active=False).exclude(id__in=pending_confs) # delete users