def next(constraints): config = Config.default() session = startup(config) count, inc_tag, exc_tag, inc_artist, exc_artist, path = parse_constraints(constraints) tracks = session.query(Track).join(Artist) if inc_artist: query = session.query(Artist.id).filter(or_(Artist.name.like(name) for name in inc_artist)) tracks = tracks.filter(Artist.id.in_(query)) if exc_artist: query = session.query(Artist.id).filter(or_(Artist.name.like(name) for name in exc_artist)) tracks = tracks.filter(~Artist.id.in_(query)) if inc_tag: query = session.query(Artist.id).join(Artist.tags).filter(or_(Tag.text.like(tag) for tag in inc_tag)) tracks = tracks.filter(Artist.id.in_(query)) if exc_tag: query = session.query(Artist.id).join(Artist.tags).filter(or_(Tag.text.like(tag) for tag in exc_tag)) tracks = tracks.filter(~Artist.id.in_(query)) if path: (path, file) = split(path) track = session.query(Track).join(Album).filter(Album.path == path, Track.file == file).one() neighbours = all_neighbours(session, track, config.max_links) tracks = tracks.filter(Track.id.in_(neighbours)) for track in tracks.order_by(random()).limit(count): print('file://%s' % join(track.album.path, track.file))
def show(names): config = Config.default() session = startup(config) for name in names: for artist in session.query(Artist).filter(Artist.name.like(name)).all(): try: nest_artist = session.query(NestArtist).filter(NestArtist.artists.any(id=artist.id)).one() print('%s (%s)' % (artist.name, nest_artist.name)) except NoResultFound: nest_artist = None print('%s' % artist.name) print(' tags:\n %s' % ' '.join('"%s"' % tag.text for tag in artist.tags)) print(' albums:') for album in session.query(Album).join(Track).join(Artist)\ .filter(Artist.id == artist.id).distinct().all(): print(' %s' % album.name) if nest_artist: for other in nest_artist.artists: if other != artist: for album in session.query(Album).join(Track).join(Artist)\ .filter(Artist.id == other.id).distinct().all(): print(' %s (as %s)' % (album.name, other.name)) print(' linked to:') for link in session.query(Link).filter(Link.src == artist): print(' %s' % link.dst.name) print(' linked from:') for link in session.query(Link).filter(Link.dst == artist): print(' %s' % link.src.name)
def drop(name): warning('deleting %s' % name) config = Config.default() session = startup(config) finder = Finder(config, session) for artist in session.query(Artist).filter(Artist.name == name).all(): for track in session.query(Track).filter(Track.artist_id == artist.id).all(): warning('deleting %s from %s' % (track.name, track.album)) session.delete(track) session.commit() cull_artists(session, finder) cull_albums(session)
def who(names): config = Config.default() session = startup(config) artists = session.query(Artist.id) for name in names: debug('filtering by %s' % name) query = session.query(Artist.id).join(Artist.tags) if name.startswith('-'): artists = query.filter(Artist.id.in_(artists), not_(Artist.tags.any(Tag.text.like(name[1:])))) else: artists = query.filter(Artist.id.in_(artists), Artist.tags.any(Tag.text.like(name))) for artist in session.query(Artist).filter(Artist.id.in_(artists)).order_by(Artist.name): print(artist.name)
def add(count, names): config = Config.default() session = startup(config) tracks = session.query(Track.id) for name in names: debug('filtering by %s' % name) query = session.query(Track.id).join(Artist).join(Artist.tags) if name.startswith('-'): tracks = query.filter(Track.id.in_(tracks), not_(Artist.tags.any(Tag.text.like(name[1:])))) else: tracks = query.filter(Track.id.in_(tracks), Artist.tags.any(Tag.text.like(name))) tracks = session.query(Track).filter(Track.id.in_(tracks)).order_by(random()).limit(count) add_tracks(session, config, tracks.all())
def scan(all): config = Config.default() session = startup(config) finder = Finder(config, session) scan_all(session, finder, config, all)
def finder(self): config = Config.default() session = startup(config) return session, Finder(config, session)
def play(): config = Config.default() session = startup(config) play_links(session, config)
.filter(NestArtist.artists.any(id=artist.id)).one() def local_artist(self, session, id3name): for artist in session.query(Artist).filter(Artist.name == id3name): if not session.query(NestArtist).filter(NestArtist.artists.any(id=artist.id)).count(): debug('existing local artist %s' % id3name) return artist debug('creating local artist %s' % id3name) artist = Artist(name=id3name) session.add(artist) return artist def delete_artist(self, session, artist): try: nest_artist = self._nest_artist_from_music_artist(session, artist) nest_artist.artists.remove(artist) except NoResultFound: debug('no nest artist for %s' % artist.name) if __name__ == '__main__': config = Config.default() session = startup(config) finder = Finder(config, session) class Object: pass id3 = Object() id3.artist = 'Miles' id3.title = 'Blue' print(finder.find_artist(session, id3))
def transfer(root, size): config = Config.default() session = startup(config) transfer_size(session, config, root, size)
def link(): config = Config.default() session = startup(config) linker = Linker(config, session) link_all(session, linker)