def load_from_id(klass, song_id, sid = None): if sid: d = db.c.fetch_row("SELECT * FROM r4_songs JOIN r4_song_sid USING (song_id) WHERE r4_songs.song_id = %s AND r4_song_sid.sid = %s", (song_id, sid)) else: d = db.c.fetch_row("SELECT * FROM r4_songs WHERE song_id = %s", (song_id,)) if not d: raise SongNonExistent try: s = klass() s.id = song_id s.sid = sid s.filename = d['song_filename'] s.verified = d['song_verified'] s.replay_gain = d['song_replay_gain'] s.data['sids'] = db.c.fetch_list("SELECT sid FROM r4_song_sid WHERE song_id = %s", (song_id,)) s.data['sid'] = sid s.data['rank'] = None s._assign_from_dict(d) if 'album_id' in d and d['album_id']: if sid: s.albums = [ Album.load_from_id_sid(d['album_id'], s.sid) ] else: s.albums = [ Album.load_from_id(d['album_id']) ] s.artists = Artist.load_list_from_song_id(song_id) s.groups = SongGroup.load_list_from_song_id(song_id) except Exception as e: log.exception("song", "Song failed to load.", e) db.c.update("UPDATE r4_songs SET song_verified = FALSE WHERE song_id = song_id") raise return s
def load_from_id(klass, song_id, sid = None): if sid is not None: d = db.c.fetch_row("SELECT * FROM r4_songs JOIN r4_song_sid USING (song_id) WHERE r4_songs.song_id = %s AND r4_song_sid.sid = %s", (song_id, sid)) else: d = db.c.fetch_row("SELECT * FROM r4_songs WHERE song_id = %s", (song_id,)) if not d: raise SongNonExistent try: s = klass() s.id = song_id s.sid = sid s.filename = d['song_filename'] s.verified = d['song_verified'] s.replay_gain = d['song_replay_gain'] s.data['sids'] = db.c.fetch_list("SELECT sid FROM r4_song_sid WHERE song_id = %s", (song_id,)) s.data['sid'] = sid s.data['rank'] = None s._assign_from_dict(d) if 'album_id' in d and d['album_id']: if sid is not None: s.albums = [ Album.load_from_id_sid(d['album_id'], s.sid) ] else: s.albums = [ Album.load_from_id(d['album_id']) ] s.artists = Artist.load_list_from_song_id(song_id) s.groups = SongGroup.load_list_from_song_id(song_id) except Exception as e: log.exception("song", "Song ID %s failed to load, sid %s." % (song_id, sid), e) s.disable() raise return s
def load_from_id(klass, song_id, sid = None, all_categories = False): if sid is not None: d = db.c.fetch_row("SELECT * FROM r4_songs JOIN r4_song_sid USING (song_id) WHERE r4_songs.song_id = %s AND r4_song_sid.sid = %s", (song_id, sid)) else: d = db.c.fetch_row("SELECT * FROM r4_songs WHERE song_id = %s", (song_id,)) sid = d['song_origin_sid'] if not d: raise SongNonExistent try: s = klass() s.id = song_id s.sid = sid s.filename = d['song_filename'] s.verified = d['song_verified'] s.replay_gain = d['song_replay_gain'] s.data['sids'] = db.c.fetch_list("SELECT sid FROM r4_song_sid WHERE song_id = %s", (song_id,)) s.data['sid'] = sid s.data['rank'] = None s._assign_from_dict(d) if 'album_id' in d and d['album_id']: s.albums = [ Album.load_from_id_sid(d['album_id'], sid) ] s.artists = Artist.load_list_from_song_id(song_id) s.groups = SongGroup.load_list_from_song_id(song_id, sid, all_categories = all_categories) except Exception as e: log.exception("song", "Song ID %s failed to load, sid %s." % (song_id, sid), e) s.disable() raise return s