Example #1
0
    def prune(self):
        """
        Do an exclude for all Users who have a SentDrip already.
        """
        target_user_ids = self.get_queryset().values_list('id', flat=True)
        frequency = self.drip_model.frequency
        sent_drips = SentDrip.objects.filter(drip=self.drip_model,
                                             user__id__in=target_user_ids)
        if frequency > 0:
            sent_drips = sent_drips.filter(date__gt=conditional_now() - timedelta(days=frequency))
        else:
            sent_drips = sent_drips.filter(date__lt=conditional_now())

        exclude_user_ids = sent_drips.values_list('user_id', flat=True)

        self._queryset = self.get_queryset().exclude(id__in=exclude_user_ids)
Example #2
0
 def prune(self):
     """
     Do an exclude for all Users who have a SentDrip already.
     """
     target_user_ids = self.get_queryset().values_list("id", flat=True)
     exclude_user_ids = SentDrip.objects.filter(
         date__lt=conditional_now(), drip=self.drip_model, user__id__in=target_user_ids
     ).values_list("user_id", flat=True)
     self._queryset = self.get_queryset().exclude(id__in=exclude_user_ids)
Example #3
0
 def prune(self):
     """Do an exclude for all Users who have a SentDrip already.
     """
     target_user_ids = self.get_queryset().values_list('id', flat=True)
     exclude_user_ids = SentDrip.objects.filter(
         date__lt=conditional_now(),
         drip=self.drip_model,
         user__id__in=target_user_ids).values_list('user_id', flat=True)
     self._queryset = self.get_queryset().exclude(id__in=exclude_user_ids)
Example #4
0
 def prune(self):
     """
     Do an exclude for all Users who have a SentDrip already.
     """
     target_user_ids = self.get_queryset().values_list('id', flat=True)
     exclude_user_ids = SentDrip.objects.filter(
         date__lt=conditional_now(),
         drip_content_type=ContentType.objects.get_for_model(self.drip_model),
         drip_object_id=self.drip_model.pk,
         user__id__in=target_user_ids
     ).values_list('user_id', flat=True)
     self._queryset = self.get_queryset().exclude(id__in=exclude_user_ids)
Example #5
0
    def prune(self, count='all'):

        """
        Do an exclude for all Users who have a SentDrip already.
        """
        from espresso.models import SentDrip

        item_ids = self.get_queryset().values_list('pk', flat=True)
        exclude_ids = SentDrip.objects.filter(created__lt=conditional_now(),
                                                   drip=self.drip_model,
                                                   item_id__in=item_ids)\
                                           .values_list('item_id', flat=True)
        self._queryset = self.get_queryset().exclude(pk__in=exclude_ids)

        if count != 'all':
            self._queryset = self._queryset[0]
Example #6
0
    def prune(self):
        """
        Do an exclude for all Users who have a SentDrip already or who
        have unsubscribed (if this is a marketing drip).
        """
        target_user_ids = self.get_queryset().values_list('id', flat=True)
        exclude_user_ids = SentDrip.objects.filter(date__lt=conditional_now(),
                                                   drip=self.drip_model,
                                                   user__id__in=target_user_ids)\
                                           .values_list('user_id', flat=True)

        # If this is a marketing drip, exclude users who have
        # already unsubscribed from these emails.
        if self.drip_model.marketing:
            qs = Subscription.objects.filter(user__id__in=target_user_ids,
                unsubscribed=True)
            unsub_ids = qs.values_list('user_id', flat=True)
            exclude_user_ids = list(set(exclude_user_ids).union(unsub_ids))

        self._queryset = self.get_queryset().exclude(id__in=exclude_user_ids)
Example #7
0
    def prune(self):
        """
        Do an exclude for all Users who have a SentDrip already or who
        have unsubscribed (if this is a marketing drip).
        """
        target_user_ids = self.get_queryset().values_list('id', flat=True)
        exclude_user_ids = SentDrip.objects.filter(date__lt=conditional_now(),
                                                   drip=self.drip_model,
                                                   user__id__in=target_user_ids)\
                                           .values_list('user_id', flat=True)

        # If this is a marketing drip, exclude users who have
        # already unsubscribed from these emails.
        if self.drip_model.marketing:
            qs = Subscription.objects.filter(user__id__in=target_user_ids,
                                             unsubscribed=True)
            unsub_ids = qs.values_list('user_id', flat=True)
            exclude_user_ids = list(set(exclude_user_ids).union(unsub_ids))

        self._queryset = self.get_queryset().exclude(id__in=exclude_user_ids)
Example #8
0
    def prune(self):
        """
        Do an exclude for all Users who have a SentDrip already.
        """

        if self.drip_model.user_field:
            target_user_ids = self.get_queryset().values_list('%s__id' % self.drip_model.user_field, flat=True)
        else:
            target_user_ids = self.get_queryset().values_list('id', flat=True)

        exclude_user_ids = SentDrip.objects.filter(date__lt=conditional_now(),
                                                   drip=self.drip_model,
                                                   user__id__in=target_user_ids)\
                                           .values_list('user_id', flat=True)
        self._queryset = self.get_queryset().exclude(id__in=exclude_user_ids)


        # convert linked field back to user model
        if self.drip_model.user_field:
            self._queryset = get_user_model().objects.filter(id__in=self.get_queryset().values_list(self.drip_model.user_field, flat=True))
Example #9
0
 def now(self):
     """
     This allows us to override what we consider "now", making it easy
     to build timelines of who gets what when.
     """
     return conditional_now() + self.timedelta(**self.now_shift_kwargs)
Example #10
0
 def now(self):
     """
     This allows us to override what we consider "now", making it easy
     to build timelines of who gets what when.
     """
     return conditional_now() + self.timedelta(**self.now_shift_kwargs)