예제 #1
0
파일: next.py 프로젝트: andrewcooke/uykfg
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))
예제 #2
0
파일: show.py 프로젝트: andrewcooke/uykfg
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)
예제 #3
0
파일: drop.py 프로젝트: andrewcooke/uykfg
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)
예제 #4
0
파일: who.py 프로젝트: andrewcooke/uykfg
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)
예제 #5
0
파일: add.py 프로젝트: andrewcooke/uykfg
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())
예제 #6
0
파일: scan.py 프로젝트: andrewcooke/uykfg
def scan(all):
    config = Config.default()
    session = startup(config)
    finder = Finder(config, session)
    scan_all(session, finder, config, all)
예제 #7
0
 def finder(self):
     config = Config.default()
     session = startup(config)
     return session, Finder(config, session)
예제 #8
0
파일: play.py 프로젝트: andrewcooke/uykfg
def play():
    config = Config.default()
    session = startup(config)
    play_links(session, config)
예제 #9
0
                .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))
예제 #10
0
def transfer(root, size):
    config = Config.default()
    session = startup(config)
    transfer_size(session, config, root, size)
예제 #11
0
파일: link.py 프로젝트: andrewcooke/uykfg
def link():
    config = Config.default()
    session = startup(config)
    linker = Linker(config, session)
    link_all(session, linker)