예제 #1
0
파일: batch.py 프로젝트: agrover/BandRadar
def lastfm_artist_update(artist):
    artist_info = lastfm.artist_info(artist.name)
    artist.img_url = artist_info["img_url"]
    artist.tags = artist_info["tags"]
    sims_objs = []
    sims_names = artist_info["similars"]
    for artist_name in sims_names:
        try:
            sim_artist = Artist.byNameI(artist_name)
        except SQLObjectNotFound:
            # keep out too-short names
            if len(artist_name) < 3:
                continue
            try:
                sim_artist = Artist(name=artist_name, added_by=UserAcct.get(1))
            except SQLObjectIntegrityError:
                print "trying to add '%s'" % artist_name
                hub.rollback()
                hub.begin()
            # Artists added this way are *not* approved. This keeps them from
            # also having sims generated (when they could be non-local bands
            # that we really don't care much about.)
            # If they have events approved, then of course they are, too.
        sims_objs.append(sim_artist)
    artist.similars = sims_objs
예제 #2
0
 def record_request(self, visit):
     if identity.current.user:
         # if we are logged in, watch for the "remember" param, and set the
         # cookie if so.
         if cherrypy.request.params.pop("remember", None):
             vi = VisitIdentity.by_visit_key(visit.key)
             vi.expiry = remember(visit)
     else:
         # if we're not logged in, see if the cookie is there, and log in
         try:
             saved_key = cherrypy.request.simple_cookie[cookie_name].value
             vi = VisitIdentity.by_visit_key(saved_key)
             u = UserAcct.get(vi.user_id)
             identity.current_provider.validate_identity(u.user_name,
                 u.password, visit.key)
             # must commit or db will forget we logged in, when we 
             # redirect (rollback) below
             hub.commit()
             # reload, since now we're logged in
             turbogears.redirect(cherrypy.request.path)
         except (KeyError, SQLObjectNotFound):
             pass
예제 #3
0
def changed_by(row):
    if not row.changed_by:
        return "Nobody (batch)"
    else:
        return UserAcct.get(row.changed_by).user_name
예제 #4
0
파일: batch.py 프로젝트: agrover/BandRadar
def send_email(start, finish):
    conn = hub.getConnection()

    users_to_email = set()

    #
    # Gather results for tracked artists. Notify if events added since last update
    #
    artist_email = {}
    results = conn.queryAll(
        """
        select u.id, e.name, e.date, v.name
        from user_acct u, artist_user_acct au, artist a, artist_event ae, event e, venue v
        where
            u.event_email is true
            and u.id = au.user_acct_id
            and a.id = au.artist_id
            and a.id = ae.artist_id
            and ae.event_id = e.id
            and e.venue_id = v.id
            and e.created >= '%s'
            and e.created < '%s'
            and e.date >= CURRENT_DATE
        """
        % (start, finish)
    )
    for user_id, name, date, venue_name in results:
        evt_list = artist_email.get(user_id, list())
        evt_list.append((unicode(name, "utf-8"), date, unicode(venue_name, "utf-8")))
        artist_email[user_id] = evt_list
        users_to_email.add(user_id)

    #
    # Gather results for tracked events. Notify if they're today
    #
    event_email = {}
    results = conn.queryAll(
        """
        select e.id, e.name, att.user_id, v.name
        from event e, attendance att, venue v
            where e.date = CURRENT_DATE
            and e.id = att.event_id
            and e.venue_id = v.id
        """
    )
    for event_id, event_name, user_id, venue_name in results:
        evt_list = event_email.get(user_id, list())
        evt_list.append((unicode(event_name, "utf-8"), venue_name))
        event_email[user_id] = evt_list
        users_to_email.add(user_id)

    # Gather results for tracked venues. Once a week.
    # why do this here, instead of having a separate scheduled function called?
    # because we want to put both artist and venue notifications in the same email.
    venue_email = {}
    if finish.isoweekday() == 4:
        results = conn.queryAll(
            """
            select u.id, e.name, e.date, v.name
            from user_acct u, venue v, event e, user_acct_venue uv
            where
                u.event_email is true
                and e.venue_id = v.id
                and u.id = uv.user_acct_id
                and uv.venue_id = v.id
                and e.date >= CURRENT_DATE
                order by e.date
            """
        )

        for user_id, event_name, date, venue_name in results:
            venue_dict = venue_email.get(user_id, dict())
            venue = venue_dict.get(venue_name, list())
            venue.append((unicode(event_name, "utf-8"), date))
            venue_dict[venue_name] = venue
            venue_email[user_id] = venue_dict
            users_to_email.add(user_id)

    for id in users_to_email:
        import pkg_resources

        u = UserAcct.get(id)

        event_text = ""
        for event_name, venue_name in event_email.get(id, list()):
            event_text += u"%s, at %s\n" % (event_name, venue_name)
        if event_text:
            hdr_txt = "These events you want to go to are TONIGHT!\n\n"
            event_text = hdr_txt + event_text + "\n"

        artist_text = ""
        for event_name, date, venue_name in artist_email.get(id, list()):
            artist_text += u"%s, %s at %s\n" % (event_name, date, venue_name)
        if artist_text:
            hdr_txt = "Newly added shows featuring artists you are tracking:\n\n"
            artist_text = hdr_txt + artist_text + "\n"

        venue_text = ""
        for venue_name, event_list in venue_email.get(id, dict()).iteritems():
            venue_text += venue_name + "\n" + ("-" * len(venue_name)) + "\n"
            for name, date in event_list:
                venue_text += u"%s: %s\n" % (date, name)
            venue_text += "\n"
        if venue_text:
            hdr_txt = "Upcoming shows at the venues you are tracking:\n\n"
            venue_text = hdr_txt + venue_text

        text = event_text + artist_text + venue_text

        user_url = "http://bandradar.com/users/%s" % u.user_name
        msg_to = u.email_address
        msg_from = "BandRadar Events <*****@*****.**>"
        body = pkg_resources.resource_string(__name__, "templates/new_event_email.txt")
        body = body % {"text": text, "user_url": user_url}

        util.email(msg_to, msg_from, "BandRadar upcoming events", body)

    return (len(users_to_email), len(artist_email), len(venue_email))