예제 #1
0
 def assign(self, user, site=None, start_date=None, end_date=None):
     if site is None:
         site = get_current_site()
     result = []
     for date in reversed(
             self.missing_dates(user=user,
                                site=site,
                                start_date=start_date,
                                end_date=end_date)):
         user_segment, created = self.get_or_create(user=user,
                                                    site=site,
                                                    date=date)
         if not user_segment.segment:
             try:
                 user_segment.segment = self.model._get_segment(user=user,
                                                                date=date)
                 if not user_segment.segment:
                     raise ValueError('get_segment cannot be empty: %r' %
                                      user_segment.segment)
             except:
                 user_segment.delete()
                 raise
             user_segment.save()
         result.append(user_segment)
     return result
예제 #2
0
 def create_sign_in(self, user, medium, datetime):
     """Log the fact that the user has become active again."""
     sign_in, _ = SignIn.objects.get_or_create(site=get_current_site(),
                                               user=user,
                                               medium=medium,
                                               datetime=datetime)
     return sign_in
 def setUp(self):
     self.mox = mox.Mox()
     self.user = User.objects.create_user('user', '*****@*****.**', 'user')
     self.activity, _ = DailyActivity.objects.stamp(user=self.user,
                                                    site=get_current_site(),
                                                    medium='Default')
     self.activity.days = 29
     self.activity.save()
예제 #4
0
 def setUp(self):
     self.mox = mox.Mox()
     self.user = User.objects.create_user('user', '*****@*****.**',
                                          'user')
     self.activity, _ = DailyActivity.objects.stamp(user=self.user,
                                                    site=get_current_site(),
                                                    medium='Default')
     self.activity.days = 29
     self.activity.save()
예제 #5
0
 def _track(self, request, response):
     # Has the user done anything today?
     activity, created = DailyActivity.objects.stamp(
         user=request.user,
         site=get_current_site(),
         medium=self.medium(request=request, response=response))
     if created:
         # Send a signal as the user has become active today
         signals.new_day.send(daily_activity=activity,
                              request=request,
                              sender=self.__class__)
     return response
예제 #6
0
def get_user_segments(segment, usernames=None, start_date=None, end_date=None):
    """
    Returns a QuerySet of segment objects for usernames.

    `usernames` is a list of usernames to match.
    """
    result = segment.objects.filter(site=get_current_site())
    if start_date:
        pass
    if end_date:
        pass
    if usernames:
        result = result.filter(user__in=get_users(usernames=usernames))
    return result
예제 #7
0
 def missing_dates(self, user, site=None, start_date=None, end_date=None):
     if site is None:
         site = get_current_site()
     date_joined = user.date_joined.date()
     if start_date is None or start_date < date_joined:
         # Start looking from the day the user joined.
         start_date = date_joined
     today = date.today()
     if end_date is None or end_date >= today:
         # Stop looking at yesterday, because today is not valid.
         end_date = today - ONE_DAY
     # Figure out which dates have already been computed
     segments = self.model.objects.filter(user=user, site=site)
     if site is None:
         segments = segments.filter(site__isnull=True)
     dates = segments.filter(date__range=(start_date, end_date)).values_list(
         'date', flat=True
     )
     # Figure out the missing dates
     date_range = irange(start_date, end_date + ONE_DAY, ONE_DAY)
     return list(sorted(set(date_range) - set(dates)))
예제 #8
0
 def missing_dates(self, user, site=None, start_date=None, end_date=None):
     if site is None:
         site = get_current_site()
     date_joined = user.date_joined.date()
     if start_date is None or start_date < date_joined:
         # Start looking from the day the user joined.
         start_date = date_joined
     today = date.today()
     if end_date is None or end_date >= today:
         # Stop looking at yesterday, because today is not valid.
         end_date = today - ONE_DAY
     # Figure out which dates have already been computed
     segments = self.model.objects.filter(user=user, site=site)
     if site is None:
         segments = segments.filter(site__isnull=True)
     dates = segments.filter(date__range=(start_date,
                                          end_date)).values_list('date',
                                                                 flat=True)
     # Figure out the missing dates
     date_range = irange(start_date, end_date + ONE_DAY, ONE_DAY)
     return list(sorted(set(date_range) - set(dates)))
예제 #9
0
 def _track(self, request, response):
     # Figure out when the user last had any activity
     user = request.user
     now = datetime.now()
     site = get_current_site()
     medium = self.medium(request=request, response=response)
     activity, created = LastActivity.objects.get_or_create(
         user=user, site=site, medium=medium, defaults={'datetime': now})
     past = activity.datetime
     if (now - past) > timedelta(seconds=1):
         # Update the last activity stamp
         activity.datetime = now
         activity.save()
     if created or \
        (now - past) > timedelta(seconds=settings.LAST_ACTIVITY_WINDOW):
         sign_in = self.create_sign_in(user=user,
                                       medium=medium,
                                       datetime=now)
         # Send a signal as the user has become active again
         signals.sign_in.send(sign_in=sign_in,
                              request=request,
                              sender=self.__class__)
     return response
예제 #10
0
 def assign(self, user, site=None, start_date=None, end_date=None):
     if site is None:
         site = get_current_site()
     result = []
     for date in reversed(self.missing_dates(user=user, site=site,
                                             start_date=start_date,
                                             end_date=end_date)):
         user_segment, created = self.get_or_create(
             user=user, site=site, date=date
         )
         if not user_segment.segment:
             try:
                 user_segment.segment = self.model._get_segment(user=user,
                                                                date=date)
                 if not user_segment.segment:
                     raise ValueError('get_segment cannot be empty: %r' %
                                      user_segment.segment)
             except:
                 user_segment.delete()
                 raise
             user_segment.save()
         result.append(user_segment)
     return result