def test_mark_orphans(self): t1 = db.execute('INSERT INTO tracks (title, weight) VALUES (NULL, 1)') db.execute('INSERT INTO labels (track_id, label, email) VALUES (?, \'music\', \'nobody\')', (t1, )) t2 = db.execute('INSERT INTO tracks (title, weight) VALUES (NULL, 1)') db.execute('INSERT INTO labels (track_id, label, email) VALUES (?, \'foobar\', \'nobody\')', (t2, )) if not db.Open().mark_orphans(quiet=True): self.fail('database.mark_orphans() failed to find tracks.') rows = db.fetch('SELECT track_id FROM labels WHERE label = \'orphan\'') self.assertEquals(1, len(rows), 'one track must have been labelled orphan, not %u' % len(rows)) self.assertEquals(t2, rows[0][0], 'wrong track labelled orphan')
def test_sticky_labels(self): genres = ["rock", "jazz", "calm"] for genre in genres: for idx in range(10): track_id = database.execute( "INSERT INTO tracks (weight, artist, filename) VALUES (1, 'somebody', 'dummy.mp3')" ) database.execute( "INSERT INTO labels (track_id, label, email) VALUES (?, ?, ?)", ( track_id, "music", "-", )) database.execute( "INSERT INTO labels (track_id, label, email) VALUES (?, ?, ?)", ( track_id, genre, "-", )) logging.debug("track %u genre: %s" % (track_id, genre)) logging.debug(database.fetch("SELECT * FROM labels")) playlist = { "name": "sticky", "labels": ["music"], "sticky_labels": genres, } sticky_label, track = self._pick_track(playlist, genres) logging.debug("Picked first track %u with labels: %s, sticky=%s" % (track["id"], track.get_labels(), sticky_label)) # Make sure 100 tracks follow this rule. for idx in range(100): new_label, track = self._pick_track(playlist, genres) self.assertEquals(new_label, sticky_label)
def get_voters(): """Returns information on voters in tuples (email, count, weight).""" rows = database.fetch('SELECT v.email, COUNT(*) AS c, k.weight ' 'FROM votes v LEFT JOIN karma k ON k.email = v.email ' 'GROUP BY v.email ORDER BY c DESC, k.weight DESC, v.email') return rows