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
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
def changed_by(row): if not row.changed_by: return "Nobody (batch)" else: return UserAcct.get(row.changed_by).user_name
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))