Ejemplo n.º 1
0
def debug():
    config = Config(db_url='sqlite:////home/andrew/.uykfgdb')
    session = startup(config)
    for data in session.query(CacheData).filter(CacheData.exception == True).all():
        print('key %r' % data.key)
        print('value %r' % decode_value(data.value))
    session.query(CacheData).filter(CacheData.exception == True).delete()
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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))
Ejemplo n.º 4
0
    def test_network(self):

        session = startup(Config(db_url='sqlite:///'))

        alice = Artist(name='alice')
        session.add(alice)
        bob = Artist(name='bob')
        session.add(bob)
        session.add(Link(src=bob, dst=alice))
        assert len(alice.srcs) == 1, alice.srcs
        assert alice.srcs[0].src == bob
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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())
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
    def test_db(self):

        session = startup(Config(db_url='sqlite:///', modules=['uykfg.nest']))

        nest_artist = NestArtist()
        session.add(nest_artist)
        session.commit()

        artist = Artist(name='bob', tag_id=nest_artist.id)
        nest_artist.artist = artist
        session.add(artist)
        session.commit()

        session = Session()
        artists = session.query(Artist).all()
        assert len(artists) == 1, artists
        nest_artists = session.query(NestArtist).all()
        assert len(nest_artists) == 1, nest_artists
        assert nest_artists[0].artist == artists[0]
Ejemplo n.º 9
0
    def test_fallback(self):
        config = Config(db_url='sqlite://')
        session = startup(config)
        cached_explode = Cache(explode, session)

        # first time, sets cache
        assert 'value' == cached_explode(1)
        # second time, uses fallback
        assert 'value' == cached_explode(1)
        # third time, new cache (new key)
        try:
            cached_explode(2)
            assert False, 'expected error'
        except Exception:
            pass
        # fourth time, not fallback
        try:
            cached_explode(1)
            assert False, 'expected error'
        except Exception:
            pass
Ejemplo n.º 10
0
    def test_catalogue(self):

        session = startup(Config(db_url='sqlite:///'))

        artist = Artist(name='bob')
        session.add(artist)
        track1 = Track(name='track1', artist=artist, number='1', file='file1', modified=time())
        session.add(track1)
        track2 = Track(name='track2', artist=artist, number='2', file='file2', modified=time())
        session.add(track2)
        album = Album(name='album', tracks=[track1, track2], path='/')
        session.add(album)
        session.commit()

        artists = session.query(Artist).all()
        assert len(artists) == 1, artists
        assert len(artists[0].tracks) == 2, artists[0].tracks
        tracks = session.query(Track).all()
        assert len(tracks) == 2, tracks
        albums = session.query(Album).all()
        assert len(albums) == 1, albums
        assert tracks[0].album == albums[0]
Ejemplo n.º 11
0
    def test_cache(self):
        config = Config(db_url='sqlite://')
        session = startup(config)
        cached_stringify = Cache(stringify, session)
        self._assert(stringify(1, 2, three=4), "(1, 2) {'three': 4}")
        self._assert(cached_stringify(1, 2, three=4), "(1, 2) {'three': 4}")
        assert cached_stringify.hits == 0, cached_stringify.hits
        assert cached_stringify.misses == 1, cached_stringify.misses
        self._assert(cached_stringify(1, 2, three=4), "(1, 2) {'three': 4}")
        assert cached_stringify.hits == 1, cached_stringify.hits
        assert cached_stringify.misses == 1, cached_stringify.misses

        self._assert(cached_stringify(1, 2, three=5), "(1, 2) {'three': 5}")
        assert cached_stringify.misses == 2, cached_stringify.misses

        assert cached_stringify._owner.total_size == 154, cached_stringify._owner.total_size
        cached_stringify = Cache(stringify, session, max_size=77, value_lifetime=1)
        self._assert(cached_stringify(1, 2, three=6), "(1, 2) {'three': 6}")
        assert cached_stringify.misses == 1, cached_stringify.misses
        assert cached_stringify._owner.total_size == 77, cached_stringify._owner.total_size
        sleep(3)
        self._assert(cached_stringify(1, 2, three=7), "(1, 2) {'three': 7}")
        assert cached_stringify.misses == 2, cached_stringify.misses
        assert cached_stringify._owner.total_size == 77, cached_stringify._owner.total_size
Ejemplo n.º 12
0
def scan(all):
    config = Config.default()
    session = startup(config)
    finder = Finder(config, session)
    scan_all(session, finder, config, all)
Ejemplo n.º 13
0
    def scan_directory(self, file):
        config = Config(mp3_path=join(parent(__file__), file), db_url='sqlite:///')
#        config = Config(mp3_path=join(parent(__file__), file), db_url='sqlite:////tmp/test.sql')
        session = startup(config)
        scan_all(session, DummyFinder(), config)
        return session, config
Ejemplo n.º 14
0
 def finder(self):
     config = Config.default()
     session = startup(config)
     return session, Finder(config, session)
Ejemplo n.º 15
0
def play():
    config = Config.default()
    session = startup(config)
    play_links(session, config)
Ejemplo n.º 16
0
def link():
    config = Config.default()
    session = startup(config)
    linker = Linker(config, session)
    link_all(session, linker)
Ejemplo n.º 17
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))
Ejemplo n.º 18
0
def transfer(root, size):
    config = Config.default()
    session = startup(config)
    transfer_size(session, config, root, size)