Example #1
0
def get_event_email_data(event, email_type):
    e, v = event, event.venue
    d = dict(
        email_type=email_type,
        event_id=e.pk,
        event__title=e.title,
        event__event_url=e.get_absolute_url(force_hostname=True),
        event__tweet_count=e.tweet_count,
        event__short_url=e.get_short_url(),
        event__ticket_url=e.ticket_or_tm_url,
        event__event_date=e.event_date,
        event__event_start_time=e.event_start_time,
        event__event_timezone=e.event_timezone,
        event__venue__name=v.name,
        event__venue__address=v.address,
        event__venue__citystatezip=v.citystatezip,
        event__venue__map_url=v.map_url,
    )
    d['event__event_date'] = date_filter(d['event__event_date'], "l, N j, Y")
    if d['event__event_start_time']:
        d['event__event_start_time'] = time_filter(
            d['event__event_start_time'])
    if e.show_checkins:
        d['fsq_checkins'] = v.fsq_checkins
        d['fsq_ratio'] = v.fsq_ratio_display
    return d
Example #2
0
def get_event_email_data(event, email_type):
    e, v = event, event.venue
    d = dict(
        email_type=email_type,
        event_id=e.pk,
        event__title=e.title,
        event__event_url=e.get_absolute_url(force_hostname=True),
        event__tweet_count=e.tweet_count,
        event__short_url=e.get_short_url(),
        event__ticket_url=e.ticket_or_tm_url,
        event__event_date=e.event_date,
        event__event_start_time=e.event_start_time,
        event__event_timezone=e.event_timezone,
        event__venue__name=v.name,
        event__venue__address=v.address,
        event__venue__citystatezip=v.citystatezip,
        event__venue__map_url=v.map_url,
    )
    d['event__event_date'] = date_filter(d['event__event_date'], "l, N j, Y")
    if d['event__event_start_time']:
        d['event__event_start_time'] = time_filter(d['event__event_start_time'])
    if e.show_checkins:
        d['fsq_checkins'] =  v.fsq_checkins
        d['fsq_ratio'] = v.fsq_ratio_display
    return d
Example #3
0
def format_showtime(isoformat):
    """
    Usage: "2018-01-09T06:00:00.000-05:00"|format_showtime
    """
    if isoformat == '':
        return ''
    dt = datetime.fromisoformat(isoformat).time()
    return time_filter(dt)
Example #4
0
def send_favorites(hours=25, queue=None, limit_to_username=None):
    from event.models import RecommendedEvent, Event
    from event.templatetags.eventtags import event_friends
    from registration.models import UserProfile
    now = date.today()
    add_date_threshold = date.today() - timedelta(hours=hours)
    profiles = UserProfile.objects.active().filter(send_favorites=True).order_by('pk')
    if limit_to_username:
        profiles = profiles.filter(user__username=limit_to_username)
    n = 0
    q = queue or EventsQ(bind_queue=False)
    for p in profiles:
        a = p.user
        d = dict(
            email_type='favorites',
            attendee__username=a.username,
            attendee__email=a.email,
            attendee__first_name=a.first_name,
            attendee__last_name=a.last_name,
            attendee_profile_id=p.pk
        )
        picks = Event.objects.active().select_related('artist').filter(
                recommendedevent__user_profile=p,
                recommendedevent__added_on__gte=add_date_threshold,
        ).distinct().order_by('event_date', 'event_start_time')
        if picks:
            ripe_picks = []
            d['ripe_picks'] = ripe_picks
            for rp in picks:
                ripe = dict(
                    event__event_url=rp.get_absolute_url(force_hostname=True),
                    event__title=rp.title,
                    event__event_date=date_filter(rp.event_date, "l, N j, Y"),
                    event__event_start_time=time_filter(rp.event_start_time),
                    event__event_timezone=rp.event_timezone,
                )
                ripe_picks.append(ripe)
                num_fr = event_friends(rp, p).lower().replace('| ', '')
                if num_fr.endswith("friend"):
                    num_fr = "<b>" + num_fr + "</b> is interested in"
                elif num_fr.endswith("friends"):
                    num_fr = "<b>" + num_fr + "</b> are interested in"
                ripe['num_friends'] = num_fr
            send_event_reminder(d, queue=q, email_type='favorites')
            n += 1
    _log.debug("%s event favorite emails sent", n)
Example #5
0
def send_favorites(hours=25, queue=None, limit_to_username=None):
    from event.models import RecommendedEvent, Event
    from event.templatetags.eventtags import event_friends
    from registration.models import UserProfile
    now = date.today()
    add_date_threshold = date.today() - timedelta(hours=hours)
    profiles = UserProfile.objects.active().filter(
        send_favorites=True).order_by('pk')
    if limit_to_username:
        profiles = profiles.filter(user__username=limit_to_username)
    n = 0
    q = queue or EventsQ(bind_queue=False)
    for p in profiles:
        a = p.user
        d = dict(email_type='favorites',
                 attendee__username=a.username,
                 attendee__email=a.email,
                 attendee__first_name=a.first_name,
                 attendee__last_name=a.last_name,
                 attendee_profile_id=p.pk)
        picks = Event.objects.active().select_related('artist').filter(
            recommendedevent__user_profile=p,
            recommendedevent__added_on__gte=add_date_threshold,
        ).distinct().order_by('event_date', 'event_start_time')
        if picks:
            ripe_picks = []
            d['ripe_picks'] = ripe_picks
            for rp in picks:
                ripe = dict(
                    event__event_url=rp.get_absolute_url(force_hostname=True),
                    event__title=rp.title,
                    event__event_date=date_filter(rp.event_date, "l, N j, Y"),
                    event__event_start_time=time_filter(rp.event_start_time),
                    event__event_timezone=rp.event_timezone,
                )
                ripe_picks.append(ripe)
                num_fr = event_friends(rp, p).lower().replace('| ', '')
                if num_fr.endswith("friend"):
                    num_fr = "<b>" + num_fr + "</b> is interested in"
                elif num_fr.endswith("friends"):
                    num_fr = "<b>" + num_fr + "</b> are interested in"
                ripe['num_friends'] = num_fr
            send_event_reminder(d, queue=q, email_type='favorites')
            n += 1
    _log.debug("%s event favorite emails sent", n)
Example #6
0
 def test_inputs(self):
     self.assertEqual(time_filter(time(13), 'h'), '01')
     self.assertEqual(time_filter(time(0), 'h'), '12')
Example #7
0
 def test_no_args(self):
     self.assertEqual(time_filter(''), '')
     self.assertEqual(time_filter(None), '')
Example #8
0
 def test_inputs(self):
     self.assertEqual(time_filter(time(13), 'h'), '01')
     self.assertEqual(time_filter(time(0), 'h'), '12')
Example #9
0
def list_periods(periods, arg='H:i'):
    return ', '.join([
        '{start} - {end}'.format(start=time_filter(period.start.time(), arg),
                                 end=time_filter(period.end.time(), arg))
        for period in periods
    ])
Example #10
0
 def test_inputs(self):
     self.assertEqual(time_filter(time(13), "h"), "01")
     self.assertEqual(time_filter(time(0), "h"), "12")
Example #11
0
 def test_no_args(self):
     self.assertEqual(time_filter(""), "")
     self.assertEqual(time_filter(None), "")
Example #12
0
def send_reminders(hours=32,
                   queue=None,
                   limit_to_username=None,
                   location_list=None,
                   current_time=None):
    from event.models import Attendee, Event
    from event.templatetags.eventtags import event_friends
    aq = Attendee.objects.select_related('event__artist', 'event__venue',
                                         'attendee', 'attendee_profile__user')
    if hours < 24:
        now = current_time or datetime.now()
        today = now.date()
        next_hour = now + timedelta(hours=hours + 1)
        next_hour2 = next_hour + timedelta(hours=1)
        if next_hour2.hour < next_hour.hour:
            return  # don't send reminders around midnight for now
        min_time = timex(hour=next_hour.hour)
        max_time = timex(hour=next_hour2.hour)
        _log.debug("Hourly %s, %s", min_time, max_time)
        if location_list:
            _log.debug("Locations: %s", location_list)
            evlist = aq.filter(event__is_deleted=False,
                               event__is_approved=True,
                               event__event_date=today,
                               event__event_start_time__gte=min_time,
                               event__event_start_time__lt=max_time,
                               event__location__in=location_list,
                               attendee__is_active=True,
                               attendee_profile__send_reminders=True)
        else:
            evlist = aq.filter(event__is_deleted=False,
                               event__is_approved=True,
                               event__event_date=today,
                               event__event_start_time__gte=min_time,
                               event__event_start_time__lt=max_time,
                               attendee__is_active=True,
                               attendee_profile__send_reminders=True)
    else:
        now = date.today()
        end_date = date.today() + timedelta(hours=hours)
        evlist = aq.filter(event__is_deleted=False,
                           event__is_approved=True,
                           event__event_date__gte=now,
                           event__event_date__lte=end_date,
                           attendee__is_active=True,
                           attendee_profile__send_reminders=True)
    evlist = evlist.order_by('event__event_date')
    if limit_to_username:
        evlist = evlist.filter(attendee__username=limit_to_username)
    num = evlist.count()
    if not num:
        return
    _log.debug(
        "Reminding people about %s events coming up in the next %s hours", num,
        hours)
    q = queue or EventsQ(bind_queue=False)
    for o in evlist:
        e = o.event
        v = e.venue
        a = o.attendee
        p = o.attendee_profile
        d = dict(
            email_type='reminder',
            event_id=e.pk,
            event__title=e.title,
            event__event_url=e.get_absolute_url(force_hostname=True),
            event__tweet_count=e.tweet_count,
            event__short_url=e.get_short_url(),
            event__ticket_url=e.ticket_or_tm_url,
            event__event_date=e.event_date,
            event__event_start_time=e.event_start_time,
            event__event_timezone=e.event_timezone,
            event__venue__name=v.name,
            event__venue__address=v.address,
            event__venue__citystatezip=v.citystatezip,
            event__venue__map_url=v.map_url,
            attendee__username=a.username,
            attendee__email=a.email,
            attendee__first_name=a.first_name,
            attendee__last_name=a.last_name,
            attendee_profile_id=p.pk,
        )
        if hours < 2 and e.show_checkins:
            d['fsq_checkins'] = v.fsq_checkins
            d['fsq_ratio'] = v.fsq_ratio_display
        num_fr = event_friends(e, p).lower().replace('|', '')
        if num_fr.endswith("friend"):
            num_fr = num_fr + " is in for this event"
        elif num_fr.endswith("friends"):
            num_fr = num_fr + " are in for this event"
        d['num_friends'] = num_fr
        d['event__event_date'] = date_filter(d['event__event_date'],
                                             "l, N j, Y")
        if d['event__event_start_time']:
            d['event__event_start_time'] = time_filter(
                d['event__event_start_time'])
        # add ripe picks:
        # TODO: cache ripe picks for a few minutes
        picks = Event.objects.active().select_related('artist').filter(
            recommendedevent__user_profile=p).distinct().order_by('event_date')
        if picks:
            ripe_picks = []
            d['ripe_picks'] = ripe_picks
            for rp in picks:
                ripe = dict(
                    event__event_url=rp.get_absolute_url(force_hostname=True),
                    event__title=rp.title,
                    event__event_date=date_filter(rp.event_date, "l, N j, Y"),
                    event__event_start_time=time_filter(rp.event_start_time),
                    event__event_timezone=rp.event_timezone,
                )
                ripe_picks.append(ripe)
                num_fr = event_friends(rp, p).lower().replace('| ', '')
                if num_fr.endswith("friend"):
                    num_fr = "<b>" + num_fr + "</b> is interested in"
                elif num_fr.endswith("friends"):
                    num_fr = "<b>" + num_fr + "</b> are interested in"
                ripe['num_friends'] = num_fr
        send_event_reminder(d, queue=q)
Example #13
0
 def test_no_args(self):
     self.assertEqual(time_filter(''), '')
     self.assertEqual(time_filter(None), '')
Example #14
0
 def test_inputs(self):
     self.assertEqual(time_filter(time(13), "h"), "01")
     self.assertEqual(time_filter(time(0), "h"), "12")
Example #15
0
def send_reminders(hours=32, queue=None, limit_to_username=None, location_list=None, current_time=None):
    from event.models import Attendee, Event
    from event.templatetags.eventtags import event_friends
    aq = Attendee.objects.select_related('event__artist', 'event__venue', 'attendee', 'attendee_profile__user')
    if hours < 24:
        now = current_time or datetime.now()
        today = now.date()
        next_hour = now + timedelta(hours=hours+1)
        next_hour2 = next_hour + timedelta(hours=1)        
        if next_hour2.hour < next_hour.hour:
            return # don't send reminders around midnight for now
        min_time = timex(hour=next_hour.hour)
        max_time=timex(hour=next_hour2.hour)
        _log.debug("Hourly %s, %s", min_time, max_time)
        if location_list:
            _log.debug("Locations: %s", location_list)
            evlist = aq.filter(
                event__is_deleted=False,
                event__is_approved=True,
                event__event_date=today,
                event__event_start_time__gte=min_time,
                event__event_start_time__lt=max_time,
                event__location__in=location_list,
                attendee__is_active=True,
                attendee_profile__send_reminders=True
            )
        else:
            evlist = aq.filter(
                event__is_deleted=False,
                event__is_approved=True,
                event__event_date=today,
                event__event_start_time__gte=min_time,
                event__event_start_time__lt=max_time,
                attendee__is_active=True,
                attendee_profile__send_reminders=True
            )        
    else :
        now = date.today()
        end_date = date.today() + timedelta(hours=hours)    
        evlist = aq.filter(
            event__is_deleted=False,
            event__is_approved=True,
            event__event_date__gte=now,
            event__event_date__lte=end_date,
            attendee__is_active=True,
            attendee_profile__send_reminders=True
        )
    evlist = evlist.order_by('event__event_date')
    if limit_to_username:
        evlist = evlist.filter(attendee__username=limit_to_username)
    num = evlist.count()
    if not num:
        return
    _log.debug("Reminding people about %s events coming up in the next %s hours", num, hours)
    q = queue or EventsQ(bind_queue=False)
    for o in evlist:
        e = o.event
        v = e.venue
        a = o.attendee
        p = o.attendee_profile
        d = dict(
            email_type='reminder',
            event_id=e.pk,
            event__title=e.title,
            event__event_url=e.get_absolute_url(force_hostname=True),
            event__tweet_count=e.tweet_count,
            event__short_url=e.get_short_url(),
            event__ticket_url=e.ticket_or_tm_url,
            event__event_date=e.event_date,
            event__event_start_time=e.event_start_time,
            event__event_timezone=e.event_timezone,
            event__venue__name=v.name,
            event__venue__address=v.address,
            event__venue__citystatezip=v.citystatezip,
            event__venue__map_url=v.map_url,
            attendee__username=a.username,
            attendee__email=a.email,
            attendee__first_name=a.first_name,
            attendee__last_name=a.last_name,
            attendee_profile_id=p.pk,
        )
        if hours < 2 and e.show_checkins:
            d['fsq_checkins'] = v.fsq_checkins
            d['fsq_ratio'] = v.fsq_ratio_display
        num_fr = event_friends(e, p).lower().replace('|', '')
        if num_fr.endswith("friend"):
            num_fr = num_fr + " is in for this event"
        elif num_fr.endswith("friends"):
            num_fr = num_fr + " are in for this event"
        d['num_friends'] = num_fr
        d['event__event_date'] = date_filter(d['event__event_date'], "l, N j, Y")
        if d['event__event_start_time']:
            d['event__event_start_time'] = time_filter(d['event__event_start_time'])
        # add ripe picks:
        # TODO: cache ripe picks for a few minutes
        picks = Event.objects.active().select_related('artist').filter(
            recommendedevent__user_profile=p
        ).distinct().order_by('event_date')
        if picks:
            ripe_picks = []
            d['ripe_picks'] = ripe_picks
            for rp in picks:
                ripe = dict(
                    event__event_url=rp.get_absolute_url(force_hostname=True),
                    event__title=rp.title,
                    event__event_date=date_filter(rp.event_date, "l, N j, Y"),
                    event__event_start_time=time_filter(rp.event_start_time),
                    event__event_timezone=rp.event_timezone,
                )
                ripe_picks.append(ripe)
                num_fr = event_friends(rp, p).lower().replace('| ', '')
                if num_fr.endswith("friend"):
                    num_fr = "<b>" + num_fr + "</b> is interested in"
                elif num_fr.endswith("friends"):
                    num_fr = "<b>" + num_fr + "</b> are interested in"
                ripe['num_friends'] = num_fr
        send_event_reminder(d, queue=q)