def load_tag(song_id,location): sqla_session = get_session() song = sqla_session.query(Song).get(song_id) song_tag = tagtools.tag_handler(location) song_data,failed = song_tag.read(ignore=REQ_SONG_DATA+["SONGID"]) for frame in song_data.keys(): if song_data[frame] not in song.tags.\ filter(Tag.frame==frame).all(): change_tag(song_id,frame,song_data[frame],write_tag=False) close_session(sqla_session)
def add_song(location): sqla_session = get_session() song_tag = tagtools.tag_handler(location) song_data,failed = song_tag.read(REQ_SONG_DATA,force=True) song = Song(song_data['TITLE'],song_data['ARTIST'],song_data['ALBUM']) sqla_session.add(song) sqla_session.commit() song_id = song.id close_session(sqla_session) load_tag(song_id,location) return song_id
def change_tag(song_id, frame, value, write_tag=False): frame = frame.upper() remove_tags(song_id,frame) sqla_session = get_session() song = sqla_session.query(Song).get(song_id) if frame in REQ_SONG_DATA: exec('song.'+frame.lower()+'=\''+value+'\'') else: try: tag = sqla_session.query(Tag).filter(tag.frame==frame)\ .filter(tag.value==value).one() except: tag = Tag(frame,value) sqla_session.add(tag) song.tags.append(tag) if write_tag: locations = [song_file.location for song_file in song.song_files] for location in locations: song_tag = tagtools.tag_handler(location) song_tag.write({frame:value}) close_session(sqla_session)